缓存到队列再到事件处理的各种问题

Redis主要数据类型:String(字符串),Lists(列表),Sets(集合),Hashes(哈希),Sorted sets(有序集合),Streams(流),Bitmaps,Geospatial indexes,Bitfields,HyperLogLog,Extensions。

一、String(字符串)

Redis 字符串存储字节序列,包括文本、序列化对象和二进制数组。 因此,字符串是最基本的 Redis 数据类型。 它们通常用于缓存,但它们支持其他功能,这些功能也允许您实现计数器并执行按位运算。

限制

默认情况下,单个 Redis 字符串的最大大小为 512 MB。

基本命令

  • SET
  • 仅当字符串值尚不存在时,SETNX
  • GET
  • MGET

二、Lists(列表)

Redis 列表是字符串值的链接列表。 Redis 列表经常用于:

  • 实现堆栈和队列。
  • 为后台工作程序系统构建队列管理。

限制

Redis 列表的最大长度为 2^32 - 1 (4,294,967,295) 个元素。

基本命令

  • LPUSH 在列表的头部添加一个新元素;RPUSH添加到尾部。
  • LPOP 从列表的头部删除并返回一个元素;RPOP
  • LLEN
  • LMOVE
  • LTRIM

阻止命令

列表支持多个阻止命令。 例如:

  • BLPOP
  • BLMOVE

三、Sets(集合)

Redis 集是唯一字符串(成员)的无序集合。 您可以使用 Redis 集有效地:

  • 跟踪唯一项目(例如,跟踪访问给定博客文章的所有唯一 IP 地址)。
  • 表示关系(例如,具有给定角色的所有用户的集合)。
  • 执行常见的集合操作,例如交集、并集和差分。

限制

Redis 集的最大大小为 2^32 - 1 (4,294,967,295) 个成员。

基本命令

• SADD 将新成员添加到集合中。

• SREM从集合中删除指定的成员。

• SISMEMBER测试字符串的集合成员资格。

• SINTER 返回两个或多个集合共有的成员集(即交集)。

• SCARD 返回集合的大小(也称为基数)

例子

  • 存储用户 123 和 456 的收藏书籍 ID 集:
> SADD user:123:favorites 347
(integer) 1
> SADD user:123:favorites 561
(integer) 1
> SADD user:123:favorites 742
(integer) 1
> SADD user:456:favorites 561
(integer) 1

四、Redis hashes

Redis 哈希是结构化为字段值对集合的记录类型。 您可以使用哈希来表示基本对象和存储计数器分组等。

基本命令

  • HSET 在哈希上设置一个或多个字段的值。
  • HGET 返回给定字段的值。
  • HMGET 返回一个或多个给定字段的值。
  • HINCRBY 将给定字段的值按提供的整数递增。

限制

每个哈希最多可以存储 4,294,967,295 (2^32 - 1) 字段值对。 实际上,哈希仅受托管 Redis 部署的 VM 上的总体内存限制

五、Redis sorted sets

Redis 排序集是按关联分数排序的唯一字符串(成员)的集合。 当多个字符串具有相同的分数时,字符串将按字典顺序排序。 排序集的一些用例包括:

  • 排行榜。例如,您可以使用排序集轻松维护大型在线游戏中最高分的有序列表。
  • 速率限制器。特别是,您可以使用排序集来构建滑动窗口速率限制器,以防止过多的 API 请求。

基本命令

  • ZADD 将新成员和关联的分数添加到排序集。如果成员已存在,则会更新分数。
  • ZRANGE 返回在给定范围内排序的排序集的成员。
  • ZRANK 返回所提供成员的排名,假设排序是按升序排列的。
  • ZREVRANK 返回所提供成员的秩,假设排序集按降序排列。

六、Redis Streams

Redis 流是一种数据结构,其作用类似于仅追加日志。 您可以使用流实时记录和同时联合事件。 Redis 流用例的示例包括:

  • 事件源(例如,跟踪用户操作、点击等)
  • 传感器监测(例如,现场设备的读数)
  • 通知(例如,在单独的流中存储每个用户的通知记录)

Redis 为每个流条目生成一个唯一的 ID。 您可以在以后使用这些 ID 检索其关联的条目,或读取和处理流中的所有后续条目。

Redis 流支持多种修剪策略(以防止流无限增长)和多个消费策略

基本命令

  • XADD 向流添加新条目。
  • XREAD读取一个或多个条目,从给定位置开始并及时向前移动。
  • XRANGE 返回两个提供的条目 ID 之间的条目范围。
  • XLEN 返回流的长度。

七、geospatial(Redis地理空间)

Redis 地理空间索引允许您存储坐标并搜索它们。 此数据结构可用于查找给定半径或边界框内的邻近点。

基本命令

  • GEOADD 将位置添加到给定的地理空间索引(请注意,使用此命令,经度位于纬度之前)。
  • GEOSEARCH 返回具有给定半径或边界框的位置。

八、 HyperLogLog(Redis超级日志)

HyperLogLog 是一种估计集合基数的数据结构。作为一种概率数据结构,HyperLogLog 以完美的精度换取高效的空间利用率。

Redis HyperLogLog 实现最多使用 12 KB,并提供 0.81% 的标准误差

基本命令

  • PFADD 将项目添加到 HyperLogLog。
  • PFCOUNT 返回集合中项数的估计值。
  • PFMERGE将两个或多个HyperLogLogs合并为一个。

限制

HyperLogLog 可以估计最多具有 18,446,744,073,709,551,616 (2^64) 个成员的集合的基数。

九、bitmaps(位图)

Redis 位图是字符串数据类型的扩展,可让您将字符串视为位向量。 还可以对一个或多个字符串执行按位运算。 位图用例的一些示例包括:

  • 集合成员对应于整数 0-N 的情况的有效集合表示形式。
  • 对象权限,其中每个位表示一个特定权限,类似于文件系统存储权限的方式。

基本命令

  • SETBIT 将提供的偏移量处的位设置为 0 或 1。
  • GETBIT 返回给定偏移量的位值。
  • BITOP 允许您对一个或多个字符串执行按位运算。

十、bitfields(位字段)

Redis位字段允许您设置、递增和获取任意位长度的整数值。例如,可以对从无符号1位整数到有符号63位整数的任何对象进行操作。

这些值使用二进制编码的Redis字符串存储。位字段支持原子读取、写入和增量操作,使其成为管理计数器和类似数值的好选择。

基本命令

  • BITFIELD自动设置、递增和读取一个或多个值。
  • BITFIELD_RO是BITFIELD的只读变体。