浅谈Redis缓存更新策略

 更新时间:2022年08月03日 08:45:48   作者:脚踏实地 仰望星空  
这篇文章主要介绍了Redis缓存更新策略的相关资料,讲解的十分细致,有需要的小伙伴可以参考下
 内存淘汰超时剔除主动更新
说明不用自己维护,利用Redis的内存淘汰机制,当内存不足时自动淘汰部分数据。下次查询时更新缓存给缓存数据添加TTL时间,到期后自动删除缓存,下次查询时更新缓存编写业务逻辑,在修改数据的同时,更新缓存
一致性一般
维护成本

业务场景需求:

  • 在基本不会更新数据的情况下可以使用内存淘汰机制
  • 在频繁更新数据的情况下可以使用主动更新,并以超时剔除作为兜底方案。

主动更新的三种方法

  • Cache Aside Pattern:由缓存的调用者,在更新数据库的同时更新缓存
  • Read/Write Through Pattern:缓存和数据库整合为一个服务,由服务来维护一致性。调用者调用该服务,无需关心缓存一致性问题。
    优点:整合的服务保证了数据的一致性
    缺点:维护和开放成本高
  • Write Behind Caching Pattern:调用者只操作缓存,由其他线程异步的将缓存数据持久化到数据库,最终保持一致。
    优点:异步更新缓存数据,效率高。例如缓存多次更新,但是更新到的缓存并没有被使用,多次将数据持久化到数据库就相当于进行了无用的操作,异步更新相当于将前几次的更新合并为一次更新,因而提高了效率。
    缺点:无法保证一致性,维护成本高
  • 目前主流使用的Redis缓存主动更新的方法是Cache Aside Pattern

操作缓存和数据库时需要考虑的三个问题

1.删除缓存还是更新缓存?

  • 更新缓存:每次更新数据库都更新缓存,无效写操作较多
  • 删除缓存:更新数据库时让缓存失效,查询时再更新缓存

2.如何保证缓存与数据库的操作的同时成功或者失败

  • 对于单体系统:将缓存与数据库操作放在一个事务中
  • 对于分布式系统:利用TCC等分布式事务方案

3.先操作缓存还是先操作数据库

先删除缓存,再操作数据库

先操作数据库,再删除缓存

如上图所示,两种方案在多线程的情况下都会产生数据不一致的问题。但是在先操作数据库再删除缓存的情况下,要发生数据不一致的问题,需要在缓存写入之前完成更新数据库和删除缓存的操作,而写入缓存的耗时非常短。因而发生的概率相对于另一种方案更低。所以选择先操作数据库,再删除缓存。

到此这篇关于浅谈Redis缓存更新策略的文章就介绍到这了,更多相关Redis缓存更新策略内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • easyswoole3.5 redis使用详细解析

    easyswoole3.5 redis使用详细解析

    这篇文章主要介绍了easyswoole3.5 redis使用的相关知识,本文通过示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-05-05
  • NestJS+Redis实现缓存步骤详解

    NestJS+Redis实现缓存步骤详解

    这篇文章主要介绍了NestJS+Redis实现缓存,本文分步骤给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • Redis大key和多key拆分的解决方案

    Redis大key和多key拆分的解决方案

    大key会导致内存使用过高,多key可能导致查询效率低下,本文主要介绍了Redis大key和多key拆分的解决方案,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • redis keys与scan命令的区别说明

    redis keys与scan命令的区别说明

    这篇文章主要介绍了redis keys与scan命令的区别说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • redis的2种持久化方案深入讲解

    redis的2种持久化方案深入讲解

    这篇文章主要给大家介绍了关于redis的2种持久化方案的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用redis具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05
  • Redis数据持久化方式技术解析

    Redis数据持久化方式技术解析

    Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API
    2021-09-09
  • 浅谈我是如何用redis做实时订阅推送的

    浅谈我是如何用redis做实时订阅推送的

    这篇文章主要介绍了浅谈我是如何用redis做实时订阅推送的,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • 详解Redis如何保证接口的幂等性

    详解Redis如何保证接口的幂等性

    如何防止接口中同样的数据提交,以及如何保证消息不被重复消费,这些都是shigen在学习的过程中遇到的问题,今天,趁着在学习redis的间隙,我写了一篇文章进行简单的实现,需要的朋友可以参考下
    2023-11-11
  • Redis的9种数据类型用法解读

    Redis的9种数据类型用法解读

    这篇文章主要介绍了Redis的9种数据类型用法及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Redis实现分布式锁(setnx、getset、incr)以及如何处理超时情况

    Redis实现分布式锁(setnx、getset、incr)以及如何处理超时情况

    本文主要介绍了Redis实现分布式锁(setnx、getset、incr)以及如何处理超时情况,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11

最新评论