1-Redis核心数据结构
2021-06-05 11:42:50 1 举报
AI智能生成
Redis核心数据结构
作者其他创作
大纲/内容
数据结构
1、字符串
原子加减
INCR key: 将key中储存的数字值加1
- 适用场景:文章阅读量每次加一
DECR key: 将key中储存的数字值减1
INCRBY key increment: 将key所储存的值加上increment
适用场景:INCRBY orderId 1000 redis批量生成序列号提升性能(放入内存中)
DECRBY key decrement: 将key所储存的值减去decrement
分布式锁
SETNX product:10001 true: 返回1代表获取锁成功
SETNX product:10001 true: 返回0代表获取锁失败
DEL product:10001: 执行完业务释放锁
SET product:10001 true ex 10 nx: 防止程序意外终止导致死锁
适用场景:spring session + redis实现session共享
2、hash
优缺点
优点
- 同类数据归类整合储存,方便数据管理
- 相比string操作消耗内存与cpu更小
- 相比string储存更节省空间
缺点
- 过期功能不能使用在field上,只能用在key上
- Redis集群架构下不适合大规模使用(大规模使用会造成某一台压力过大)
应用场景
电商购物车
1)以用户id为key
2)商品id为field
3)商品数量为value
1)以用户id为key
2)商品id为field
3)商品数量为value
购物车操作
1)添加商品 hset cart:1001 10088 1
2)增加数量 hincrby cart:1001 10088 1
3)商品总数 hlen cart:1001
4)删除商品 hdel cart:1001 10088
5)获取购物车所有商品 hgetall cart:1001
1)添加商品 hset cart:1001 10088 1
2)增加数量 hincrby cart:1001 10088 1
3)商品总数 hlen cart:1001
4)删除商品 hdel cart:1001 10088
5)获取购物车所有商品 hgetall cart:1001
3、List
常用数据结构
应用场景
LRANGE msg:{关注人-ID} 0 4 微博微信最新消息
4、集合Set
应用场景
抽奖小程序
微信抽奖小程序
1)点击参与抽奖加入集合 SADD key {userlD}
2)查看参与抽奖所有用户 SMEMBERS key
3)抽取count名中奖者 SRANDMEMBER key [count](元素不从key中删除) / SPOP key [count](元素从key中删除)
1)点击参与抽奖加入集合 SADD key {userlD}
2)查看参与抽奖所有用户 SMEMBERS key
3)抽取count名中奖者 SRANDMEMBER key [count](元素不从key中删除) / SPOP key [count](元素从key中删除)
微博点赞、收藏、标签
1) 点赞 SADD like:{消息ID} {用户ID}
2) 取消点赞 SREM like:{消息ID} {用户ID}
3) 检查用户是否点过赞 SISMEMBER like:{消息ID} {用户ID}
4) 获取点赞的用户列表 SMEMBERS like:{消息ID}
5) 获取点赞用户数 SCARD like:{消息ID}
2) 取消点赞 SREM like:{消息ID} {用户ID}
3) 检查用户是否点过赞 SISMEMBER like:{消息ID} {用户ID}
4) 获取点赞的用户列表 SMEMBERS like:{消息ID}
5) 获取点赞用户数 SCARD like:{消息ID}
关注模型
SINTER -> 交集 (set1 交集 set2 交集 set3) 例:共同关注的人
SUNION -> 并集
SDIFF -> 差集(set1 差集 set2 = {a} 差集 set3 = {a}) 例:可能认识的人
SUNION -> 并集
SDIFF -> 差集(set1 差集 set2 = {a} 差集 set3 = {a}) 例:可能认识的人
5、有序集合zset
数据结构
应用场景
Zset集合操作实现排行榜
1)点击新闻ZINCRBY hotNews:20190819 1 热带你新闻
2)展示当日排行前十ZREVRANGE hotNews:20190819 0 9 WITHSCORES
3)七日搜索榜单计算ZUNIONSTORE hotNews:20190813-20190819 7 hotNews:20190813 hotNews:20190814... hotNews:20190819
4)展示七日排行前十ZREVRANGE hotNews:20190813-20190819 0 9 WITHSCORES
1)点击新闻ZINCRBY hotNews:20190819 1 热带你新闻
2)展示当日排行前十ZREVRANGE hotNews:20190819 0 9 WITHSCORES
3)七日搜索榜单计算ZUNIONSTORE hotNews:20190813-20190819 7 hotNews:20190813 hotNews:20190814... hotNews:20190819
4)展示七日排行前十ZREVRANGE hotNews:20190813-20190819 0 9 WITHSCORES
为什么这么快?
1、内存中
2、操作命令时单线程
3、多客户端的IO多路复用
redis利用epoll来实现IO多路复用,将连接信息和事件放到队列中,依次放到 文件事件分派器,事件分派器将事件分发给事件处理器。
(简单的来说:可以同时接收多个命令,但是在执行命令的时候是单线程)。
(简单的来说:可以同时接收多个命令,但是在执行命令的时候是单线程)。
0 条评论
下一页