Redis的补充和客户端
- 一.类型补充
 - 1.Stream
 - 2.Geospatial
 - 3.HyperLogLog
 - 4.Bitmaps
 - 5.Bitfields
 
- 二.渐进式遍历
 - scan
 
- 三.数据库命令
 - 1.Select
 - 2.DBSIZE
 - 3.flushdb
 - 4.flushall
 
- 四.RESP
 
一.类型补充
1.Stream
Redis Stream 是 Redis 5.0 引入的一种数据结构,专为高效处理消息流和事件日志设计。它结合了日志的持久化特性和消息队列的消费组模式,适用于实时数据处理、消息队列、事件溯源等场景。
相关命令:

2.Geospatial
Redis 的 Geospatial 是一种基于 Sorted Set(有序集合) 实现的地理位置数据类型,用于存储和查询地理坐标(经度、纬度)。它通过 GeoHash 编码 将经纬度转换为一个 52 位的整数分数(作为 Sorted Set 的 score),从而支持高效的地理位置范围查询和距离计算。


命令:
 
3.HyperLogLog
HyperLogLog 是 Redis 提供的一种概率型基数估计算法,用于高效统计一个集合中不重复元素的数量(即基数)。

 
命令:

4.Bitmaps
Bitmaps 是 Redis 中基于 String 类型 实现的二进制位操作结构,通过将字符串视为二进制位数组(每个位只能存储 0 或 1),支持高效的位级读写和统计。

命令:

5.Bitfields
BITFIELD 是 Redis 中用于对 String 类型键进行位级结构化操作的命令。它将字符串视为一个由多个整数字段组成的位数组,允许对不同位宽的字段进行读写、递增等操作,特别适用于高效存储和操作多个紧凑的整数值。

基础命令:
 
二.渐进式遍历
Redis 中的 渐进式遍历(Incremental Iteration) 是一种高效遍历大量数据的机制,旨在避免长时间阻塞服务器,保障服务的响应性和可用性。其核心通过 SCAN 系列命令(如 SCAN、HSCAN、SSCAN、ZSCAN)实现,替代了阻塞式的 KEYS、SMEMBERS 等命令。
scan
以渐进式的方式遍历key

 
 
 
scan命令渐进式过程图:
cursor是光标,光标指向了当前遍历的位置,count代表获取几个元素。
如果光标设置为0,意味着这次遍历从头开始获取。
返回值的前半部分,提示用户下次遍历光标起始位置,后面的数据就是真正遍历到的key的内容。
需要注意的是,cursor不是一个连续递增的整数的下标,只能理解为仅仅是一个字符串,无法知道其中的规律,只有redis的服务器知道这个光标对应元素的位置。
 
演示:
第一个11代表下一次光标的起始位置,后续的数据代表这次查询到的key有哪些:
 
scan是有可能返回空集合的,当下一次的光标起始位置为0的时候,就已经将key遍历结束了。
 
count输入3,代表查询的key是大约3个,而不是一定为3个。
 
注意:
 这里的渐进式遍历在遍历过程中,不会在服务器这边存储任何的状态信息,此处的遍历是随时可以终止的,不会对服务器有任何的副作用。
渐进式遍历scan虽然解决了阻塞的问题,但如果在遍历期间键有所变化(增加、修改、删除),可能导致遍历时键的重复遍历或者遗漏,在实际开发中必须考虑这个点。
三.数据库命令
1.Select
redis中的databases是现成的,用户无法创建和删除,这是与MySQL不同的地方,并且redis的database只有16个,下标是0~15,默认情况下是0.

演示:
 查询其他database时,会有一个[],中间的数字代表是第几个database.
 
 
2.DBSIZE
获取当前数据库的key个数

 演示:
 
3.flushdb
删除当前数据库中的所有key,ASYNC是异步的,SYNC是同步的

 
 演示:

4.flushall
删除所有数据库中的所有key

 
演示:
 
四.RESP
RESP protocol spec是redis自定义的应用层的协议名字,知道了redis应用层的协议就能够自定义开发一个redis的客户端。
redis的应用层协议官方英文文档
RESP协议的优点
- 简单好实现
 - 快速进行解析
 - 肉眼刻度
 - 传输层基于TCP,但是和TCP又没有强耦合
 - 请求和相应之间的通信模式是一问一答的形式
 
