Redis数据类型
命令不区分大小写,key区分大小写
1、数据类型
- String (字符串)
- Hash (散列)
- List (列表类型)
- Set (集合类型)
- SortedSet (有序集合类型,简称 Zset)
- Bitmap (位图)
- HyperLoglog (统计)
- GEO (地理)
- Stream
2、String的使用
2.1 最常用
- set key value
- get key
2.2 同时设置/获取多个键值
- mset key value [key, value, key ,value ……]
- mget key [key ……]
2.3 数值的增减
- 递增数值 incr key
- 增加指定的整数 incrby key increment
- 递减数值 decr key
- 减少指定的整数 decrby key decrment
2.4 获取 字符串长度
- strlen key
2.5 分布式锁
- setnx key value
- set key value [EX seconds] [PX milliseconds] [NX|XX]
- EX 表示key 在多少秒之后过期
- PX 表示在多少毫秒之后过期
- NX 表示当key
不存在
的时候,才创建key,效果等同于 setnx - XX 表示当key
存在
的时候,覆盖key
2.6 应用场景
- 抖音无限点赞某个视频或者商品,点一下加一次
- 是否喜欢文章
3、Hash的使用
3.1 Map<String, Map<Object, Object>>
3.2 一次设置一个字段值
- hset key feild value
3.3 一次获取一个字段值
- hget key feild
3.4 一次设置多个字段值
- hmset key feild value [feild value ……]
- key 表示map的key
- feild表示 map中value的key
- value 表示 map 中value的value
3.5 一次获取多个字段值
- hmget key feild [feild……]
3.6 获取所有字段值
- hgetall key
3.7 获取某个key内的全部数量
- hlen
3.8 删除一个 key
- hdel
3.9 应用场景
- JD某物车早期
- 设计目前不再采用,当前中小厂可用
4、list的使用
4.1 说明
一个双端链表的结构
,容量是2的32次方减一个元素,大概40多亿,主要功能有 push/pop等,一般用在栈、队列、消息队列等场景。
4.2 向列表左边添加元素
- lpush key value [value ……]
4.3 向列表右边添加元素
- rpush key value [value……]
4.4 查看列表
- lrange key start stop
4.5 获取列表中元素的个数
- llen key
4.6 应用场景
-
微信公众号订阅的消息
-
商品评论列表
-
需求:用户针对某一商品发布评论时,一个商品会被不同的用户进行评论,保存商品评论时,要按照时间排序
-
需求:用户在前段页面查询该商品时,需要按照时间顺序降序排序
-
实现:
-
使用list存储商品评论信息,key是该商品的id,value是商品评论信息商品编号为 1001的商品评论key 【items:comment:1001】
-
lpush items:comment:1001 {"id":1001, "name":"huawei", "date": 1634634833, "content":"ljhgka;fafagakg;ahafaf;ohiga"}
-
-
5、set的使用 (无重复)
无重复数据的容器
5.1 添加元素
- sadd key member [member……]
5.2 删除元素
- srem key member [member……]
5.3 遍历集合中的所有元素
- smembers key
5.4 判断元素 是否在集合中
- sismember key member
5.5 获取集合中的元素总数
- scard key
5.6 从集合中随机弹出一个元素,元素不删除
- srandmember key [数字]
5.7 从集合中随机弹出一个元素,出一个删一个
- spop key [数字]
5.8 集合运算
- A、B
- A : abc12
- B: 123ax
- 集合的差集运算 A-B
- 属于A但是不属于B的元素构成的集合
sdiff key [key……]
- 集合的交集运算 A∩B
- 属于A同时也属于B的共同拥有的元素构成的集合
sinter key [key……]
- 集合的并集运算 A∪B
- 属于A或者属于B的元素合并后的集合
sunion key [key……]
5.9 应用场景
- 微信抽奖小程序
- 用户ID,立即参与按钮 => sadd key 用户ID
- 显示已经有多少人参与了=> scard key
- 抽奖(从set中任意选取N个中奖人) => srandmember key 2 => 随机抽奖两个人,元素
不删除
- spop key 3 => 随机抽奖3个人,元素
会删除
- spop key 3 => 随机抽奖3个人,元素
- 微信朋友圈点赞
- 新增点赞 => sadd pub:msgID 点赞用户ID1 点赞用户ID2
- 取消点赞 => srem pub:msgID 点赞用户ID
- 展示所有点赞过的用户 => smembers pub:msgID
- 点赞用户数统计,就是常见的点赞红色数组 => scard pub:msgID
- 判断某个朋友是否对楼主点赞过 => sismember pub:msgID 用户ID
- 微博好友关注社交关系
- 共同关注的人
- 我关注的人也关注他(大家爱好相同)
- QQ内推可能认识的人
6、Zset的使用
向有序集合中加入一个元素和该元素的分数
6.1 添加元素
- zadd key
score
member [score member ……]
6.2 按照元素分数从小到打的顺序,返回索引从 start 到 stop 之间的所有元素
- zrange key start stop [withscores]
6.3 获取元素的分数
- Zscore key member
6.4 删除元素
- zrem key member [member……]
6.5 获取指定分数范围的元素
- zrangebyscore key min max [withscores] [limit offset count]
6.6 增加某个元素的分数
- zincrby key increment member
6.7 获取集合中元素的数量
- zcard key
6.8 获取元素的排名
- 从小到大
- zrank key member
- 从大到小
- zrevrank key member
6.9 应用场景
- 根据商品销售队商品进行排序显示
- 思路:定义商品销售排行榜 (sorted set集合),key为goods:sellsort,分数为商品销售数量
- 商品编号1001的销量是9,商品编号1002的销量是15 => zadd goods:sellsort 9 1001 15 1002
- 有一个客户又买了两件商品1001,商品编号1001销量加2 => zincrby goods:sellsort 2 1001
- 求商品销量前10名 => zrange goods:sellsort 0 10 withscores
- 抖音热搜
- 点击视频 => zincrby hotvcr:20211019 1 八佰
- zincrby hotvcr:20211019 15 八佰 2 花木兰
- 展示当日排行前10条 => zrevrange hotvcr:20211019 0 9 withscores
- 点击视频 => zincrby hotvcr:20211019 1 八佰