觉得对你有益的小伙伴记得点个赞+关注
后续完整内容持续更新中
希望一起交流的欢迎发邮件至javalyhn@163.com
看到这的小伙伴我相信大家一定是有Redis基础的,网上有很多的关于Redis五种基本数据类型的介绍,可以参考doc.redisfans.com/ 进行相关查阅。
因此我下面主要的讲的重点不是这些基本命令(肯定不是不讲),况且这五种基本数据类型命令,除了set有一些跟集合知识相关的命令比较难理解。
那么这篇文章最最最重要的就是讲这五种基本数据类型落地实现,懂了命令不难,难的是这些命令在今后的工作中用在哪,怎么用。要锻炼自己的思维能力,api工程师太多了,光懂命令什么用都没有!!!!!ok,不卖关子了,正片来袭。
命令不区分大小写,而key是区分大小的
help @类型名词可以查看相关文档
落地实现在讲完五种类型命令后讲述
1. string(字符类型)
1.1 添加/获取值(最常用)
- set key value
- get key
1.2 同时设置/获取多个键值
- MSET key value [key value ....]
- MGET key [key ....]
1.3 数值增减
1.3.1 递增数字 incr key
1.3.2 增加指定的整数 incrby key increment
1.3.3 递减数值 decr kry
1.3.4 减少指定的整数 decrby key decrment
1.4 获取字符串长度
strlen key
1.5 分布式锁
- setnx key value
- set key value [EX seconds] [PX milliseconds] [NX|XX]
1.6 删除key
del key
2. hash(散列类型)
2.1 hash可以近似理解为Map<String,Map<Object,Object>>
2.2 一次设置一个字段值
hset key field value
2.3 一次设置多个字段值
hmset key field value [field value]
2.4 一次获取一个字段值
hget key field
2.5 一次获取多个字段值
hmget key field [field...]
2.6 获取所有字段值
hgetall key
2.7 获取某个key内的全部数量
hlen
2.8 删除一个key
hdel key
3. list(列表类型)
3.1 简单说明
list是一个双端链表的结构,容量是2 的32次方减1个元素,大概有40多个亿,主要功能有push/pup等,一般用在栈、队列、消息队列等场景。
3.2 向列表左边添加元素
lpush key value [value]
3.3 向列表右边添加元素
rpush key value [value]
3.4 查看列表
lrange key start stop
3.5 获取列表中元素的个数
llen key
4. set(集合类型)
4.1 添加元素
sadd key number [number]
4.2 删除元素
srem key SREM key member [member ...]
4.3 遍历集合中的所有元素
smembers key
4.4 判断元素是否在集合中
sismember key member
4.5 获取集合中元素总数
scard key
4.6 从集合中弹出一个元素,元素不删除
srandmember key [count]
4.7 从集合中随机弹出一个元素,出一个删一个
spop key
4.8 集合运算
4.8.1 集合的差集运算A-B
属于A但不属于B的元素构成的集合 sdiff key [key]
4.8.2 集合的交集运算A∩B
属于A同时也属于B的共同拥有的元素构成的集合 sinter key [key ...]
4.8.3 集合的并集运算A∪B
属于A或者属于B的元素合并后的集合 sunion key [key ...]
5. sortedset(有序集合类型,简称zset)
5.1 简单说明
向有序集合中加入一个元素和该元素的分数
5.2 添加元素
zadd key score member [score member ...]
5.3 按照元素分数从小到大的顺序,返回索引从start到stop之间的所有元素
ZRANGE key start stop [WITHSCORES]
5.4 获取元素的分数
zscore key number
5.5 删除元素
zrem key member
5.6 获取指定分数范围的元素
zrangebyscore key min max [withscores] [limit offset count]
5.7 增加某个元素的分数
zincrby key increment member
5.8 获取集合中元素的数量
zcard key
5.9 获取指定分数范围内的元素个数
zcount key min max
5.10 按照排名范围删除元素
zremrangebyrank key start stop
5.11 获取元素的排名
5.11.1 从小到大
zrank key member
5.11.2 从大到小
zrevrank key member
6. string数据类型落地应用
6.1 点赞功能
比如给快手中的视频点赞,每双击一下赞就增加,我们可以用incr key
6.2 微信阅读量
只要点击了这篇文章,直接使用incr key命令增加一个数字1,完成记录
7. hash数据类型落地应用
JD早起购物车 涉及目前不再使用 当前中小厂可用
8. list数据类型落地应用
8.1 微信公众号订阅的消息
- 用户A和用户B这两个用户分别发送了文章1和文章2
- 我关注了他们两个,只要他们发布了新的文章,就会装进我的list中 lpush likearticle:JavaLyHn 1 2
- 查看我自己号的订阅的全部文章,类似分页,比如上图一页显示两个文章内容 lrange likearticle:JavaLyHn 0 1
注意:这里用list真的好吗?不好的话为什么呢?
作者在接下来的文章中会解答(作者一定记得这个问题!持续不断更新)
8.2 商品评论列表
需求1:用户针对某一商品发布评论,一个商品会被不同的用户进行评论,保留商品评论时,要按时间进行排序
需要2:用户在前端页面查询该商品的评论,需要按照时间顺序降序排序
使用list存储商品评论信息,key是该商品的id,value是商品评论信息商品编号为1001的商品评论key【items:comment:1001】
lpush items:comment:1001 {"id":1001,"name":"huawei","date":1600484283054,"content":"博主真帅我要取关他!!???6"}
9. set数据类型落地应用
9.1 微信抽奖小程序
- 点击立即参与 sadd key 用户id
- 显示有21208人已参与 scard key
- 抽奖(从set中任意选取N个人中奖)
- srandmember key 2 随机抽奖两个人,元素不删除
- spop key 3 随机抽奖三个人,元素会删除
9.2 微信朋友圈点赞
- 新增点赞 sadd pub:msgID 点赞用户ID1 点赞用户ID2
- 取消点赞 srem pub:msgID 点咋用户ID1
- 展现所有点赞过的用户 smembers pub:msgID
- 点赞用户的统计(点赞红色数字) scard pub:msgID
- 判断某个朋友是否对楼主点赞过 sismember pub:msgID 用户ID
9.3 微博好友关注社交系统
- 共同关注:我去到余承东的微博页面,马上给我推送和余承东共同关注的人
- 我关注的人也关注了他(相同爱好) 我关注了余承东和马化腾,余承东也关注了马化腾,我和余承东有共同爱好
9.4 QQ内推可能认识的人
10. zset数据类型落地应用
- 根据商品销售对商品进行排序显示 思路:定义商品销售属性排行榜(zset集合),key为goods:sellsort,分数为商品的销售数量
商品编号为1001的商品销量是9,商品编号为1002的商品销量为15
zadd goods:sellsort 9 1001 15 1002
有一个客户买了2件1001商品,1001商品销量增加2
zincrby goods:sellsort 2 1001
求商品销量前十名
zrange goods:sellsort 0 10 withscores
- 抖音热搜
点击视频 zincrby hotvcr:20230120 1 央视兔年 14 人民网
展示当日排行榜前十条 zrevrange hotvcr:20230120 0 9 withscores
11. 总结
那么至此,Redis五种基本数据类型以及实战应用已经说完了,案例不是很多,但是还是很具有代表性的,希望各位小伙伴们及时补充,和我一起进步!!!!!