我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

在互联网项目开发中,缓存的应用是非常普遍了,缓存可以帮助页面提高加载速度,减少服务器或数据源的负载。

1、为什么需要缓存?

一般在项目中,最消耗性能的地方就是后端服务的数据库了。而数据库的读写频率常常都是不均匀分布的,大多情况是读多写少,并且读操作(select)还会有一些复杂的判断条件,比如 like、group、join 等等,这些语法是非常消耗性能的,所有会出现很多的慢查询,因此数据库很容易在读操作的环节遇到瓶颈。

那么通过在数据库前面,前置一个缓存服务,就可以有效的吸收不均匀的请求,抵挡流量波峰。

另外,如果应用与数据源不在同一个服务器的情况下,中间还会有很多的网络消耗,也会对应用的响应速度有很大影响,如果当前应用对数据实时性的要求不那么强的话,在应用侧加上缓存就能很快速的提升效率。

2、那使用缓存会遇到哪些问题呢?

虽然缓存可以提高整体性能,但是它也可能会带来别的问题。例如使用缓存之后,就相当于把数据存放了2份,一份是在数据库中,另一份存放在缓存中。当有新的数据要写入或者旧数据需要更新的时候,如果我们只更新了其中一份数据源,那两边的数据就不一致了,所以这里就存在一个缓存数据与数据库数据如何进行有效且快速的同步问题,才可以保证数据的最终一致性。

另外,加上缓存服务其实也引入了系统架构的复杂度,因为还需要额外的关注缓存自身带来的下列问题:

  • 缓存的过期时间问题:设计缓存的过期时间需要非常的有技巧,且必须与业务实际情况相结合。因为如果设计的过期时间太短了,那会导致缓存效果不佳,且还会造成频繁的从数据库中往缓存里写数据。如果缓存设计的过期时间太长了,又会导致内存的浪费。

  • 缓存的命中率问题:这也是设计缓存中需要存放哪些数据的很重要一点,如果设计的不好,可能会导致缓存命中率过低,失去缓存效果。一般对于热点数据而言,要保证命中率达到70%以上效果最佳。

  • 缓存的穿透/雪崩问题:是指如果缓存服务一旦宕机或全部丢失,那么有可能一瞬间所有的流量都直接打到了后端数据库上,可能会造成连锁反应,瞬间的请求高峰极有可能导致数据库无法承载。

3、缓存的更新策略具体有哪些?

典型的缓存模式,一般有如下几种:

  • Cache Aside

  • Read/Write Through

  • Write Behind

每种模式都有不同的特点,适应与不同的项目场景,下面来依次看看:

Cache Aside 模式

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

这是大家经常用到的一种策略模式。这种模式主要流程如下:

应用在查询数据的时候,先从缓存Cache中读取数据,如果缓存中没有,则再从数据库中读取数据,得到数据库的数据之后,将这个数据也放到缓存Cache中。

如果应用要更新某个数据,也是先去更新数据库中的数据,更新完成之后,则通过指令让缓存Cache中的数据失效。

这里为什么不让更新操作在写完数据库之后,紧接着去把缓存Cache中的数据也修改了呢?

主要是因为这样做的话,就有2个写操作的事件了,担心在并发的情况下会导致脏数据,举个例子:假如同时有2个请求,请求A和请求B,并发的执行。请求A是要去读数据,请求B是要去更新数据。初始状态缓存中是没有数据的,当请求A读到数据之后,准备往回写的时候,此刻,请求B正好要更新数据,更新完了数据库之后,又去把缓存更新了,那请求A再往缓存中写的就是旧数据了,属于脏数据。

那么 Cache Aside 模式就没有脏数据问题了吗?不是的,在极端情况下也可能会产生脏数据,比如:

假如同时有2个请求,请求A和请求B,并发的执行。请求A是要去读数据,请求B是要去写数据。假如初始状态缓存中没有这个数据,那请求A发现缓存中没有数据,就会去数据库中读数据,读到了数据准备写回缓存中,就在这个时候,请求B是要去写数据的,请求B在写完数据库的数据之后,又去设置了缓存失效。这个时候,请求A由于在数据库中读到了之前的旧数据,开始往缓存中写数据了,此时写进入的就也是旧数据。那么最终就会导致,缓存中的数据与数据库的数据不一致,造成了脏数据。

不过这种概率比上面一种概率要小很多。所以整体而言 Cache Aside 模式 还是一种比较简单实用的方式。

Read/Write Through 模式


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

这个模式其实就是将 缓存服务 作为主要的存储,应用的所有读写请求都是直接与缓存服务打交道,而不管最后端的数据库了,数据库的数据由缓存服务来维护和更新。不过缓存中数据变更的时候是同步去更新数据库的,在应用的眼中只有缓存服务。

流程就相当简单了:

应用要读数据和更新数据都直接访问缓存服务

缓存服务同步的将数据更新到数据库

这个模式出现脏数据的概率就比较低,但是就强依赖缓存了,对缓存服务的稳定性有较大要求,另外,增加新缓存节点时还会有初始状态空数据问题。

Write Behind 模式

