redis官网关于数据类型的介绍: Understand Redis data types | Redis
本文简单讲解后物种数据类型的命令和应用场景。
Streams:
Stream是一种数据结构,其作用类似于仅附加日志。 Stream有助于按事件发生的顺序记录事件,然后将它们联合起来进行处理。 可以用作与阻塞队列。
在 Redis 中,Streams(流)是一种用于处理实时消息流的数据结构。它是一个有序的、可持久化的日志数据结构,类似于消息队列,但具有更丰富的功能。
Redis 提供了一组命令用于操作 Streams,以下是一些常用的 Streams 相关命令:
XADD key [MAXLEN [~]|~] [ID field value ...]
:将一个新的条目添加到指定的流中,并为条目分配一个唯一的 ID。XLEN key
:获取指定流的长度,即流中包含的条目数量。XREAD [COUNT count] [BLOCK milliseconds] STREAMS key [key ...] ID [ID ...]
:从一个或多个流中读取指定 ID 之后的条目。可以指定读取的数量和阻塞时间。XGROUP CREATE key groupname id-or-$ [MKSTREAM]
:创建一个新的消费者组,并将一个或多个流关联到该组。可以选择创建一个新的流以及在创建组时自动创建缺失的流。XREADGROUP GROUP groupname consumer [COUNT count] [BLOCK milliseconds] [NOACK] STREAMS key [key ...] ID [ID ...]
:从消费者组中的一个或多个流中读取未被消费的条目。可以指定读取的数量、阻塞时间和是否自动确认消息。XACK key groupname ID [ID ...]
:确认消费者组中的一个或多个条目。XCLAIM key groupname consumer min-idle-time ID [ID ...] [IDLE milliseconds] [TIME milliseconds] [RETRYCOUNT count] [JUSTID] [FORCE] [LASTID ID]
:将一个或多个未确认的条目重新分配给指定的消费者。XDEL key ID [ID ...]
:删除流中的一个或多个条目。XINFO STREAM key
:获取有关指定流的信息,如长度、第一个和最后一个条目的 ID 等。Streams 提供了一种非常灵活的方式来处理实时消息流,适用于许多实时应用场景,例如日志记录、实时数据处理、事件驱动架构等。通过使用 Streams,可以轻松地将消息流传输和处理集成到 Redis 中,并实现高效的消息传递和处理。
使用场景示例:
- 实时日志处理:将日志消息写入流中,然后使用消费者组对日志进行实时处理、筛选或存档。
- 事件驱动架构:使用 Streams 来处理和分发事件消息,不同的消费者组可以订阅不同类型的事件。
- 消息队列:Streams 可以充当高性能的消息队列,多个生产者可以将消息写入流中,多个消费者组可以并发地消费这些消息。
总之,Streams 是 Redis 中用于处理实时消息流的数据结构,提供了一组功能丰富的命令,适用于实时数据处理和事件驱动架构等场景。
Geospatial indexes:
用来存储经纬度坐标,我们存储了很多坐标之后,就可以让用户给我们一个坐标然后去查找周围的坐标点。这个功能在地图上应用广泛。
在 Redis 中,Geospatial Indexes 是一种用于存储和查询地理位置信息的索引结构。它允许你将地理位置(经度和纬度)与其他数据关联,并进行空间查询和计算。
Redis 提供了一组命令用于操作 Geospatial Indexes,以下是一些常用的 Geospatial 相关命令:
GEOADD key longitude latitude member [longitude latitude member ...]
:将一个或多个地理位置的经度、纬度和成员值添加到指定的键中。GEOPOS key member [member ...]
:获取指定成员的经度和纬度信息。GEODIST key member1 member2 [unit]
:计算两个成员之间的距离。可以选择不同的单位(如米、千米等)来返回结果。GEORADIUS key longitude latitude radius unit [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
:根据给定的经度、纬度和半径,在指定键的地理位置集合中查找满足条件的成员。可以选择返回坐标、距离、哈希值以及限制结果数量等。GEORADIUSBYMEMBER key member radius unit [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
:根据给定成员和半径,在指定键的地理位置集合中查找满足条件的成员。其他选项和GEORADIUS
命令相同。GEOHASH key member [member ...]
:获取指定成员的 Geohash 值。GEOOVERLAY key numkeys key [key ...] AGGREGATE SUM|MIN|MAX
:对多个键的地理位置集合进行交集、并集或差集操作,并进行聚合计算。这些命令提供了对地理位置数据进行存储、查询和计算的功能。你可以使用 Geospatial Indexes 来构建地理位置相关的应用,例如附近的人、地点推荐、地理围栏等。
需要注意的是,在使用 Geospatial Indexes 时,需要使用 Redis 的地理空间模块(Redis Geospatial Module)来启用这些命令。确保 Redis 实例已加载了该模块,并在使用相关命令之前进行适当的配置。
这是 Redis 中 Geospatial Indexes 相关命令的简介,它们提供了方便的地理位置数据处理能力,使你能够存储、查询和计算地理位置信息。
Bitmap:
Bitmaps位图:本质上还是一个集合,属于Set类型对整数的优化版本。
在 Redis 中,Bitmap 是一种位图数据结构,它允许在一个字符串中存储和操作二进制位。每个位可以是 0 或 1,因此 Bitmap 可以被用于表示一组开关、标记或者集合的成员关系。
Redis 提供了一系列命令用于操作 Bitmap 数据结构,以下是一些常用的 Bitmap 相关命令:
SETBIT key offset value
:将指定偏移量offset
处的位设置为给定的值value
(0 或 1)。GETBIT key offset
:获取指定偏移量offset
处的位的值。BITCOUNT key [start end]
:计算并返回指定范围内的位被设置为 1 的数量。可以通过提供可选的start
和end
参数来指定范围,否则将计算整个 Bitmap 的位数。BITOP operation destkey key [key ...]
:对一个或多个 Bitmap 进行逻辑运算,并将结果存储在目标键destkey
中。逻辑运算可以是 AND、OR、XOR 或 NOT。BITPOS key bit [start] [end]
:查找并返回指定位bit
(0 或 1)在 Bitmap 中的第一个出现的偏移量。可选的start
和end
参数用于限制搜索范围。BITFIELD key [GET type offset] [SET type offset value] [INCRBY type offset increment]
:对 Bitmap 进行位级别的读取、写入和增减操作。通过指定不同的type
(如 u8、i16、f32)和offset
,可以对指定位置的位进行操作。使用 Bitmap 可以进行一些高效的操作,例如统计用户在线状态、记录用户行为、进行布隆过滤器等。
需要注意的是,Bitmap 是按照字节进行存储的,因此它可以存储非常大的位图数据,但也会占用相应的内存空间。在使用 Bitmap 时,需要根据实际情况合理控制内存的使用。
以上是 Redis 中 Bitmap 相关的命令简介,它们可以用于创建、操作和查询位图数据结构,提供了灵活而高效的处理二进制位的能力。
Bitfields:
Bitfields和C中的位域非常相似,后侧的数字描述这个成员变量占几个bit位,本质上是为我们提供了一种精准进行位操作的方法。
在 Redis 中,Bitfields(位域)是一种用于对字节级别的数据进行位级别的读取、写入和操作的数据结构。它允许你在一个字符串中以原子方式访问和修改特定位的值,类似于位图(Bitmap)数据结构。
Redis 提供了一组命令用于操作 Bitfields,以下是一些常用的 Bitfields 相关命令:
BITFIELD key [GET type offset] [SET type offset value] [INCRBY type offset increment]
:对指定键中的位域进行读取、写入和增减操作。你可以指定不同的type
(如 u8、i16、f32)和offset
来对位域进行操作。BITFIELD key OVERFLOW WRAP|SAT|FAIL
:设置位域操作的溢出行为。你可以选择在溢出时进行包装(WRAP)、饱和(SAT)或失败(FAIL)处理。BITFIELD key INCRBY type offset increment [OVERFLOW WRAP|SAT|FAIL]
:对位域执行增减操作,并指定增量。同样,你可以设置溢出行为。BITFIELD key SET type offset value [OVERFLOW WRAP|SAT|FAIL]
:将指定位域的值设置为给定的值。你可以选择溢出行为。Bitfields 可以用于各种场景,包括但不限于以下示例:
- 状态标志:可以使用 Bitfields 来存储和操作各种状态标志。每个位可以表示一个特定的状态,例如开关状态、锁定状态等。通过对位域进行适当的读取和修改操作,可以高效地管理和查询状态信息。
- 访问控制列表(ACL):可以使用 Bitfields 来表示和控制访问权限。每个位可以表示一个特定的权限或角色,通过位域操作可以进行权限检查和授权管理。
- 统计数据:Bitfields 可以用于存储和统计各种计数值。每个位可以表示一个计数器,通过适当的增减操作可以实现计数和统计功能。
- 用户权限:可以将 Bitfields 用于表示和操作用户权限。每个位可以表示一个特定的权限,通过位域操作可以进行权限的分配和验证。
需要注意的是,Bitfields 是按字节进行存储的,因此它可以存储大量的位数据,但也会占用相应的内存空间。在使用 Bitfields 时,需要根据实际情况合理控制内存的使用。
总之,Bitfields 是 Redis 中用于位级别读取、写入和操作的数据结构,通过一组相关命令提供了灵活的位域操作功能。它可以应用于各种场景,包括状态管理、权限控制、计数和统计等。
HyperLogLog:
应用场景只有一个,估算集合中的元素个数。使用Set去统计UV(用户访问次数)会保存用户唯一标识,如果UV数据量非常大那么就要消耗很大的内存空间。HyperLogLog可以最多使用12KB去完成统计UV的工作。HyperLogLog不会去记录元素内容,但能够记住元素的特征,从而当添加元素的时候HyperLogLog就可以知道这个元素是新增的元素,还是已经存在的元素。但是HyperLogLog会有一点误差:(看不懂这个误差指的是整体的估算个数的误差,还是每一次添加元素是判断是都已经存在的误差,还是其他意思的误差)
The Redis HyperLogLog implementation uses up to 12 KB and provides a standard error of 0.81%.
pfadd:
添加数据,返回0或1:
pfadd key element [element ...]
pfcount:
获取集合中元素个数,支持同时获取多个集合的元素个数:查询一个集合的元素个数的时间复杂度是O(1)。
pfcount key [key ...]
pfdebug:
内部命令,用于测试和开发
在 Redis 中,
PFDEBUG
是一个用于 HyperLogLog(HLL)数据结构的调试命令。HyperLogLog 是一种用于估计基数(cardinality)的概率数据结构,它可以在消耗少量内存的情况下,对大型数据集的基数进行估计。
PFDEBUG
命令提供了一些有关 HyperLogLog 内部状态的信息,以帮助调试和分析 HLL 数据结构。它的语法如下:复制
PFDEBUG subcommand key [additional arguments]
其中,
subcommand
可以是以下几种之一:
help
:显示关于PFDEBUG
命令的帮助信息。digest
:返回指定 HLL 的内部哈希摘要。encoding
:返回指定 HLL 的编码方式。regdump
:返回指定 HLL 的寄存器(register)值。cardinality
:返回指定 HLL 的基数估计值。merge
:将多个 HLL 合并为一个,并返回合并后的 HLL 基数估计值。clear
:清空指定 HLL。
key
参数是指定的 HyperLogLog 键名。除了
help
子命令外,其他子命令都需要提供一个有效的 HLL 键名,并返回与该命令相关的信息。
PFDEBUG
命令对于了解和调试 HyperLogLog 数据结构非常有用。它使得在开发和优化使用 HyperLogLog 的应用程序时,能够更好地理解和分析 HLL 内部的状态和数据。
pfmerge:
合并两个HLL集合,返回ok.
PFMERGE destkey [sourcekey [sourcekey ...]]
pfselftest:
也是内部命令:
PFSELFTEST
是 Redis 中的一个命令,用于执行 HyperLogLog(HLL)数据结构的自检测。在 Redis 中,HyperLogLog 是一种用于估计基数(cardinality)的概率数据结构,它可以在消耗较少内存的情况下,对大型数据集的基数进行估计。
PFSELFTEST
命令用于验证 Redis 是否正确地实现了 HyperLogLog 算法,并且确保 HyperLogLog 在当前环境下的工作正常。使用
PFSELFTEST
命令非常简单,只需执行以下命令:PFSELFTEST
执行该命令后,Redis 会进行自检测并输出结果。如果输出结果为 "OK",则表示自检测通过,Redis 的 HyperLogLog 实现正常。如果输出结果为错误信息,则表示自检测失败,可能存在问题。
PFSELFTEST
命令通常在 Redis 启动时执行,以确保 Redis 在运行期间正常工作。如果自检测失败,建议检查 Redis 的安装和配置是否正确,或者尝试重新编译和安装 Redis。总之,
PFSELFTEST
是一个用于执行 HyperLogLog 自检测的命令,用于验证 Redis 是否正确实现了 HyperLogLog 算法,并确保其在当前环境下正常工作。