Redis 应用场景和问题

一.redis 分布式锁:

并发的情况下,同时setNx命令,会不会有问题,Redis是单线程的,所以Redis服务本身没有并发接受命令问题.

redis分布式锁主要是靠redis的操作具有原子性和其中两个命令,lua脚本实现的.

1.setNx命令

在指定的 key 不存在时,为 key 设置指定的值,如果存在则返回0.反之返回1.

2.expire命令

用于设置 key 的过期时间,主要作用是防止抢占到锁的线程一直不释放锁,造成死锁

3.lua脚本

redis lua脚本支持将几个命令提交给redis执行,并且保证原子性.

可以用redisson框架实现,同时还有可重入分布式锁.

二.缓存穿透 + 缓存雪崩 + 缓存击穿

1.缓存穿透:

问题: 指的是查询一个不存在数据,结果缓存没有进行存储,导致每次查询都走数据库.

解决方法: 可以把不存在的数据,用一个特殊数字或者字符串代替值,存在redis里面.

比如存一个数字 -1

2.缓存雪崩:

问题: 缓存同一个时间进行缓存的key大量进行到期,或者redis宕机,导致所有的请求都去请求数据库了,数据库压力过大,导致系统崩溃

解决:

①可以采用高可用的redis系统集群,例如哨兵集群,cluster集群

②采用二级缓存,可以用本地系统缓存

③进行数据库查询层次的限流.

3.缓存击穿:

问题:当缓存失效的瞬间,大量并发请求去访问数据库数据,导致大量线程在重新重建缓存

解决:

①可以用redisson分布式锁,只能有一个线程去重新建立缓存,其他的进行等待.

②可以设置热点数据不进行过期

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值