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