缓存分区及其透明性的处理方式

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 【6月更文挑战第8天】该文探讨了Redis缓存分区的重要性与方法。分区通过在多台服务器上分散缓存,提升可用性、性能和可伸缩性。最后,强调技术的双刃剑特性,需根据实际情况谨慎选用。

简介

分片是最常见的策略,数据根据逻辑分布到各分区。为了处理分区透明性,文章提到了分片、复制、位置和逻辑透明性。

mandala曼德罗符号.png

然而,分区也带来挑战,如数据分区决策、故障处理、查询复杂性和数据一致性。

为应对这些问题,本文提及了布隆过滤器防止缓存穿透,随机过期策略缓解缓存雪崩,以及控制热点key更新以确保数据一致性。

1 如何对redis缓存进行分区?

一般不会在应用程序中执行分区,而是在分布式数据库中做透明化处理。

对缓存进行分区涉及在多台计算机上拆分缓存。

与使用单个缓存服务器相比,此结构具有多个优势,包括:

创建比单个服务器上可以存储的缓存大得多的缓存。跨服务器分发数据,提高可用性。

如果一台服务器发生故障或变得不可访问,则它保存的数据不可用,但仍可以访问其余服务器上的数据。

对于缓存,这并不重要,因为缓存的数据只是数据库中保存的数据的临时副本。无法访问的服务器上的缓存数据可以改为缓存在其他服务器上。

将负载分散到服务器之间,从而提高性能和可伸缩性。
将数据地理定位到靠近访问它的用户的位置,从而减少延迟。

对于缓存,最常见的分区形式是分片。在此策略中,每个分区(或分片)本身就是一个 Redis 缓存。

数据通过使用分片逻辑定向到特定分区,分片逻辑可以使用多种方法来分发数据。

2 处理分区透明性的方式

分片模式提供了有关实现分片的更多信息。

分片透明:

用户不必知道关系数据是如何分片的,它们对数据的操作在全局关系上进行,
    即关系如何分片对用户是透明的。

复制透明:

用户不用关心数据库在网络中各个节点的复制情况,被复制的数据的更新都由系统自动完成

位置透明:

用户不必知道所操作的数据放在何处,即数据分配到哪个或哪些站点存储对用户是透明的。

逻辑透明:

是最低层次的透明性,该透明性提供数据到局部数据库的映像
    即用户不必关心局部DBMs支持哪种数据模型、使用哪种数据操纵语言,
    数据模型和操纵语言的转换是由系统完成的。

数据分布(也称分片)技术,主要用于构建数据索引,是实现“导航”功能的关键技术。

数据分布的本质是,将原数据集划分为多个数据子集,以存储到不同的地方,在一定程度上体现了数据的可用性和可靠性(一个存储节点故障,只影响该存储节点的数据)。

在实际情况下,仅考虑数据分片,其实是无法真正应用到生产环境的。

因为,故障导致数据丢失和不可用是很常见的情况。

因此,在进行分布式数据存储设计时,通常会考虑对数据进行备份,以提高数据的可用性和可靠性,而实现数据备份的关键技术就是“数据复制技术”。

3 数据库分片后也带来一些挑战

分片带来了许多挑战:

数据分区:决定如何跨多个分片对数据进行分区可能是一个挑战,因为它需要在数据接近度和数据均匀分布之间找到平衡以避免某一片太热,其他分片无流量。

故障处理:如果关键节点发生故障并且没有足够的分片来承载负载,如何在不停机的情况下在新节点上获取数据?

查询复杂性:应用程序代码与数据分片逻辑耦合,需要来自多个节点的数据的查询需要重新联接。

数据一致性:确保跨多个分片的数据一致性可能是一个挑战,因为它需要协调跨分片的数据更新。
当同时进行更新时,这可能特别困难,因为可能需要解决不同写入之间的冲突。

弹性可扩展性:随着数据量或查询数量的增加,可能需要向数据库添加其他分片。
这可能是一个复杂的过程,不可避免地会出现停机,需要手动过程在所有分片之间均匀地重新定位数据。

4 小结

常见问题规避

缓存穿透   大量访问redis不存在的key
    布隆过滤器
缓存雪崩  大量key之前存在,但是同时失效了
    增加随机过期策略,不要同时过期
缓存击穿 一些热点key失效了

热点key需要永久有效,如果需要重新设置热点key,只允许一个数据库连接去操作数据库,其他的等待完成后再进行操作

技术大多是一把双刃剑,有优势的时候,通常也意味着有其劣势。

了解这种情况,并在适当的场景使用对应的技术,才能真正的解决问题。

目录
相关文章
|
6月前
|
SQL Oracle 关系型数据库
这个错误可能是由于在尝试读取分区表时出现了问题
这个错误可能是由于在尝试读取分区表时出现了问题
63 1
|
13天前
|
存储 缓存 监控
多级缓存有哪些级别?
【10月更文挑战第24天】多级缓存有哪些级别?
25 1
|
6月前
|
canal 缓存 NoSQL
【后端面经】【缓存】33|缓存模式:缓存模式能不能解决缓存一致性问题?-03 Refresh Ahead + SingleFlight + 删除缓存 + 延迟双删
【5月更文挑战第11天】Refresh Ahead模式通过CDC异步刷新缓存,但面临缓存一致性问题,可借鉴Write Back策略解决。SingleFlight限制并发加载,减少数据库压力,适合热点数据。删除缓存模式在更新数据库后删除缓存,一致性问题源于读写线程冲突。延迟双删模式两次删除,理论上减少不一致,但可能降低缓存命中率。选用模式需权衡优劣,延迟双删在低并发下较优。装饰器模式可用于实现多种缓存模式,无侵入地增强现有缓存系统。
124 2
|
6月前
|
存储 Kubernetes 调度
K8S常见的持久化(存储)方案用法详解
K8S常见的持久化(存储)方案用法详解
561 3
|
存储 缓存 NoSQL
Redis第一讲:相关的基础知识/数据类型/缓存的过期策略/双写一致性/内存存储和持久化
Redis第一讲:相关的基础知识/数据类型/缓存的过期策略/双写一致性/内存存储和持久化
|
存储 关系型数据库 API
应用PMDK修改WAL操作使之适配持久化内存
应用PMDK修改WAL操作使之适配持久化内存
122 0
|
SQL 存储 缓存
浅析缓存读写策略
随着我们业务量的增长,系统面对的压力也陡然上升,大量的读写请求到数据库往往会伴随着各式各样的问题,可能仅仅是一条慢SQL,就有可能拖垮整个系统服务。通常这个时候,我们除了做数据库的读写分离架构,还会对数据库进行分库分表。但是可能有些一成不变或者极少时间触发变更的数据,像类目、类目属性等,大量的针对类目维度的读数据库也会给数据库带来各种压力,通常会以NoSql数据库与关系型数据库互相搭配的方式,以用来更好的服务与我们的业务发展。
272 0
浅析缓存读写策略
|
存储 缓存 分布式计算
RDD 的缓存-缓存级别 | 学习笔记
快速学习 RDD 的缓存-缓存级别
315 0
RDD 的缓存-缓存级别 | 学习笔记
|
数据采集 缓存 分布式计算
RDD 的缓存_缓存的意义_过程代码 | 学习笔记
快速学习 RDD 的缓存_缓存的意义_过程代码
RDD 的缓存_缓存的意义_过程代码 | 学习笔记