Redis笔记

本文详细探讨了Redis作为缓存的使用策略,包括数据结构选择、存储粒度和缓存更新策略。提到了先更新数据库后删除缓存以降低线程安全风险,并讨论了缓存穿透的解决方案,如布隆过滤器。此外,文章还分析了缓存雪崩和缓存击穿的应对措施,以及分布式锁的实现和优化,包括Redisson的可重入锁和分布式锁原理。
摘要由CSDN通过智能技术生成

Redis代替session需要注意:
1.选择合适的数据结构
2.选择合适的key
3.选择合适的存储粒度

Redis缓存策略一般采用先更新数据库后删除缓存,原因是无论先删除缓存还是后删除缓存都有线程安全的风险,但是后删除缓存的发生风险的概率小到可以忽略不计,
因为缓存的更新是微秒级的,理论上首先在缓存要突然失效时,A线程查询数据库获取到旧数据,并缓存更新的时间段内,
B线程将新的数据在数据库里面更新并执行完缓存的删除操作之后,A线程再将旧数据写入缓存内,才会发生线程安全问题,但A线程更新缓存的时间极短,
这段时间不足以让B线程执行完操作,所以这个概率极小。
同时还需要保证数据库与缓存操作的原子性,单体系统通过事务机制解决,分布式系统利用分布式事务机制解决。

缓存穿透
1.缓存一个空对象,每次返回一个空,缺点就是有效期内有额外的内存开销。可能会短期内的数据不一致
2.布隆过滤
在redis前加一个布隆过滤器,原理是数据库里面的数据基于某种哈希算法得到哈希值,再将哈希值转化为二进制位,保存到布隆过滤器里。有点是数据量小,
不用保存多余的key,缺点是实现复杂,有误判的可能。
实际使用一般用第一种方案
其他还有考虑增加id复杂度,避免被猜到规矩,做好数据的基础格式校验,加强用户权限,做好热点参数限流比如空值这种


缓存雪崩
同时大量key失效或者redis服务宕机导致数据库压力巨大
1.给不同的key添加TTL随机值,达到不同的失效时间
2.提高redis集群高服务的可用性,比如哨兵机制,和redis数据同步(主从服

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值