redis缓存和性能

缓存穿透:穿透从字面上理解,透过去,用户访问了一个缓存和数据库都不存在的key,这样的话,缓存的意义就不存在了,一下子数据库的压力就大了。
解决方法:
1.对不存在的key缓存起来,并增加一个过期的时间60s
2.使用布隆过滤器,经过布隆过滤器的过滤,key不存在的,肯定不存在。配合方法1
缓存击穿:一大部分缓存的key在某一时刻全部失效,此时这一部分的访问请求会直接作用在数据库上面,增加了数据库的压力。
解决方法: 给这些key在失效时间内,增加一小段随机的时间,让这些key不会在同一时间内全部失效。
缓存雪崩:缓存一下子崩溃了。类似缓存系统不管用了,访问的压力全部压到数据库上面了。
解决方法:
1.redis布置成哨兵群或者集群的形式
2.在代码层面使用限流、降级、熔断的方式
3.预防方案,在类似双十一活动之前,让缓存的系统崩溃,做好相关的预防措施。
热点key:类似双十一的活动,某件商品成为热点一下子访问量提升了上来。
解决方法:使用互斥锁,很多请求访问,只让一个请求进来获取数据,然后缓存起来,后面的请求直接从缓存中获取相应的数据。
缓存和数据库不一致:
这个问题处理起来是矛盾的,不仅要求数据的一致性,还要求数据得实时性。建议使用读写锁来处理这个问题,对于我们大部分的互联网公司来说,读操作往往大于写的操作,读写锁对于读操作基本就是无锁,对于写操作是串行执行的。没有完美的方案,性能和安全性只能偏向一个方向。
Redis对于过期键的处理策略
redis对key过期的处理,有8种策略,
a) 针对设置了过期时间的key做处理:
volatile-ttl:在筛选时,会针对设置了过期时间的键值对,根据过期时间的先后进行删除,越早过期的越先被删除。
volatile-random:就像它的名称一样,在设置了过期时间的键值对中,进行随机删除。
volatile-lru:会使用 LRU 算法筛选设置了过期时间的键值对删除。
volatile-lfu:会使用 LFU 算法筛选设置了过期时间的键值对删除。
b) 针对所有的key做处理:
allkeys-random:从所有键值对中随机选择并删除数据。
allkeys-lru:使用 LRU 算法在所有数据中进行筛选删除。
allkeys-lfu:使用 LFU 算法在所有数据中进行筛选删除。
c) 不处理:
noeviction:不会剔除任何数据,拒绝所有写入操作并返回客户端错误信息"(error) OOM command not allowed when used memory",此时Redis只响应读操作。

LRU 算法(Least Recently Used,最近最少使用)
淘汰很久没被访问过的数据,以最近一次访问时间作为参考。

LFU 算法(Least Frequently Used,最不经常使用)
淘汰最近一段时间被访问次数最少的数据,以次数作为参考。

推荐使用的是volatile-lru

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值