redis的常用数据结构及使用场景?
发表于|更新于|技术博客
|总字数:1.4k|阅读时长:6分钟|浏览量:
String的使用场景
- 普通数据/对象缓存
- 分布式锁
- 计数器
- 分布式系统全局序列号
Hash的使用场景
- 购物车
- 用户id为key
- 商品id为field
- 商品count为value
示例
往购物车加入2件商品
key = cart:user:用户id
vm01:0>hset cart:user:1000 101 1 |
修改购物车数据,增加商品数量
vm01:0>hincrby cart:user:1000 101 1 |
统计购物车商品
vm01:0>hlen cart:user:1000 |
删除购物车商品
vm01:0>hdel cart:user:1000 101 |
List的使用场景
- 消息队列
lpush
+brpop
命令组合即可实现阻塞队列,生产者客户端使用lpush
从列表左侧插入元素,多个消费者客户端使用brpop
命令阻塞式的争抢列表尾部的元素,多个客户端保证了消费的负载均衡和高可用
- 朋友圈点赞列表\评论列表
lpush
命令和lrange
命令能实现最新列表的功能,每次通过lpush命令往列表里插入新的元素,然后通过lrange
命令读取最新的元素列表
- 栈
- 通过(
lpush
lpop
左边进左边出,或rpush
rpop
右边进右边出),先进后出原则
- 通过(
消息队列
生产者: 消息队列中新增数据
vm01:0>lpush list 1 |
消费者: 从消息队列中消费数据
vm01:0>brpop list 0 #超时时间0表示一直等待,直到争抢到尾部元素 |
生产者: 查询队列中数据
vm01:0>llen list |
朋友圈点赞/评论列表
点赞/评论数据新增:
vm01:0>lpush list 1 |
获取最新的点赞/评论数据:
vm01:0>lrange list 0 10 |
栈
用朋友圈点赞/评论数据
满足FIFO(先进先出\后进后出)顺序
栈-入:
vm01:0>lpush list 1 |
栈-出:
vm01:0>lrange list 0 10 |
Set的使用场景
- 点赞
- 抽奖
- 关注模型(共同好友\推荐好友)
点赞
key = prize:{消息id}
点赞数据新增:
vm01:0>sadd prize:id_1 小王 |
获取点赞人数统计:
vm01:0>scard prize:id_1 |
抽奖
抽奖用户数据新增
vm01:0>SADD prize 小王 |
获取参与抽奖所有用户
vm01:0>smembers prize |
随机获取两个抽奖用户
vm01:0>srandmember prize 2 |
随机获取一个抽奖用户并删除记录
vm01:0>smembers prize |
关注模型
新增用户好友数据:
vm01:0>sadd A 小李 小王 小赵 |
共同好友
vm01:0>sinter A B |
推荐好友
vm01:0>sdiff A B |
Zset使用场景
- 实现热搜排行榜
key 不能重复, score 可以重复
添加热搜数据
vm01:0>zadd hot 1 redis |
模拟点击热搜提升数值
vm01:0>ZINCRBY hot 1 mongodb |
根据热搜数值排行榜0-10区间 -> 大>小 (热搜排行榜)
vm01:0>zrevrange hot 0 10 |
+++ 点击显示/隐藏(小>大)
根据热搜数值排行榜0-10区间 -> 小>大
vm01:0>zrange hot 0 10 |
+++
补充-指定区间范围的热搜:
文章作者: MUMU
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 blog.wo0ow.com!