轻松理解redis做缓存的流程

在这里插入图片描述

一、redis缓存过期是如何处理的?

       设置了expire的key缓存过期了,但是服务器的内存还是会被占用,这是因为redis所基于的两种删除策略

1、(主动)定时删除

       定时随机的检查过期的key,如果过期则清理删除。(每秒检查次数在redis.conf中的hz配置)

2、(被动)惰性删除

       当客户端请求一个已经过期的key的时候,那么redis会检查这个key是否过期,如果过期了,则删除,然后返回一个nil。这种策略对cpu比较友好,不会有太多的损耗,但是内存占用会比较高。
       所以,虽然key过期了,但是只要没有被redis清理,那么其实内存还是会被占

二、redis内存淘汰机制是什么?

       如果定期删除漏掉了很多过期的key,而我们也没有再去访问它,如果不加处理,很可能导致内存耗尽。
Redis配置文件中可以设置maxmemory,内存的最大使用量,到达限度时会执行内存淘汰机制。

Redis中的内存淘汰机制:
没有配置时,默认为no-eviction

名称描述
volatile-lru已设置过期时间的数据集中挑选最近最少使用的数据淘汰
volatile-lfu从已设置过期时间的数据集中挑选最不经常使用的数据淘汰
volatile-ttl从已设置过期时间的数据集中挑选将要过期的数据淘汰
volatile-random从已设置过期时间的数据集中挑选任意数据淘汰
allkeys-lru当内存不足写入新数据时淘汰最近最少使用的Key
allkeys-random当内存不足写入新数据时随机选择key淘汰
allkeys-lfu当内存不足写入新数据时移除最不经常使用的Key
no-eviction当内存不足写入新数据时,写入操作会报错,同时不删除数据
  • volatile为前缀的策略都是从已过期的数据集中进行淘汰。
  • allkeys为前缀的策略都是面向所有key进行淘汰。
  • LRU(least recently used)最近最少用到的。在这里插入代码片
  • LFU(Least Frequently Used)最不常用的。
  • 它们的触发条件都是Redis使用的内存达到阈值时。

三、redis缓存击穿原因?

       key对应的数据存在,但在redis中过期,此时若有大量并发请求过来,这些请求发现缓存过期一般都会从后端DB加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端DB压垮。让数据库承压,被叫做缓存击穿

四、redis缓存雪崩原因?

       主要是对于redis集群来说的,大量的缓存失效,由数据库承压,叫做雪崩

五、redis缓存穿透原因?

       key对应的数据在数据源并不存在,每次针对此key的请求从缓存获取不到,请求都会到数据源,从而可能压垮数据源。比如用一个不存在的用户id获取用户信息,不论缓存还是数据库都没有,若黑客利用此漏洞进行攻击可能压垮数据库。
       通俗理解:用户发起的请求,缓存中没有数据,数据库中也没有响应的数据,短时间发起大量的假请求都走了数据库,让数据库承压了,并且数据库中还不存在这些数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值