目录
redis九大数据类型
- String(字符类型)
- Hash(散列类型)
- List(列表类型)
- Set(集合类型)
- SortedSet(有序集合类型,简称zset)
- Bitmap(位图)
- HyperLogLog(统计)
- GEO(地理、地图)
- Stream(流、队列)
Stream是redis5.0版本新增的数据结构。
主要用于消息队列,基本不用,市面上有功能更完备的产品(rabbitMQ,rocketMQ等)
备注说明
命令不区分大小写,而key是区分大小写的。
Help @类型名词 用于查询类型下的命令
String
最常用:
set key value
get key
同时设置/获取多个键值:
mset key value [key value…]
mget key [key…]
数值增减
递增数字:incr key
增加指定的整数:incrby key increment
递减数值:decr key
减少指定的整数:decrby key decrement
获取字符串长度
strlen key
分布式锁
setnx key value
set key value [EX seconds] [PX milliseconds] [NX|XX]
应用场景
比如抖音无限点赞某个视频或者商品,点一下加一次。
HASH
Map<String, Map<Object, Object>>
一次设置一个字段值
HSET key field value
一次获取一个字段值
HGET key field
一次设置多个字段值
HSET key field value [field value…]
一次获取多个字段值
HGET key field [field…]
获取所有字段值
HGETALL key
获取某个key内的全部数量
Hlen key
删除一个key
Hdel key
应用场景
购物车
新增商品 → hset shopcar:uid1024 334488 1
新增商品 → hset shopcar:uid1024 334477 1
增加商品数量 → hincrby shopcar:uid1024 334477 1
商品总数 → hlen shopcar:uid1024
全部选择 → hgetall shopcar:uid1024
LIST
简单说明
一个双端链表的结构,容量是2的32次方减1个元素,大概40多亿,主要功能有push/pop等,一般用在栈、队列、消息队列等场景。
向列表左边添加元素
LPUSH key value [value]
向列表右边添加元素
RPUSH key value [value]
查看列表
LRANGE key start stop
获取列表中元素个数
LLEN key
应用场景
- 微信公众号订阅的消息
- 用户1 和用户2 分别发布了文章 123和124
- 我关注了他们两个,只要他们发布新文章,就会安装进我的List
- Lpush likearticle:myid 123 124
- 查看我订阅的所有文章,类似分页,下面0~10就是一次显示10条
Lrange likearticle:myid 0 9
- 商品评论列表
需求1: 用户针对某一商品发布评论,一个商品会被不同的用户进行评论,保存商品评论时,要按时间顺序排序。
需求2:用户在前端页面查询该商品的评论,需要按照时间顺序降序排序。
Case:
使用list存储商品评论信息,key是该商品的id,value是商品评论信息商品编号为1001的商品评论key【items:comment:1001】
lpush items:comment:1001 {"id":1001,"name":"huawei","date":1600484283054,"content":"las"}
Set(值不重复)
添加元素
Sadd key member [member…]
删除元素
Srem key member [member…]
遍历集合中的所有元素
SMEMBERS key
判断元素是否在集合中
SISMEMBER key member
获取集合中的元素总数
SCARD key
从集合中随机弹出一个元素,元素不删除
SRANDMEMBER key [数字]
从集合中随机太初一个元素,出一个删一个
SPOP key [数字]
集合运算
A:ABC12
B:123AX
集合差集运算 A-B
属于A但不属于B的元素构成的集合
SDIFF key [KEY…]
BC
集合交集运算A∩B
属于A同时也属于B的共同拥有的元素构成的集合
SINTER key [key…]
12a
集合并集运算A ∪ B
属于A或者属于B的元素合并后的集合
SUNION key [key…]
123abcx
应用场景
抽奖小程序
- 用户ID,立即参与抽奖,sadd key userId
- 显示已经有多少人参与 SCARD key
- 抽奖(从set中任意选取2个中奖人)
SRANDMEMBER key 2 元素不删除
SPOP key 2 元素会删除
点赞
- 新增点赞 sadd pub:msgid 点赞用户ID1 点赞用户ID2
- 取消点赞 srem pub:msgid 点赞用户ID
- 展现所有点赞过的用户 smembers pub:msgid
- 点赞用户数统计,就是常见的点赞红色数字 scard pub:msgid
- 判断某个朋友是否点赞过 SISMEMBER pub:msgid 用户ID
好友关注社交关系
- 共同关注的人 SINTER
- 我关注的人也关注了他 SDIFF
可能认识的人
Zset(有序不重复)
添加元素
Zadd key score member [score member]
按照元素分数从小到大的顺序
ZRANGE key start stop [WITHSCORES]
获取元素的分数
ZSCORE key member
删除元素
ZREM key member [member…]
获取指定分数范围的元素
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
增加某个元素的分数
ZINCRBY key increment member
获取集合中元素的数量
ZCARD key
获取指定分数范围内的元素格式
Zcount key min max
按照排名范围删除元素
ZREMRANGEBYRANK key start stop
获取元素的排名
从大到小 ZRANK key member
从小到大 ZREVRANK key member
应用场景
根据商品销售对商品进行排序显示
思路:定义商品销售排行榜 key为goods:sellsort,分数为商品销售数量
- 商品编号1001的销量是9,1002是10 zadd goods:sellsort 9 1001 15 1002
- 有一个客户又买了2件商品1001,1001销量加2 zincrby goods:sellsort 2 1001
- 求商品销量前10名 zrange goods:sellsort 0 10 withscores
热搜
- 点击视频 ZINCRBY hotvcr:20240325 1 vcrid1
- ZINCRBY hotvcr:20240325 15 vcrid1
- 展示当日排行前10条 ZREVRANGE hotvcr:20240325 0 9 withscores