Reids传统五大基本类型与落地应用
标签: Reids传统五大基本类型与落地应用 Java博客 51CTO博客
2023-07-15 18:24:41 70浏览
官网命令大全](http://www.redis.cn/commands.html)
八大基本数据类型分别为:
- • String(字符串类型)
- • Hash(散列类型)
- • List(列表类型)
- • Set(集合类型)
- • SortedSet(有序集合类型,简称zset)
- • Bitmap(位图)
- • HyperLogLog(统计)
- • GEO(地理)
注意:在使用命令时,命令不区分大小写,但是key是区分大小写的
一、 String(字符串类型)
1 、基础命令
- 1. 基础
set key value #设置一个key和value
get key #通过key获取value
- 1. 同时设置获取多个键值
mset key value [key value ....]
mget key [key ....]
- 1. 数值增减
incr key #递增数字
incrby key increment #递增指定的整数
decr key #递减数字
decrby key decrement #递减指定的整数
- 1. 获取字符串长度
strlen key #获取字符串长度
- 1. 过期
expire name 60 # 数据在 60s 后过期
ttl name # 查看数据还有多久过期
setex key 60 value # 数据在 60s 后过期 (setex:[set] + [ex]pire)
- 1. 分布式锁
setnx key value #简写形式
set key value [EX seconds][PX milliseconds][NX|XX]
- • EX::key在多少秒后过期
- • PX:key在多少毫秒后过期
- • NX:当key不存在的时候才创建key,效果等同于
setnx
- • XX:当key存在的时候覆盖key
> set lock pay ex 20 NX
OK
> get lock
pay
> set lock order ex 20 NX
OK
> set lock pay ex 20 NX
null
> get lock
order
2、 应用场景
一般常用在需要计数的场景,比如用户的访问次数、热点文章的点赞转发数量等等。
- 1. 商品编号、订单编号采用incr自动生成
> incr item:1
1
> incr item:1
2
> incr item:1
3
2、对于某一浏览次数的统计采用incr自动递增
如只要点击了rest地址,就直接使用incr key命令增加1,完成统计浏览次数的统计。
二、Hash(散列类型)
hash其实就可以看成是一个Map<String,Map<Object,Object>>
1、基础命令
- 1. 一次设置一个字段值
hset key field value
- 1. 一次获取一个字段值
hget key field
- 1. 一次设置多个字段值
hmset key field value [field value ...]
- 1. 一次获取多个字段值
hmget key field [field ....]
- 1. 获取所有字段值
hgetall key
- 1. 判断是否存在
hexists key field
- 1. 获取全部的键
hkeys key # 获取 key 列表
- 1. 获取全部的value
hvals key # 获取全部的值列表
- 1. 获取某个key内的全部数量
hlen
- 1. 删除一个key
hdel
2、应用场景
早期在购物车中中使用
hset shopcar:uid1024 334488 1 #新增商品
hset shopcar:uid1024 334477 1 #新增商品
hincrby shopcar:uid1024 334477 1 #增加商品数量
hlen shopcar:uid1024 #商品总数
hgetall shopcar:uid1024 #全部选择
三、List(列表类型)
链表数据结构,特点易于数据元素的插入和删除 并且且可以灵活调整链表⻓度,但是链表的随机访问困难。
1、基本命令
- 1. 向列表左边添加元素
lpush key value [value ...]
- 1. 向列表右边添加元素
rpush key value [value ....]
- 1. 弹出元素
lpop key # 左边弹出元素
rpop key # 右边弹出元素
- 1. 查看列表
lrange key start stop # lrange key 0 -1 查看全部
- 1. 获取列表中元素的个数
llen key
2、应用场景
例如微信文章订阅公众号或者说是消息队列
如果现在发布了两篇文章id分别为11和12,那么就会执行:lpush likearticle:自己id 11 12
,如果想分页查看自己订阅的文章lrange
likearticle:自己id 0 10
四、Set(集合类型)
set 类似于 Java 中的 HashSet,特点是无序且不重复。
1、基本用法
- 1. 添加元素
sadd key member[member ...]
- 1. 删除元素
srem key member [member ...]
- 1. 获取集合中的所有元素
smembers key
- 1. 判断元素是否在集合中
sismember key member
- 1. 获取集合中的元素个数
scard key
- 1. 从集合中随机弹出一个元素,元素不删除
srandmember key [数字]
- 1. 从集合中随机弹出一个元素,出一个删一个
spop key [数字]
- 1. 集合运算
- • 集合的差集运算A-B(
属于A但不属于B的元素构成的集合
)
sdiff key [key ...]
- • 集合的交集运算A∩B(
属于A同时也属于B的共同拥有的元素构成的集合
)
sinter key [key ...]
- • 集合的并集运算AUB(
属于A或者属于B的元素合并后的集合
)
sunion key [key ...]
2、应用场景
- 1. 微信抽奖小程序
图示
操作 |
语句 |
用户ID,立即参与按钮 |
sadd key 用户ID |
显示已经有多少人参与了,上图23208人参加 |
scard key |
抽奖(从set中任意选取N个中奖人) |
srandmember key 2 随机抽奖2个人,元素不删除 |
- 1. 微信朋友圈点赞
操作 |
语句 |
新增点赞 |
sadd pub:msgID 点赞用户ID1 点赞用户ID2 |
取消点赞 |
srem pub:msgID 点赞用户ID |
展现所有点赞的用户 |
smembers pub:msgID |
点赞用户数统计 |
scard pub:msgID |
判断某个朋友是否对楼主点过赞 |
sismember pub:msgID 用户ID |
- 1. 微博好友关注社交关系
- • 共同关注的人
127.0.0.1:6379>sadd s1 1 2 3 4 5
(intege)5
127.0.0.1:6379>sadd s2 3 4 5 6 7
(intege)5
127.0.0.1:6379>sinter s1 s2
1) "3"
2) "4"
3) "5"
共同关注: 我去到局座张召忠的微博,马上获得我和局座共同关注的人
- • 我关注的人也关注他(大家爱好相同)
127.0.0.1:6379>sadd s1 1 2 3 4 5
(intege)5
127.0.0.1:6379>sadd s2 3 4 5 6 7
(intege)5
127.0.0.1:6379>sismember s1 3
(intege)1
127.0.0.1:6379>sismember s2 3
(intege)1
共同爱好: 我关注了华为余承东,余承东也关注了局座召忠,我和余总有共同的爱好
- • QQ内推可能认识的人
127.0.0.1:6379>sadd s1 1 2 3 4 5
(intege)5
127.0.0.1:6379>sadd s2 3 4 5 6 7
(intege)5
127.0.0.1:6379>sdiff s1 s2
1) "1"
2) "2"
127.0.0.1:6379>sdiff s2 s1
1) "6"
2) "7"
五、SortedSet(有序集合类型,简称zset)
1、基本用法
- 1. 添加元素
zadd key score member [score member ...]
- 1. 按照元素分数从小到大的顺序 返回索引从start到stop之间的所有元素
zrange key start stop [WITHSCORES]
- 1. 获取元素的分数
zscore key member
- 1. 删除元素
zrem key member [member ...]
- 1. 获取指定分数范围的元素
zrangebyscore key min max [WITHSCORES] [LIMIT offset count]
- 1. 增加某个元素的分数
zincrby key increment member
- 1. 获取集合中元素的数量
zcard key
- 1. 获得指定分数范围内的元素个数
zcount key min max
- 1. 按照排名范围删除元素
zremrangebyrank key start stop
- 1. 获取元素的排名
- • 从小到大
zrank key member
- • 从大到小
zrevrank key member
2、应用场景
- 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 |
127.0.0.1:6379>zadd goods:sellsort 9 1001 15 1002
(intege)2
127.0.0.1:6379>range goods:sellsort 0 10 withscores
1) "1001"
2) "9"
3) "1002"
4) "15"
127.0.0.1:6379>zincrby goods:sellsort 2 1001
"11"
127.0.0.1:6379>range goods:sellsort 0 10 withscores
1) "1001"
2) "11"
3) "1002"
4) "15"
- 1. 抖音热搜
操作 |
语句 |
点击视频 |
zincrby hotvcr:20200919 1八佰 zincrby hotvcr:20200919 15 八佰 2 花木兰 |
展示当日排行前10条 |
zrevrange hotvcr:20200919 0 9 withscores |
好博客就要一起分享哦!分享海报
此处可发布评论
评论(0)展开评论
展开评论