Redis缓存

本文深入探讨缓存技术,包括缓存血崩现象及其处理方法,如加锁排队、缓存标记更新及设置不同过期时间;介绍缓存预热、更新和降级策略,以及redis缓存失效策略,涵盖FIFO、LRU、LFU等算法,和redis的内存淘汰机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

缓存技术

1. 缓存血崩

出现的时机,当一批量的缓存key值同时失效,导致同时查询数据库,造成数据库宕机,从而影响系统。

处理方式:

  1. 并发量不是很多的情况下,可以使用加锁排队的方式
  2. 每个缓存都有缓存标记,记录缓存是否失效,如果失效的话就去更新缓存
  3. 为每个key设置不同的过期时间,防止同时失效

当数据库里面查询出来没有任何数据的时候,缓存里面也不会存在任何数据。导致用户去查询的时候一直需要查询缓存和数据库。

解决办法:

  1. 布隆过滤器,把明确不存在的通过bitmap过滤掉(这个需要一个缓存所有的bitmap,会比较吃内存)
  2. 查询失效的数据也进行缓存,无论是系统错误还是数据不存在。但是注意过期时间需要设置的短一些,比如30S或者是1分钟。

3. 缓存预热

系统在上线之初,没有任何数据就需要缓存所有的数据。

场景:

​ 秒杀场景,把固定的商品信息缓存到redis里面,防止过多查询数据库

4. 缓存更新

缓存更新除开redis的自带缓存失效策略(详见redis缓存失效策略)还能设置一些自己的的缓存策略,常见的策略有:

  1. 定期清理过期的缓存
  2. 用户请求过来判断缓存过期与否,过期去获取新的数据

5. 缓存降级

当访问量剧增的时候,服务出现了问题。可以配置人工的降级开关来保证核心业务。

降级的最终目的是保证核心业务可用。

redis缓存失效策略

常用的淘汰算法

  1. FIFO:First In First Out,先进先出。判断被存储的时间,离目前最远的数据优先被淘汰。
  2. LRU:Least Recently Used,最近最少使用。判断最近被使用的时间,目前最远的数据优先被淘汰。
  3. LFU:Least Frequently Used,最不经常使用。在一段时间内,数据被使用次数最少的,优先被淘汰。

redis的内存淘汰机制:

设置方式config set maxmemory-policy volatile-lru

maxmemory-policy 六种方式

​ volatile-lru:只对设置了过期时间的key进行LRU(默认值)
​ allkeys-lru : 删除lru算法的key
​ volatile-random:随机删除即将过期key
​ allkeys-random:随机删除
​ volatile-ttl : 删除即将过期的
​ noeviction : 永不过期,返回错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值