缓存更新策略

之前面试,面试官问到了我了缓存更新的问题:更新数据库和更新缓存的逻辑是什么样的?

当时我说的是:先失效缓存,然后再去更新数据库。当时我也说不出个子丑寅卯来,只怪自己用缓存只停留在表面阶段,没有太深挖原理,没有去想缓存的更新策略(平常没接触到这方面),也没有取想缓存更新失败的各种情形。同一个坑不能掉进去两次,这次借这个机会好好梳理一下缓存这块的知识。

缓存的基本概念和用法我就跳过,直接来看缓存的更新策略。

缓存更新的策略有四种:

  • Cache aside
  • Read through
  • Write through
  • Write behind caching

原文地址:https://www.cnblogs.com/tuhooo/p/10550603.html

时间: 2024-08-15 04:28:45

缓存更新策略的相关文章

缓存服务的更新策略有哪些?

在互联网项目开发中,缓存的应用是非常普遍了,缓存可以帮助页面提高加载速度,减少服务器或数据源的负载. 1.为什么需要缓存? 一般在项目中,最消耗性能的地方就是后端服务的数据库了.而数据库的读写频率常常都是不均匀分布的,大多情况是读多写少,并且读操作(select)还会有一些复杂的判断条件,比如 like.group.join 等等,这些语法是非常消耗性能的,所有会出现很多的慢查询,因此数据库很容易在读操作的环节遇到瓶颈. 那么通过在数据库前面,前置一个缓存服务,就可以有效的吸收不均匀的请求,抵挡

Redis缓存失效策略

一.背景 线上你写代码的时候,想当然的认为写进 redis 的数据就一定会存在,后面导致系统各种 bug,谁来负责? 常见的有两个问题: 往 redis 写入的数据怎么没了? 可能有同学会遇到,在生产环境的 redis 经常会丢掉一些数据,写进去了,过一会儿可能就没了.我的天,同学,你问这个问题就说明 redis 你就没用对啊.redis 是缓存,你给当存储了是吧? 啥叫缓存?用内存当缓存.内存是无限的吗,内存是很宝贵而且是有限的,磁盘是廉价而且是大量的.可能一台机器就几十个 G 的内存,但是可

缓存更新的套路

看到好些人在写更新缓存数据代码时,先删除缓存,然后再更新数据库,而后续的操作会把数据再装载的缓存中.然而,这个是逻辑是错误的.试想,两个并发操作,一个是更新操作,另一个是查询操作,更新操作删除缓存后,查询操作没有命中缓存,先把老数据读出来后放到缓存中,然后更新操作更新了数据库.于是,在缓存中的数据还是老的数据,导致缓存中的数据是脏的,而且还一直这样脏下去了. 我不知道为什么这么多人用的都是这个逻辑,当我在微博上发了这个贴以后,我发现好些人给了好多非常复杂和诡异的方案,所以,我想写这篇文章说一下几

[unity3d]手游资源热更新策略探讨

原地址:http://blog.csdn.net/dingxiaowei2013/article/details/20079683 我们学习了如何将资源进行打包.这次就可以用上场了,我们来探讨一下手游资源的增量更新策略.注意哦,只是资源哦.关于代码的更新,我们稍后再来研究.理论上这个方案可以使用各种静态资源的更新,不仅仅是assetbundle打包的. (转载请注明原文地址http://blog.csdn.net/janeky/article/details/17666409) 原理 现在的手游

.NET4缓存过期策略摘录

以下是网上搜索的资料,仅供参考: 资料一:ASP.NET缓存中Cache过期的三种策略(转自51CTO) 我们在页面上添加三个按钮并双击按钮创建事件处理方法,三个按钮使用不同的过期策略添加ASP.NET缓存. <asp:Button ID="btn_InsertNoExpirationCache" runat="server" Text="插入永不过期缓存" OnClick="btn_InsertNoExpirationCache

Unity手游之路&lt;十二&gt;手游资源热更新策略探讨

http://blog.csdn.net/janeky/article/details/17666409 上一次我们学习了如何将资源进行打包.这次就可以用上场了,我们来探讨一下手游资源的增量更新策略.注意哦,只是资源哦.关于代码的更新,我们稍后再来研究.理论上这个方案可以使用各种静态资源的更新,不仅仅是assetbundle打包的. (转载请注明原文地址http://blog.csdn.net/janeky/article/details/17666409) 原理 现在的手游安装有几种方式.一种

高性能服务器架构(二):缓存清理策略

原文链接:https://mp.weixin.qq.com/s/OopSWbLrzT-V11VDZOpxJw 虽然使用缓存思想似乎是一个很简单的事情,但是缓存机制却有一个核心的难点,就是--缓存清理.我们所说的缓存,都是保存一些数据,但是这些数据往往是会变化的,我们要针对这些变化,清理掉保存的"脏"数据,却可能不是那么容易. 首先我们来看看最简单的缓存数据--静态数据.这种数据往往在程序的运行时是不会变化的,比如Web服务器内存中缓存的HTML文件数据,就是这种.事实上,所有的不是由外

.NET 数据库缓存依赖策略实现

处理大型门户网站 一般都需要 使用缓存技术这个web加速器在 PHP 和 java 一般 使用的是 基于squid 来做. 当然在 windows .NET 平台也是可以的 squid有 windows版本.这个以后再去研究,现在 就介绍一下 .NET 自带的 缓存策略.Microsoft的petshop就用到了它; 一.基于数据库触发(设置缓存依赖策略,当数据库中数据发生变化时,触发缓存失效;但微软提供的解决方案目前仅支持SQL Server,如果是ORACLE需要自己实现触发接口). 二.基

缓存更新的套路(转)

转自:https://coolshell.cn/articles/17416.html 看到好些人在写更新缓存数据代码时,先删除缓存,然后再更新数据库,而后续的操作会把数据再装载的缓存中.然而,这个是逻辑是错误的.试想,两个并发操作,一个是更新操作,另一个是查询操作,更新操作删除缓存后,查询操作没有命中缓存,先把老数据读出来后放到缓存中,然后更新操作更新了数据库.于是,在缓存中的数据还是老的数据,导致缓存中的数据是脏的,而且还一直这样脏下去了. 我不知道为什么这么多人用的都是这个逻辑,当我在微博