Redis的三大问题:
缓存穿透:
当数据库没这个key,然后不停的请求数据库
解决办法:缓存一个为空的值
使用布隆过滤器 bitmap
缓存雪崩:
缓存服务器挂掉,导致所有的请求打到数据库上,或者同时到过期时间,一大批的缓存过期,导致数据库压力陡增
解决办法:
使用热点数据,将值设置成永不过期,或者定时的将数据缓存进redis中
缓存击穿:
当某个key过期的时间,但是还没到缓存中,大量的请求打到数据库中
解决办法:
使用热点数据,将值设置成永不过期,或者定时的将数据缓存进redis中
Redis的删除策略:
定期删除:redis默认是每隔100ms就随机抽取一些设置了过期时间的key,检查其是否过期,如果过期就删除。注意这里是随机抽取的。为什么要随机呢?假如redis存了几十万个key,每隔100ms就遍历所有的设置过期时间的key的话,就会给CPU带来很大的负载
惰性删除:当获取的时候查看是否过期,过期的话,删除key,会导致不用的数据一直在服务器种存在
定时删除:创建一个定时器,当key设置有过期时间,且过期时间到达时,由定时器任务立即执行对键的删除操作
优点:节约内存,到时就删除,快速释放掉不必要的内存占用
缺点:CPU压力很大,无论CPU此时负载量多高,均占用CPU,会影响redis
服务器响应时间和指令吞吐量
总结:用处理器性能换空间除