Redis进阶学习--03| Redis是如何工作的?

Redis进阶学习--03| Redis是如何工作的?,第1张

Redis进阶学习--03| Redis是如何工作的? 三、Redis是如何工作的?

Redis 提供了高性能的数据存取功能,所以广泛应用在缓存场景中,既能有效地提升业务应用的响应速度,还可以避免把高并发大压力的请求发送到数据库层。如果 Redis 做缓存时出现了问题,比如说缓存失效,那么,大量请求就会直接积压到数据库层,必然会给数据库带来巨大的压力,很可能会导致数据库宕机或是故障,那么,业务应用就没有办法存取数据、响应用户请求了。
关于Redis包括工作原理、替换策略、异常处理和扩展机制,有四个问题需要解决。

  • Redis 缓存具体是怎么工作的?
  • Redis 缓存如果满了,该怎么办?
  • 为什么会有缓存一致性、缓存穿透、缓存雪崩、缓存击穿等异常,该如何应对?
  • Redis 的内存毕竟有限,如果用快速的固态硬盘来保存数据,可以增加缓存的数据量,那么,Redis 缓存可以使用快速固态硬盘吗?
一.缓存的特征


系统中每一层的访问速度是不一致的,因此需要缓存。这样就可以把一些需要频繁访问的数据放在缓存中,以加快它们的访问速度。

1、缓存的第一个特征

在一个层次化的系统中,缓存一定是一个快速子系统,数据存在缓存中时,能避免每次从慢速子系统中存取数据。对应到互联网应用来说,Redis 就是快速子系统,而数据库就是慢速子系统了。

2、缓存的第二个特征

缓存系统的容量大小总是小于后端慢速系统的,我们不可能把所有数据都放在缓存系统中。

二. Redis 缓存处理请求的两种情况

把 Redis 用作缓存时,我们会把 Redis 部署在数据库的前端,业务应用在访问数据时,会先查询 Redis 中是否保存了相应的数据。此时,根据数据是否存在缓存中,会有两种情况。

  • 应用读取数据时,需要先读取 Redis;
  • 发生缓存缺失时,需要从数据库读取数据;
  • 发生缓存缺失时,还需要更新缓存。
1、命中缓存

Redis 中有相应数据,就直接读取 Redis,性能非常快。

2、缺失缓存

Redis 中没有保存相应数据,就从后端数据库中读取数据,性能就会变慢。而且,一旦发生缓存缺失,为了让后续请求能从缓存中读取到数据,我们需要把缺失的数据写入 Redis,这个过程叫作缓存更新。

三.缓存的类型 1、只读缓存(只读缓存指的是,只从缓存中读取数据,不修改缓存中的数据,如果发生了修改,先修改数据库,再去读取数据库中的数据进行缓存)

只读缓存,可以通过延迟双删的 *** 作,保证数据库与缓存的最终一致性。

当 Redis 用作只读缓存时,应用要读取数据的话,会先调用 Redis GET 接口,查询数据是否存在。而所有的数据写请求,会直接发往后端的数据库,在数据库中增删改。对于删改的数据来说,如果 Redis 已经缓存了相应的数据,应用需要把这些缓存的数据删除,Redis 中就没有这些数据了。

2、读写缓存(同时更新数据库和缓存)

1.同步读写(同步写入)

同步直写是指,写请求发给缓存的同时,也会发给后端数据库进行处理,等到缓存和数据库都写完数据,才给客户端返回。这样,即使缓存宕机或发生故障,最新的数据仍然保存在数据库中,这就提供了数据可靠性保证。
不过,同步直写会降低缓存的访问性能。这是因为缓存中处理写请求的速度是很快的,而数据库处理写请求的速度较慢。即使缓存很快地处理了写请求,也需要等待数据库处理完所有的写请求,才能给应用返回结果,这就增加了缓存的响应延迟。

2.异步读写(异步写入,先写入内存,后写入数据库)

异步写入效率最高,但是可能会出现的是内存掉电,导致内存中数据未保存至数据库。
则是优先考虑了响应延迟。此时,所有写请求都先在缓存中处理。等到这些增改的数据要被从缓存中淘汰出来时,缓存将它们写回后端数据库。这样一来,处理这些数据的 *** 作是在缓存中进行的,很快就能完成。只不过,如果发生了掉电,而它们还没有被写回数据库,就会有丢失的风险了。

3、模式选择
  • 如果需要对写请求进行加速,我们选择读写缓存;
  • 如果写请求很少,或者是只需要提升读请求的响应速度的话,我们选择只读缓存。
4、个人理解

只读缓存和读写缓存都会存在一致性问题,只读缓存的优点是强调数据可靠性,而读写缓存的优点是强调响应时间。 一致性问题都会存在。所以需要事务来协助进行。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5522799.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-13
下一篇 2022-12-13

发表评论

登录后才能评论

评论列表(0条)

保存