Redis的补充和RESP

发布于:2025-03-31 ⋅ 阅读:(26) ⋅ 点赞:(0)

一.类型补充

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又没有强耦合
  • 请求和相应之间的通信模式是一问一答的形式

网站公告

今日签到

点亮在社区的每一天
去签到