1.redis string 常见的应用场景
计数功能,incr get
各类场景下(单机或者分布式)的标识号
集群环境下的session共享
使用spring session 和redis完成session共享
2.string 实现分布式锁
锁的场景,多任务环境下,多对一
有状态的资源-会不一样的(有状态的)1+1+1=3
3.锁的实现是通过setnx 来实现的
4.redis加锁的正确的姿势,通过setnx向特定的key写入一个随机值,并同时设置失效时间,写值成功及加锁成功
注意点:必须给锁设置一个失效时间,避免死锁
加锁时给每一个节点产生一个随机的字符串,避免误删锁
写入随机值与设置失效时间必须是同时的,保证加锁是原子的
解锁:
匹配随机值,删除redis上的特点key数据,要保证获取数据,判断一致以及删除数据三个操作是原子的
执行如下lua脚本
if redis.call("get",KEYS[1]==ARGV[1])then
return redis.call("del",KEYS[1])
else
return 0
end
5.redis的使用场景,淘宝购物车,hmset,主要就是key的设计 hash
list场景,数据结构,实现阻塞队列,lpush,lpop,blpop,b就是blocking,阻塞的意思,场景:微信消息订阅号
set ,设计投票,防止重投,黑名单,抽奖的场景,sdd,排重,先放到一个集合中,
srandmember key 2,抽两名奖金,抽中的spop移除
微信上面的点赞,也是set,会存在顺序问题,改成zset
设计微博关系的人,有人物之间的关系,用过set集合,有交集,并集,我可能认识的人
zset的使用,有序集合,常用于排行榜,点赞数量,数字特别大,也就是量特别大的话,key的设计可以按天的设计
redis 2 你要了解的东东,还有后续,哈哈
最新推荐文章于 2023-06-14 22:06:53 发布