Redis
缓存
缓存穿透:在服务端请求一个数据库没有数据值,如果没有命中redis里面的缓存会直接请求数据库,如果大量这种没有的请求就会导致数据库宕机。
解决方案:
1.将不存在的数据库所有请求都设为null值。缺点:消耗大量内存,可能发生不一致问题。
2.使用布隆过滤器。缺点:实现复杂,存在误判。
缓存击穿:设置了key的过期时间在过期的时候遭受大量并发请求会给数据库压垮。
解决方案:
1.互斥锁,保证数据强一致性性能差。
2.逻辑过期,高可用性能优不能保证数据绝对一致。
缓存雪崩:同一时段有大量的缓存key请求同时失效或者redis宕机,导致大量请求到达数据库。
解决方案:
1.给不同的key的TTL添加随机值。
2.利用redis集群提高服务。3.给缓存业务添加降级限流业务。4.添加多级缓存。
Redis数据删除策略
惰性删除:设置该key的过期时间,等需要使用该key再去检查是否过期,过期删除反之使用。
优点:对CPU友好。缺点:如果没有使用该key则一直会存在内存中并且永远不会释放。
定期删除:每隔一段时间就会对key进行检查,删除里面的过期key。
定期删除两种的模式:
1.SLOW模式是定时任务,执行频率默认为10hz,每次不超过25ms,以通过修改配置文件redis.conf的hz 选项来调
整这个次数。
2.FAST模式执行频率不固定,但两次间隔不低于2ms,每次耗时不超过1ms。
优点:可以通过限制删除操作执行的时长和频率来减少删除操作对 CPU 的影响。另外定期删除,也能有效释放过期键
占用的内存。
缺点:难以确定执行的时长和频率
数据淘汰策略:
1.Redis提供了8种不同的数据淘汰策略,默认是noeviction不删除任何数据,内存不足直接报错。
2.LRU:最少最近使用。用当前时间减去最后一次访问时间,这个值越大则淘汰优先级越高。
3.LFU:最少频率使用。会统计每个key的访问频率,值越小淘汰优先级越高。