目录
一、Redis介绍
二、应用场景
2.1 String应用场景
2.2 Hash应用场景
2.3 List应用场景
2.4 Set应用场景
2.5 Zset应用场景
一、Redis介绍
- 单线程
- 多路复用
- 底层数据结构:全局哈希表(key-value)
二、应用场景
2.1 String应用场景
- 单值缓存
set key value
get key
- 对象缓存
set user:1 userJson(Json格式数据)
- 分布式锁
set product:1 true ex 10 nx
- 计数器
incr article:readCount:1
get article:readCount:1
- 分布式系统全局序列号
incrby orderId 100 // redis批量生成序列号提升性能
2.2 Hash应用场景
- 对象存储
hmset user 1:name zhangsan 1:blance 10000
hmset user 1:name zhangsan 1:blance 9000
hmget user 1:name 1:blance
- 购物车
以用户ID为key,商品ID为filed,商品数量为value
添加购物车->hset cart:1 1001 1
增加数量->hincrby cart:1 1001 1
商品总数->hlen cart:1 1001
删除商品->hdel cart:1 1001
购物车列表->hgetall cart:1
2.3 List应用场景
- 常用分布式数据结构
stack(栈)= lpush+lpop
queue(对列)= lpush+rpop
blocking mq(阻塞队列)= lpush+brpop
- 消息流
张三关注了李四、王五等大V
李四发微博,消息(ID:1001):lpush msg:zhangsan 1001
王五发微博,消息(ID:1002):lpush msg:zhangsan 1002
张三查看最新微博消息:lrange msg:zhangsan 0 4
如果李四、王五粉丝数量千万级别,如何处理?
2.4 Set应用场景
- 微信小程序抽奖
点击参与抽奖加入集合:sadd 1001(活动ID)1(用户ID)
查看参与抽奖者:smembers 1001
抽取中奖者:
随机抽取2名(不删除集合中元素):srandmember 1001 2
随机抽取2名(删除集合中元素):spop 1001 2
- 微信微博点赞、收藏、标签
点赞:sadd like:1001(消息ID) 1(用户ID)
取消点赞:srem like:1001 1
获取点赞用户列表:smembers like:1001
检查用户是否点赞:sismember like:1001 1
获取点赞用户数:scard like:1001
- 集合操作
交集:sinter set1 set2 set3 -> {c}
并集:sunion set1 set2 set3 -> {a,b,c,d,e}
差集:sdiff set1 set2 set3 -> {a}
- 集合操作实现微博微信关注模型
zhangsan关注的人:zhangsanSet->{lisi,wangwu}
lisi关注的人:lisiSet->{zhangsan,wangwu,zhaoliu,liuqi}
wangwu关注的人:wangwuSet->{zhangsan,lisi,zhaoliu}
zhangsan和lisi共同关注的人(zhangsan和lisi的交集):sinter zhangsanSet:lisiSet->{wangwu}
zhangsan关注的人也关注了lisi:sismember zhangsanSet lisiSet
zhangsan可能认识的人(zhangsan和lisi的差集):sdiff zhangsanSet liset->{zhaoliu,liuqi}
2.5 Zset应用场景
- 排行榜
获取新闻:zincrby hotNews:20230801 1 总理记着会
获取当日排行榜前十:zrevrange hotNews:20230801 0 9 WITHSCORES
七日搜索榜单计算:zunionstore hotNews:20230801-20230807 7
展示七日排行前十:zrevrang hotNews:20230801-20230807 0 9 WITHSCORES