泊头做网站找哪家好,做网站要给ftp密码吗,竹子建站加盟咨询,ui设计包括哪些场景笔者在线上使用redis缓存的时候发现即使某些查询已经设置了无过期时间的缓存,但是查询仍然非常耗时。经过排查,发现缓存确实已经不存在,导致了缓存击穿,查询直接访问了mysql数据库。因为我们用的是公司公共的redis缓存服务器,在和运维人员交流后发现可能是redis的内存淘汰… 笔者在线上使用redis缓存的时候发现即使某些查询已经设置了无过期时间的缓存,但是查询仍然非常耗时。经过排查,发现缓存确实已经不存在,导致了缓存击穿,查询直接访问了mysql数据库。因为我们用的是公司公共的redis缓存服务器,在和运维人员交流后发现可能是redis的内存淘汰策略引起。 1. 什么是内存淘汰 redis是基于内存的key-value数据库,内存是有限的宝贵资源,当内存耗尽的时候,redis有如下5种处理方式来应对 No-eviction 在该策略下,如果继续向redis中添加数据,那么redis会直接返回错误 Allkeys-lru 从所有的key中使用LRU算法进行淘汰 Volatile-lru 从设置了过期时间的key中使用LRU算法进行淘汰 Allkeys-random 从所有key中随机淘汰数据 Volatile-random 从设置了过期时间的key中随机淘汰 Volatile-ttl 从设置了过期时间的key中,选择剩余存活时间最短的key进行淘汰 除上述6种淘汰策略外,Redis 4.0新增了两种淘汰策略 Volatile-lfu 从设置了过期时间的key中选择key进行淘汰 Allkeys-lfu 从所有的key中使用lfu进行淘汰 2. 内存淘汰算法选择 上述总共谈到了8种内存淘汰策略,但是如何选择呢? 从缓存类型来说,其中名称中带volatile的策略确定了被淘汰的缓存仅从设置了过期时间的key中选择,如果没有任何key被设置过期时间,那么Volatile-lru,Vol