Redis基本类型有5种,分别是:string、hash、list、set、zset
hash类型的应用场景
购物车的商品添加,数量增减
实现原理:
1、初次选择商品到购物车
此处设计为: hset 购物车标识:用户ID:数据类型 商品ID 数量
hset car:10000:hash 1000 1
hmset car:10000:hash 1000 1 1001 2
2、对已经选择的商品进行数量上的添加
hincrby car:10000:hash 1000 5
3、移除已经选择的商品
hdel car:10000:hash 1001
4、查看已经选择的商品数量
hlen car:10000:hash
list类型的应用场景
涉及命令解析
往列表头部添加数据:
lpush key value [value...]
往列表尾部添加数据:
rpush key value [value...]
取出头部数据并移除
lpop key
取出尾部数据并移除
rpop key
取出一段区间的数据
lrange key start stop
可以模拟场景 - 常用的数据结构
Stack (栈) = lpush + lpop -> FILO
Queue(队列) = lpush + rpop
Blocking MQ(阻塞队列) = LPUSH + BRPOP
应用场景: 查看最新的微博信息
用户1关注了用户2
1、用户2发表信息, 信息ID为1
lpush msg:user1 1
2、用户2发表信息, 信息ID为2
lpush msg:user1 2
3、查看最新微博信息
lrange msg:user1 0 5
set应用场景
微信抽奖小程序
1、添加所有参与抽奖的用户ID
127.0.0.1:6379> sadd random:userid 1 2 3 4 5
(integer) 5
2、查看所有抽奖用户列表
127.0.0.1:6379> smembers random:userid
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
3、从所有用户中抽取两个中奖用户
127.0.0.1:6379> srandmember random:userid 2
1) "3"
2) "5"
127.0.0.1:6379>
zset的应用场景
排行榜的实现
1、点击新闻
127.0.0.1:6379> zincrby hotNews:20200303:zset 1 中国加油
"1"
127.0.0.1:6379> zincrby hotNews:20200303:zset 1000 战胜疾病
"1000"
127.0.0.1:6379> zincrby hotNews:20200303:zset 1000 战胜疾病2
"1000"
2、展示当日排行榜前十
127.0.0.1:6379> zrevrange hotNews:20200303:zset 0 9 withscores
1) "\xe6\x88\x98\xe8\x83\x9c\xe7\x96\xbe\xe7\x97\x852"
2) "1000"
3) "\xe6\x88\x98\xe8\x83\x9c\xe7\x96\xbe\xe7\x97\x85"
4) "1000"
5) "\xe4\xb8\xad\xe5\x9b\xbd\xe5\x8a\xa0\xe6\xb2\xb9"
6) "1"
3、3日结果榜单计算
添加3日相同榜单
127.0.0.1:6379> zincrby hotNews:20200303:zset 10 test
"10"
127.0.0.1:6379> zincrby hotNews:20200302:zset 10 test
"10"
127.0.0.1:6379> zincrby hotNews:20200301:zset 10 test
"10"
使用交并集实现数据的累计计算
ZUNIONSTORE hotNews:20200301-20200303:zset 3 hotNews:20200301:zset hotNews:20200302:zset hotNews:20200303:zset
(integer) 4
4、展示三日内计算的结果榜单
127.0.0.1:6379> zrevrange hotNews:20200301-20200303:zset 0 3 withscores
1) "\xe6\x88\x98\xe8\x83\x9c\xe7\x96\xbe\xe7\x97\x852"
2) "1000"
3) "\xe6\x88\x98\xe8\x83\x9c\xe7\x96\xbe\xe7\x97\x85"
4) "1000"
5) "test"
6) "30"
7) "\xe4\xb8\xad\xe5\x9b\xbd\xe5\x8a\xa0\xe6\xb2\xb9"
8) "1"