关于Redis的其他的一些面试问题已经写过了,比如常见的缓存穿透、雪崩、击穿、热点的问题,但是还有一个比较麻烦的问题就是如何保证缓存一致性。 对于缓存和数据库的操作,主要有以下两种方式。 先删缓存,再更新数据库 先删除缓存,数据库还没有更新成功,此时如果读取缓存,缓存不存在,去数据库中读取 ...
在日常开发过程中,对于Redis和MySQL的使用想必是不陌生的。当面对一些较为简单的使用场景时,貌似也不会很困难。但是在涉及到缓存和数据库之间的数据同步问题的时候,一个考虑不慎,也许就该准备简历了。今天小杨就和大家聊一聊这点。 大多数我们操作Redis的时候,一般的使用场景: 写少读多,修改性较低的场景, 或者存储一些热点的数据或者配置 ,从而缓解数据库的压力。但是,当我们将缓存搭配数据库一起使 ...
2021-07-20 14:01 3 489 推荐指数:
关于Redis的其他的一些面试问题已经写过了,比如常见的缓存穿透、雪崩、击穿、热点的问题,但是还有一个比较麻烦的问题就是如何保证缓存一致性。 对于缓存和数据库的操作,主要有以下两种方式。 先删缓存,再更新数据库 先删除缓存,数据库还没有更新成功,此时如果读取缓存,缓存不存在,去数据库中读取 ...
一般来说,如果允许缓存可以稍微的跟数据库偶尔有不一致的情况,也就是说如果你的系统不是严格要求 “缓存+数据库” 必须保持一致性的话,最好不要做这个方案,即:读请求和写请求串行化,串到一个内存队列里去。 串行化可以保证一定不会出现不一致的情况,但是它也会导致系统的吞吐量大幅度降低,用比正常 ...
不一致产生的原因 我们在使用redis过程中,通常会这样做:先读取缓存,如果缓存不存在,则读取数据库。伪代码如下: 写数据库的伪代码如下: 不管是先写库,再删除缓存;还是先删缓存,再写库,都有可能出现数据不一致的情况 因为写和读是并发的,没法保证 ...
不一致产生的原因 我们在使用redis过程中,通常会这样做:先读取缓存,如果缓存不存在,则读取数据库。伪代码如下: 写数据库的伪代码如下: public void setStu(){ redis.del(key); db.write(obj ...
前言 本篇文章是我之前系列文章中的一篇,主要讨论了我们在平时的开发过程中,各大系统中都要用到的缓存数据的问题,进一步延伸到数据库和缓存的双写一致性问题,并且给出了所有方案的实现代码方便大家参考。 本篇文章主要内容 数据缓存 为何要使用缓存 哪类数据适合缓存 ...
缓存由于其高并发和高性能的特性,在项目中被广泛使用。读缓存流程如下图: 双写一致性有以下三个要求: 缓存不能读到脏数据 缓存可能会读到过期数据,但要在可容忍时间内实现最终一致 这个可容忍时间尽可能的小 要想同时满足上面三条,可以采用读请求和写请求串行化,串到一个内存队列 ...
缓存和数据库一致性问题,有很多解决方案,没有最完美的方案,只有适合自身业务的尽可能完美的方案。 缓存由于其高并发和高性能的特征,已经在项目中被广泛应用。 查询时一般先查询缓存,如果缓存命中的话,那么直接将数据返回。 如果缓存中没有数据(如失效,或者根本没设置数据),那么,应用程序先从 ...
删除或修改了,这样会浪费时间和资源 (2)、如果写数据库的值与更新缓存的值不一致,写入缓存 ...