赞
踩
Redis 是一种内存数据结构存储,用作数据库、缓存和消息代理。它通常用于以下场景:
这些是一些常见的用例,但 Redis 也可以用于广泛的其他应用程序。
管道是 Redis 中的一项功能,它允许在单个请求中将多个命令发送到服务器,从而减少单个请求的开销。
在管道中,命令在客户端缓冲,并批量发送到服务器。然后,服务器处理命令并在单个响应中返回响应。这减少了每个命令的单独网络往返开销,从而提高了性能。
通过使用管道,可以减少完成一组命令的总时间,因为消除了为每个命令建立和拆除连接的开销。此外,管道还可以减少网络延迟,因为通过网络发送的数据总量减少了。
为了减轻这些影响,建议监控键值大小和 qps,并实施分片或分区技术以在多个 Redis 实例之间分配负载。此外,可能需要实施缓存或卸载技术来减少 Redis 上的负载,或者考虑为大密钥或高 qps 用例使用替代数据存储解决方案。
连接数:与 Redis 服务器的活动连接数,包括客户机和发布/订阅连接。
内存使用情况:Redis 使用的内存量,包括驻留集大小 (RSS) 和虚拟内存 (VM) 大小。
命令执行时间:执行 Redis 命令所花费的时间,包括平均、最小和最大所花费的时间。
密钥计数:Redis 中存储的密钥数,包括密钥总数和按数据库列出的密钥数。
延迟:Redis 的延迟,包括响应客户端请求所花费的时间。
正常运行时间:Redis 不间断运行的时间量。
发布/订阅消息:通过 Redis 发布/订阅的消息数。
从站同步:Redis 从站实例的同步状态,包括延迟和挂起写入次数。
总之,RDB 最适合备份和恢复方案,而 AOF 更适合持久性和持久性,尤其是在数据丢失不可接受的情况下。也可以同时使用 RDB 和 AOF,以平衡速度和耐用性。
要在 Redis Docker 容器中持久保存数据,您可以使用卷映射将 Redis 数据存储在主机文件系统上。方法如下:
1、启动 Redis 容器:
docker run --name my-redis -d redis
2、在主机上创建一个目录来存储 Redis 数据:
mkdir ~/redis-data
3、停止 Redis 容器:
docker stop my-redis
4、使用卷映射再次启动 Redis 容器:
docker run --name my-redis -d -v ~/redis-data:/data redis redis-server --appendonly yes
这将映射主机目录 '~/redis-data–appendonly yes标志启用 AOF 持久性,以便 Redis 将所有写入操作写入磁盘。
注意:Redis 数据将在重新启动 Redis 容器后保留,但如果重新启动主机或删除 Docker 容器,数据将丢失。为了防止数据丢失,您还可以使用数据卷容器来存储 Redis 数据。
字符串:Redis 字符串是二进制安全的,这意味着它们可以存储任何类型的数据,包括图像、序列化对象等
哈希:Redis 哈希是键值对的映射,类似于 Python 中的字典或 PHP 中的关联数组。
列表:Redis 列表是链表,可以存储多个元素并支持推送、弹出和修剪等操作。
集合:Redis 集是唯一元素的无序集合,可用于存储成员、执行集合操作(如并集和交集等)。
排序集:Redis 排序集是按分数排序的集,因此可以执行范围查询和其他操作。
位图:Redis 位图是可用于存储二进制数据(如标志或标志)并执行按位操作的位数组。
HyperLogLogs:Redis HyperLogLogs 是概率数据结构,用于计算具有少量内存的大型数据集中的唯一元素。
地理空间索引:Redis 地理空间索引 (GEO) 用于存储和检索位置数据,并执行基于位置的查询和距离计算等操作。
Redis 可以通过使用其 List 数据类型来实现简单队列,从而用作消息队列。方法如下:
LPUSH myqueue "message1"
LPOP myqueue
BLPOP myqueue 0
通过使用这些命令,Redis 可以用作简单的消息队列,可用于实现工作队列、任务队列和其他类型的队列。
注意:Redis 并非设计为功能齐全的消息代理,其性能特征和功能可能不适用于所有用例。如果您需要更高级的消息队列,请考虑使用专用的消息代理,例如 RabbitMQ 或 Apache Kafka。
一个 Redis 实例被指定为主实例,而一个或多个其他实例被指定为从实例。
主服务器接收所有写入请求,并在自己的数据集上执行这些写入。
主站还实时将其数据集复制到其从站,并在发生时发送所有写入操作。
从属服务器接收来自主站的更新,并将其应用于自己的数据集,使其与主站保持同步。
从站可用于为读取请求提供服务,这有助于分配读取负载并提高整体性能。
如果主站发生故障,可以提升其中一个从站来取代它,从而确保高可用性。新的主站将继续接收写入请求并将其数据复制到任何剩余的从站。
主从复制:如上所述,这涉及让一个或多个从站从主站接收实时更新,确保数据在发生故障时始终可用。
Redis Sentinel:这是一项特定于 Redis 的服务,可在主服务器发生故障时提供自动故障转移。它监控主站的运行状况,并在发生故障时自动提升其中一个从站取代其位置。
Redis 集群:这是一种分布式 Redis 部署,可跨多个节点自动分片数据,并在节点发生故障时提供自动故障转移。Redis 集群还提供内置的数据分区和分发机制,从而实现高性能和高可用性部署。
负载均衡:Redis 可以部署在负载均衡器后面,将传入请求分发到多个 Redis 实例,从而提高性能和可靠性。
Redis Sentinel 是 Redis 的监控和故障转移服务。它通过监控一个或多个 Redis 实例(称为“主实例”)以及一个或多个从属实例来工作。Sentinel 服务维护群集状态的视图,并可以自动检测和响应群集中的故障。
以下是它的工作原理:
监控:Sentinel 通过发送 PING 命令和监控响应时间来定期检查主站和从站的运行状况。如果主服务器无响应,Sentinel 会将其标记为“关闭”并开始故障转移过程。
选举:如果主设备被标记为关闭,Sentinel 将启动选举过程,以确定应将哪个从设备提升为新主服务器。这是通过考虑诸如主站和从站的最后已知状态,以及连接的客户端数量和每个从站上存储的数据量等因素来完成的。
提升:一旦选出了新的主节点,Sentinel 将通过执行 SLAVEOF 命令将其提升为主角色。然后,新的主服务器将接管为客户端请求提供服务。
通知:Sentinel 将通知客户端和其他哨兵新的主服务器,并更新其内部状态以反映新的集群配置。
Redis 集群是一项 Redis 功能,可在多个 Redis 节点之间提供数据自动分片,并在节点发生故障时自动故障转移和重新平衡。
以下是它的工作原理:
分片:Redis 集群将密钥空间划分为多个哈希槽,并将每个槽分配给集群中的特定节点。当客户端写入键值对时,Redis 集群会确定该键的哈希槽,并将写入路由到相应的节点。
复制:群集中的每个节点都维护其分配的哈希槽的副本,确保数据以冗余方式存储,并在节点发生故障时高度可用。
负载均衡:Redis 集群自动平衡节点间哈希槽的负载,确保集群始终高效运行。如果节点过载,Redis 集群会自动将哈希槽重新平衡到集群中的其他节点。
故障处理:Redis 集群可以自动检测和响应节点故障,提升其中一个副本作为新的主节点接管,并确保数据始终可用。即使在节点发生故障时,客户端也可以继续正常运行。
仲裁:Redis 集群使用基于仲裁的共识算法,其中大多数节点必须在进行更改之前就集群的状态达成一致。这可确保在少数节点脱机或遇到网络问题时不会发生脑裂情况。
主节点选择:如果主节点发生故障,Redis 集群将自动从剩余副本中选择新的主节点。这可确保群集中始终存在单一权威事实来源,避免出现裂脑情况。
网络分区处理:如果出现网络分区,Redis 集群将继续在分区的两端正常运行,但不允许发生冲突写入。解析分区后,Redis 集群会自动协调冲突数据,确保始终存储正确的数据。
Redis 集群至少需要 3 个主节点才能正常运行和高可用性。这是因为 Redis 集群使用基于仲裁的共识算法,其中大多数节点必须在进行更改之前就集群的状态达成一致。对于 3 个主节点,即使在单个节点发生故障的情况下,也始终有大多数节点可供决策。
Redis 集群中的插槽数量由集群配置决定,默认为 16384 个插槽。槽是映射到集群中特定 Redis 实例的哈希值范围,集群中的每个 Redis 实例负责存储和提供部分哈希槽的数据。
通过在集群中的所有实例之间均匀分布哈希槽,Redis 集群能够确保数据均匀分布,并且每个实例的负载大致相等。这有助于避免热点,并确保群集可以水平缩放。
当节点缺少插槽时,群集将自动启动插槽重新平衡过程,以将缺少的插槽重新分配到群集中的另一个节点。这有助于确保群集保持可用,并且可以继续为数据请求提供服务,即使群集中的某个节点遇到问题也是如此。
但是,在重新平衡过程完成之前,存储在缺失插槽中的数据将不可用。这可能会导致尝试访问存储在该槽中的数据的客户端出错或超时。为了最大程度地减少插槽重新平衡的影响,必须为群集配置适当数量的节点,并监视群集中的问题并及时解决这些问题。
在 Redis 集群中,每个密钥都分配给一个特定的插槽,然后映射到集群中的一个节点。将数据写入 Redis 时,客户端对密钥进行哈希处理以确定相应的槽,然后将写入操作转发到负责该槽的节点。这样,Redis 集群可以在集群中的所有节点上均匀分布数据,从而确保高性能和可扩展性。
Redis 将数据作为键值对存储在内存中,并可选择持久化到磁盘。Redis 支持的数据结构类型包括字符串、哈希、列表、集合、排序集和位图。数据结构存储在哈希表中,其中对键进行哈希处理以确定其值的内存位置。Redis 还可以使用内存映射文件在磁盘上存储大量数据。这允许快速访问内存中的数据,即使对于较大的数据集也能提供快速性能。
Redis集群中的槽位是用来存储数据的,一个Redis集群的总槽位数是固定的,通常为16384个槽位,每个节点负责一些槽位的数据存储,这些槽位的数量与总槽位数成一定比例,这样保证了各节点的负载平衡。所以各槽位与总槽位之间是有关系的,它们共同组成了Redis集群的数据存储结构。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。