这个模式就是 Read/Write Through 模式 的一个变种。区别就是 Read/Write Through 模式的缓存写数据库的时候是同步的,而 Write Behind 模式 的缓存操作数据库是异步的。

流程如下:

应用要读数据和更新数据都直接访问缓存服务

缓存服务异步的将数据更新到数据库(通过异步任务)

这个模式的特点就是速度很快,效率会非常高,但是数据的一致性比较差,还可能会有数据的丢失情况,实现逻辑也较为复杂。

以上就是目前三种主流的缓存更新策略,另外还有Refrsh-Ahead模式等由于使用的不是很常见就不详细介绍了。

缓存是互联网项目中非常普遍的一个提高效率的方案,用法比较多,也比较关键,大家可以一起交流。

本文转自微信公众号:不止思考  作者:奎哥

原文链接:https://mp.weixin.qq.com/s/GhTJ0rbxDrVO_Q5YRcKb0w

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

PHP开发缓存的数据存储与更新策略

PHP开发缓存的数据存储与更新策略,需要具体代码示例在Web应用程序中,缓存是提高性能和响应速度的重要工具。缓存可以大大减少资源获取的时间和响应的延迟,从而提高系统的效率和用户的满意度。在PHP开发中,缓存技术的应用和优化是非常重要的,本文
PHP开发缓存的数据存储与更新策略
2023-11-07

redis缓存的更新方法有哪些

Redis缓存的更新方法有以下几种:1. 更新缓存数据:直接更新缓存中的数据,可以使用`SET`命令或者其他适合的命令来更新缓存中的数据。2. 删除缓存数据:如果需要更新缓存中的数据,可以先删除旧缓存数据,再插入新的数据。可以使用`DEL`
2023-08-23

面试官问:Redis 缓存淘汰策略有哪些?

我们知道,redis一般会设置过期时间。那么这些键过期了是立刻从内存中删除吗?通常,键删除会有不同的策略。
Redis缓存2024-11-29

面试官问:Redis缓存淘汰策略有哪些?

惰性删除策略的缺点是,它对内存是最不友好的。如果一个键已经过期,而这个键又仍然保留在redis中,那么只要这个过期键不被删除,它所占用的内存就不会释放。

缓存策略对动态SQL性能有哪些影响

缓存策略对动态SQL性能有以下影响:缓存命中率:缓存策略的设计决定了命中率的高低。如果缓存策略能有效地识别出重复的SQL查询,并将结果缓存起来,那么就能提高命中率,从而减少数据库查询的次数,提高性能。缓存更新频率:动态SQL的结果可能随着时
缓存策略对动态SQL性能有哪些影响
2024-04-29

MySQL数据库和Redis缓存一致性的更新策略

目录一、更新策略二、读写缓存1、同步直写策略2、异步缓写策略三、双检加锁策略四、数据库和缓存一致性的更新策略1、先更新数据库,再更新Redis2、先更新缓存,再更新数据库3、先删除缓存,再更新数据库延时双删4、先更新数据库,再删除缓存5、总
2023-04-12

redis的内存淘汰策略有哪些

redis 提供了多项内存淘汰策略,以控制在内存不足情况下数据的处理方式。这些策略包括:noeviction:禁用内存淘汰,确保数据不会丢失。volatile-lru:淘汰最久未使用的已设置过期时间的键。volatile-ttl:淘汰过期时
redis的内存淘汰策略有哪些
2024-04-19

高并发缓存策略大揭秘:面试必备的缓存更新模式解析

Write Behind模式和Write Through模式整个架构是一样的,核心在于write through在缓存数据库中的更新是同步的,而Write Behind是异步的。

云服务器安全策略有哪些

云服务器安全策略包括但不限于:数据备份:云服务器提供的数据备份服务应该确保备份的数据不会遭到意外删除、格式化、重启,以避免数据丢失。访问控制:云服务器采用的访问控制机制应该可以防止未经授权的访问。应该限制特定的用户或者实例对服务器的访问权限,并通过用户名/口令验证以保证用户的安全。加密传输:云服务器应该使用加密传输机制,以保护数据的安全。加密可以用于实现传输数据的加密,确保数据在传输过程
2023-10-26

cc防御服务器策略有哪些

cc防御服务器策略有:1、在iis上取消网站域名绑定,让CC攻击丧失总体目标;2、更改默认的Web端口,能有效防御CC攻击;3、在iis中屏蔽掉CC攻击源IP对Web站点的浏览,能有效防御CC攻击,保证网站的安全。具体内容如下:1、取消域名
2023-02-08

亚马逊的产品服务策略有哪些

产品策略:亚马逊提供丰富的产品选择,包括品牌产品、自有品牌、第三方品牌、亚马逊自有品牌等,以满足消费者不同的需求和偏好。同时,亚马逊也在不断加强自有品牌的建设,通过定位自己的品牌,打造独特的产品优势,提高用户忠诚度。价格策略:亚马逊在价格方面有较强的竞争力,其定价策略是根据市场需求和竞争对手情况来制定的。亚马逊提供的Prime会员服务和部分商品可以享受免费配送,并提供各种促销活动和优惠券。物流策略:亚...
2023-10-27

编程热搜

目录