Redis之内存管理

1.Redis为什么要个数据设置过期时间?

  • 防止oom,而且还是适用于多种业务场景,有实效的验证码、token等。

2.Redis如何判断数据过期?

  • redis通过一个过期字典来板寸过期的数据,过期字典的键值指向Redis数据库中的某个key,过期字典的值十一个long long int的时间戳,保存了过期时间。

3.过期的数据删除的策略?

  • 惰性删除:取出key的时候才会进行过期检查,对cpu友好,但是会漏掉过多的过期key,从而造成oom。
  • 定期删除:每隔一段时间抽取一批key进行删除过期的可以操作,对内存友好。
  • redis采用的是定期删除+惰性/懒汉式删除。

4.redis内存淘汰机制?

  • volatile-lru(least recently used):从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
  • volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
  • volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
  • allkeys-lru(least recently used):当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的 key(这个是最常用的)
  • allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
  • no-eviction:禁止驱逐数据,也就是说当内存不足以容纳新写入数据时,新写入操作会报错。这个应该没人使用吧!
  • 4.0 版本后增加以下两种:
  • volatile-lfu(least frequently used):从已设置过期时间的数据集(server.db[i].expires)中挑选最不经常使用的数据淘汰
  • allkeys-lfu(least frequently used):当内存不足以容纳新写入数据时,在键空间中,移除最不经常使用的 key

5.redis持久化机制?

  • RBD:snapshotting快照的形式,redis通过创建快照的获得存储在内存里面的数据在某个时间点上的副本。
  • AOF:append of File的方式,持久性实时性更好,没执行一条更改Redis数据的命令,Redis就将命令写入内存,然后根据一定刷盘到磁盘中的AOF文件中。

6.缓存穿透

  • 概念:是指缓存中不存在key,大量的请求打在数据库上面。
  • 解决方法:1,设置无效的key并定时,当在数据库中没查找数据的时候,在缓存中设置无效的key并设置过期时间。2,布隆过滤器:将所有的请求的key放入布隆过滤器中,当存在则进而查询缓存。

7.缓存雪崩

  • 概念:缓存大面积的时效,导致大量的请求打在了数据库上面。
    解决方法:1,redis集群,2,限流

8.缓存击穿

  • 概念:大量请求访问redis中的某个key,会造成一部分访问不到就会访问数据库。
  • 解放方法:1,设置热点数据不过期,2,使用互斥队列,3,设置缓存屏障。

9.缓存异常

在这里插入图片描述

10.如何保证缓存一致性?

  • 方法一:Cache Aside Pattern(旁路缓存模式):先更新DB,在删除缓存,若删除缓存失败,则可以采用重试机制保证缓存的删除。
  • 方法二:延时双删:更新操作先删除缓存,在更新数据库,sleep一段时候后之后在删除缓存。
  • 方法三:通过中间件监听binlog日志达到缓存一致性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿联爱学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值