目录
目录
目录
1.4、list与其说 list 是个集合,还不如说 list 是个双端队列
1.4、list与其说 list 是个集合,还不如说 list 是个双端队列
1. Redis 基本数据类型
1.1、8 大类型
以前是 5 种数据类型,现在是 8 种啦~
- String(字符类型) 场景:点赞、喜欢
- Hash(散列类型) 简单版购物车
- List(列表类型)
- Set(集合类型) 场景:点赞、共同关注(交集)
- SortedSet(有序集合类型,简称zset)
- Bitmap(位图)
- HyperLogLog(统计)
- GEO(地理)
1.2、String
获取/设置单个值
设置:set key value
获取:get key
Redis命令不区分大小写,而key区分大小写
获取/设置多个值
设置:mset key value [key value ...]
获取:mget key [key ...]
m 就是 more的意思
数值的增减
增加:incr a1
指定增加的数值:incrby a1 4
减少:decr a1
指定减少的数值:decrby a1 3
获取字符串长度
命令:strlen key
分布式锁
设置分布式锁:set key value [EX seconds][PX milliseconds][NX|XX]
参数解释:
- EX:key 在多少秒之后过期
- PX:key 在多少毫秒之后过期
- NX:当 key 不存在的时候,才创建 key,效果等同于setnx key value
- XX:当 key 存在的时候,覆盖 key
应用场景
- 商品编号,订单号采用incr命令生成
- 文章阅读量,点赞量
1.3、hash
redis中的hash类似于java中的Map<String,Map<Object,object>>,字符串为key,Map为value
获取/设置单个字段值
设置: hset key field value
获取:hget key field
同时设置/获取多个字段值
设置:hmset key field value [field value ...]
获取:hmget key field [field ...]
应用场景
购物车早期版本,可在小中厂项目中使用
- 新增商品:hset shopcar:uid1024 334488 1
- 新增商品:hset shopcar:uid1024 334477 1
- 增加商品数量:hincrby shopcar:uid1024 334477 1
- 商品总数:hlen shopcar:uid1024
- 全部选择:hgetall shopcar:uid1024
1.4、list
与其说 list 是个集合,还不如说 list 是个双端队列
添加元素 & 查看列表
向 list 左边添加元素,如果 list 不存在则创建该 list:LPUSH key value [value ...]
向 list 右边添加元素,如果 list 不存在则创建该 list:RPUSH key value [value ....]
查看 list 中包含的元素:LRANGE key start stop,注:LRANGE key 0 -1 表示查看 list 中所有的元素
获取列表中元素的个数
命令:llen key
删除元素
- 从左边出队:
LPOP key
- 从右边出队:
RPOP key
- 清空list:ltrim key start stop
1.5、 Set
set和java中的hashset比较像,无顺序,无重复
添加元素 & 删除元素 & 查看元素
- 向 set 中添加一个元素:
SADD key member[member ...]
- 删除 set 中的指定元素:
SREM key member [member ...]
- 删除Set:del key [key ...]
- 获取 set 中的所有元素:
SMEMBERS key
判断元素是否在集合中
判断指定元素是否在 set 中:SISMEMBER key member
获取集合中的元素个数
获取 set 中元素的个数:SCARD key
从集合中随机弹出元素
- 从集合中随机弹出元素,元素不删除:
SRANDMEMBER key [数字]
- 从集合中随机弹出一个元素,出几个删几个:
SPOP key[数字]
默认弹出一个
集合运算
集合的差集运算A-B:SDIFF key [key ...],属于A但不属于B的元素构成的集合
集合的交集运算A∩B:SINTER key [key ...],属于A同时也属于B的共同拥有的元素构成的集合
集合的并集运算AUB:SUNION key [key ...],属于A或者属于B的元素合并后的集合
应用场景
1、微信抽奖小程序
- 如果某个用户点击了立即参与按钮,则执行 sadd key useId 命令将该用户 ID 添加至 set 中
- 显示已经有多少人参与了抽奖:SCARD key
- 抽奖(从set中任意选取N个中奖人)
1、随机抽奖2个人,元素不删除:SRANDMEMBER key 2
2、随机抽奖3个人,元素会删除:SPOP key 3
2、微信朋友圈点赞
新增点赞:SADD pub:msgID 点赞用户ID1 点赞用户ID2
取消点赞:SREM pub:msgID 点赞用户ID
展现所有点赞过的用户:SMEMBERS pub:msgID
点赞用户数统计,就是常见的点赞红色数字:SCARD pub.msgID
判断某个朋友是否对楼主点赞过:SISMEMBER pub:msgID 用户ID
3、Bilibili 共同关注的好友
共同关注的好友:SINTER 我关注的人 Ta关注的人
1.6、zset
形象理解 zset:向有序集合中加入一个元素和该元素的分数
添加元素 & 删除元素 & 获取元素
- 向 zset 中添加一个带分数(权值)的元素:ZADD key score member [score member ...]
- 删除 zset 中的指定元素:ZREM key member [member ...]
- 返回索引从start到stop之间的所有元素,并按照元素分数从小到大的顺序:ZRANGE key start stop [WITHSCORES],注:如果想要获取所有元素并且从小到大排序,可写为 ZRANGE key 0 -1;按照元素分数从大到小的顺序:zrevrange key start stop [WITHSCORES]注:如果想要获取所有元素并且从小到大排序,可写为 zrevrange key 0 -1
获取集合中元素的数量
获取集合中元素的数量:ZCARD key
获得指定分数范围内的元素个数
获得指定分数范围内的元素个数:ZCOUNT key min max
获取指定分数范围的元素
获取指定分数范围的元素:ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
获取元素的分数
获取指定元素的分数:ZSCORE key member
增加某个元素的分数
增加某个元素的分数:ZINCRBY key increment member
获取元素的排名
从小到大:ZRANK key member
从大到小:ZREVRANK key member
应用场景
1、根据商品销售对商品进行排序显示
思路:定义商品销售排行榜(sorted set集合),key为goods:sellsort,分数为商品销售数量。
- 商品编号1001的销量是9,商品编号1002的销量是15:ZADD goods:sellsort 9 1001 15 1002
- 有一个客户又买了2件商品1001,商品编号1001销量加2:ZINCRBY goods:sellsort 2 1001
- 求商品销量前10名:ZRANGE goods:sellsort 0 10 WITHSCORES
2、抖音热搜
-
点击视频增加播放量:
ZINCRBY hotvcr:20200919 1八佰
,ZINCRBY hotvcr:20200919 15 八佰 2 花木兰
-
展示当日排行前10条:
ZREVRANGE hotvcr:20200919 0 9 WITHSCORS