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设计
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,258评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,335评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,225评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,126评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,140评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,098评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,018评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,857评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,298评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,518评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,400评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,993评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,638评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,661评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容