Redis常见数据类型以及使用场景选择

一. 底层数据结构

数据类型 实现数据结构
String SDS(动态字符串)
List LinkedList(双向链表)/ZipList(压缩列表)/QuickList(快速列表)
Hash Dict、ZipList
Set Dict、Intset(整数集合)
Zset ZipList、SkipList(跳表)

数据类型与使用场景

1. String

1.1 类型说明

1.2 常用命令

image.png

1.3 基本演示

1.4 使用场景

    1. 缓存,热点数据
    1. 分布式数据共享(多个应用之间共享)
    1. 分布式锁(setnx方法,只有不存在时才能添加成功)
    1. 全局ID
    1. 计数器
    1. 限流(int类型)INCR方法

2. Hash

2.1 类型说明

2.2 常用命令

image.png

2.3 基本演示

2.4 使用场景

  • 涉及多个key的话,可以考虑hash存储,如用户信息,购物车信息
  • string可以做的,hash都可以做

3. Set

3.1 类型说明

3.2 常用命令

image.png

3.3 基本演示

3.4 使用场景

    1. 抽奖(随机获取元素)
    1. 点赞、签到、打卡
    1. 商品标签
    1. 商品筛选

4. List

4.1 类型说明

4.2 常用命令

image.png

4.3 基本演示

4.4 使用场景

    1. 消息列表(公告列表,活动列表,评论列表等)
    1. 队列/栈

5. ZSet

5.1 类型说明

5.2 常用命令

image.png

5.3 基本演示

5.4 使用场景

6. Bitmap(位图)

6.1 类型说明

  • Bitmap 不是 Redis 中的实际数据类型,而是在 String 类型上定义的一组面向位的操作,将其视为位向量。由于字符串是二进制安全的块,且最大长度为 512 MB,它们适合用于设置最多 2^32 个不同的位。

6.2 常用命令

常用命令 备注
SETBIT key offset value 设置指定 offset 位置的值
GETBIT key offset 获取指定 offset 位置的值
BITCOUNT key start end 获取 start 和 end 之间值为 1 的元素个数
BITOP operation destkey key1 key2 ... 对一个或多个 Bitmap 进行运算,可用运算符有 AND, OR, XOR 以及 NOT

6.3 基本演示

6.4 使用场景

    1. 对一个或多个key 求逻辑或/逻辑并/逻辑异或/逻辑非
    1. 需要保存状态信息(0/1 即可表示)的场景
    • 如 用户签到,活跃用户,用户行为统计(是否点击)

7. HyperLogLog

7.1 类型说明

  • HyperLogLog 是一种有名的基数计数概率算法 ,基于 LogLog Counting(LLC)优化改进得来,并不是 Redis 特有的,Redis 只是实现了这个算法并提供了一些开箱即用的 API。Redis 提供的 HyperLogLog 占用空间非常非常小,只需要 12k 的空间就能存储接近2^64个不同元素。并且,Redis 对 HyperLogLog 的存储结构做了优化,采用两种方式计数:
    • 稀疏矩阵:计数较少的时候,占用空间很小。
    • 稠密矩阵:计数达到某个阈值的时候,占用 12k 的空间。
  • 基数结果并不精确,存在一定的误差(标准误差为0.81%)

7.2 常用命令

常用命令 备注
PFADD key element1 element2 ... 添加一个或多个元素到 HyperLogLog 中
PFCOUNT key1 key2 获取一个或者多个 HyperLogLog 的唯一计数
PFMERGE destkey sourcekey1 sourcekey2 ... 将多个 HyperLogLog 合并到 destkey 中,destkey 会结合多个源,算出对应的唯一计数

7.3 基本演示

7.4 使用场景

  • 数量量巨大(百万、千万级别以上)的计数场景(热门网站每日/每周/每月访问 ip 数统计、热门帖子 uv 统计)

8. GEO

8.1 类型说明

  • Geospatial index(地理空间索引,简称 GEO) 主要用于存储地理位置信息,基于 Sorted Set 实现。

8.2 常用命令

常用命令 备注

8.3 基本演示

8.4 使用场景

  • 附近的人

9. Sreams

9.1 类型说明

  • 大于等于5.0版本才有的数据类型

9.2 常用命令

常用命令 备注

9.3 基本演示

9.4 使用场景

  • 支持多播的可持久化消息队列,用户实现发布订阅功能,参考kafka设计

关于常用的统计-----------------20252020补充

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容