Redis知识整理

发布于:2025-08-17 ⋅ 阅读:(24) ⋅ 点赞:(0)


缓存:
1.缓存的过期策略:
   a.内存淘汰策略,一致性差、无维护成本
   b.超时剔除策略,一致性一般、维护成本低
   c.主动更新策略,一致性高、维护成本高
2.内存淘汰策略:
  volatile-lru: 从设置了过期时间的数据集中,移除最近最少使用的数据。
  allkeys-lru: 从所有数据集中,移除最近最少使用的数据。
  volatile-lfu: 从设置了过期时间的数据集中,移除最不常使用的数据。
  allkeys-lfu: 从所有数据集中,移除最不常使用的数据。
  volatile-random: 从设置了过期时间的数据集中,随机移除数据。
  allkeys-random: 从所有数据集中,随机移除数据。
  volatile-ttl: 从设置了过期时间的数据集中,移除即将过期的数据。
  noeviction: 不移除任何数据,当内存满时,返回错误。该策略通常不建议使用,因为它可能导致无法写入新数据。
3.常用的缓存策略有以下五种:
  Cache-Aside Pattern:旁路缓存模式
    a.程序读取缓存信息,若缓存不存在,则去数据库读取缓存,读到数据后写入缓存,然后在返回;
    b.程序修改数据,则先修改数据库,再删除缓存;
  Read Through Cache Pattern:读穿透模式
    a.程序直接从缓存系统中读取数据,不关心数据来源(是从缓存中还是数据库中来的数据),
      若缓存系统中没有数据,则缓存系统负责去读取数据,然后写入缓存系统,进行返回;
  Write Through Cache Pattern:写穿透模式
    a.程序更新数据都是通过缓存系统,缓存系统需要维护两份数据,一份是缓存,一份是数据库,
      缓存系统在一个事务里面保证缓存和数据库都写入成功,才算正真的成功。
    b.写穿透模式通常伴随着读穿透模式
    c.适用场景:需要频繁读取相同数据、不能忍受数据丢失(相对Write-Behind而言)和数据不一致
  Write Behind Pattern:又叫Write Back,异步缓存写入模式
    a.与写穿透模式很像,不同点在于写数据库是异步的,有可能是定时任务触发,也有可能是一个异步请求进行操作。
4.先更新数据,在删除缓存,避免数据不一致性问题;
5.缓存穿透:
  a.往缓存中写入空值,并且设置过期时间,避免缓存穿透
  b.布隆过滤器:
    原理:通过三个hash函数对其进行计算,比如分别得到 2, 3, 7,增设置对应的下标为1,当查询时,先查询布隆过滤器,若不存在,
          则数据库一定不存在,若存在,则数据库可能不存在
  其他方案:
     ID设置复杂点,避免被猜到ID
     做好数据格式的校验,剔除非法数据
     加强用户权限校验,根据用户权限,对用户进行合理限流
     做好热点数据限流,对短期类发送大量请求的用户进行限流
6.缓存击穿:
  互斥锁:
     优点:没有额外的内存消耗、保证了一致性、实现简单
     缺点:线程需要等待,性能受到了影响、可能导致死锁
  逻辑过期:  
     优点:线程无需等待,性能较好
     缺点:不保证一致性、有额外的内存消耗、实现复杂
  


网站公告

今日签到

点亮在社区的每一天
去签到