![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Redis入门完整教程
文章平均质量分 83
Lee达森
keep learning...
展开
-
Redis入门完整教程:info系统状态说明
14.1.1 命令说明info命令的使用方法有以下三种:·info:部分Redis系统状态统计信息。·info all:全部Redis系统状态统计信息。·info section:某一块的系统状态统计信息,其中section可以忽略大小写。例如,只对Redis的内存相关统计比较感兴趣,可以执行info memory,此时section=memory,下面是info memory的结果:127.0.0.1:6379> info memory# Memoryused_memory:52092原创 2022-07-09 23:26:46 · 1685 阅读 · 0 评论 -
Redis入门完整教程:客户端上报
客户端的耗时、值范围、异常对于开发人员发现定位自身Redis使用问题至关重要,这些指标是了解Redis客户端运行状态的关键。本节将介绍CacheCloud提供的一个Java客户端上报功能,可以将上述信息进行可视化展示,本节内容包括:客户端上报整体设计、Jedis核心代码修改、带上报功能的客户端、CacheCloud客户端统计。13.7.1 客户端上报整体设计1)在Jedis上做二次开发,对Jedis的每个命令产生的耗时、返回value的大小、是否产生异常进行拦截和统计,修改本身对Jedis源码原创 2022-07-09 23:22:05 · 442 阅读 · 0 评论 -
Redis入门完整教程:CacheCloud运维功能
13.6 运维功能CacheCloud作为Redis的运维工具,包含了Redis日常运维的常用功能,本节将对如下功能进行介绍:1)应用运维:Redis节点的上下线、手动故障转移、配置管理、扩容等。2)接入已存在的Redis:将已经存在的Redis接入到CacheCloud。3)Redis配置管理:对Redis配置进行模板化管理。4)迁移工具:实现Redis Standalone、Redis Sentinel、Redis Cluster、AOF、RDB之间数据迁移。5)监控报警:机器、应用、原创 2022-07-09 23:19:17 · 2110 阅读 · 0 评论 -
Redis入门完整教程:CacheCloud用户功能
当客户端接入应用后,开发者希望看到一些相关统计信息,本节将对CacheCloud中的一些功能进行详细介绍,如应用统计信息、实例列表、应用详情、命令分析、命令执行、慢查询、应用拓扑等。13.5.1 应用统计信息“应用统计信息”选项卡,如图13-21和图13-22所示,包含如下三个区域:·全局信息:展示了应用的全局信息,包括内存使用率、连接数、主从节点数、命中率、对象数、当前状态及分布的机器节点数。·命令统计:展示了当前应用执行最频繁的5个命令的分布情况。·统计报表:展示了每分钟命令次数、命原创 2022-07-09 23:10:46 · 234 阅读 · 0 评论 -
Redis入门完整教程:CacheCloud接入应用
为CacheCloud添加机器资源后,可以利用自动化部署功能部署Redis应用,这是自动化部署Redis的基础。本节将利用CacheCloud自动化部署一个应用,并介绍开发人员如何通过CacheCloud客户端实现对Redis的使用。注意在CacheCloud中,Redis Standalone、Redis Sentinel、Redis Cluster统一称为应用,后面读者将看到开发者只需要一个应用id,就可以实现Redis节点的获取,完成客户端的正常调用。13.4.1 总体流程Cache原创 2022-07-09 23:08:13 · 540 阅读 · 0 评论 -
Redis入门完整教程:CacheCloud快速部署
13.2.1 CacheCloud环境需求安装部署CacheCloud需要以下环境:·JDK7+:CacheCloud使用Java语言开发,并使用了JDK7的一些特性。·Maven3:CacheCloud使用Maven3作为开发构建工具。·MySQL5.5+:CacheCloud需要Redis的相关元信息进行持久化。·Redis:CacheCloud支持对2.8以上版本的Redis,但建议读者使用Redis3.0+。注意上述JDK指的是Oracle JDK,如果是Open JDK会存在错误。原创 2022-07-09 23:03:32 · 841 阅读 · 0 评论 -
Redis入门完整教程:CacheCloud是什么?
如果让你去运维大规模的Redis节点,例如数千个Redis节点、数百台机器、数百个业务支撑,会遇到什么问题吗?很明显就是缺少一个好的可视化运维平台。本节首先分析如果没有好的运维平台可能存在的问题,接着介绍Redis开源私有云平台CacheCloud。13.1.1 现有问题1.部署成本我们在第9章和第10章详细讲解了Redis Sentinel和Redis Cluster的安装、配置、部署、运维。以Redis Cluster为例子,虽然Redis的作者开发了redis-trib.rb这样的工具帮原创 2022-07-09 23:01:44 · 463 阅读 · 0 评论 -
Redis入门完整教程:寻找热点key
热门新闻事件或商品通常会给系统带来巨大的流量,对存储这类信息的Redis来说却是一个巨大的挑战。以Redis Cluster为例,它会造成整体流量的不均衡,个别节点出现OPS过大的情况,极端情况下热点key甚至会超过Redis本身能够承受的OPS,因此寻找热点key对于开发和运维人员非常重要。下面就从四个方面来分析热点key。1.客户端客户端其实是距离key“最近”的地方,因为Redis命令就是从客户端发出的,例如在客户端设置全局字典(key和调用次数),每次调用Redis命令时,使用这个字原创 2022-07-09 23:00:15 · 1550 阅读 · 0 评论 -
Redis入门完整教程:处理bigkey
bigkey是指key对应的value所占的内存空间比较大,例如一个字符串类型的value可以最大存到512MB,一个列表类型的value最多可以存储232-1个元素。如果按照数据结构来细分的话,一般分为字符串类型bigkey和非字符串类型bigkey。·字符串类型:体现在单个value值很大,一般认为超过10KB就是bigkey,但这个值和具体的OPS相关。·非字符串类型:哈希、列表、集合、有序集合,体现在元素个数过多。bigkey无论是空间复杂度和时间复杂度都不太友好,下面我们将介绍它原创 2022-07-09 22:57:26 · 733 阅读 · 0 评论 -
Redis入门完整教程:安全的Redis
2015年11月,全球数万个Redis节点遭受到了攻击,所有数据都被清除了,只有一个叫crackit的键存在,这个键的值很像一个公钥,如下所示。127.0.0.1:6379> get crackit"\n\n\nssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAsGWAoHYwBcnAkPaGZ565wPQ0Ap3K7zrf2v9pHPSqW+n8WqsbS+xNpvvcgeNT/fYYbnkUit11RUiMCzs5FUSI1LRthwt4yvpMMbNnEX6J/0W/0n原创 2022-07-09 22:55:04 · 1574 阅读 · 0 评论 -
Redis入门完整教程:flushall/flushdb误操作
Redis的flushall/flushdb命令可以做数据清除,对于Redis的开发和运维人员有一定帮助,然而一旦误操作,它的破坏性也是很明显的。怎么才能快速恢复数据,让损失达到最小呢?本节我们将结合之前学习的Redis相关知识进行分析,最后给出一个合理的方案。注意为了方便说明,下文中除了AOF文件中的flushall/flushdb以外,其他所有的flushall/flushdb都用flush代替。假设进行flush操作的Redis是一对主从结构的主节点,其中键值对的个数是100万,每秒写原创 2022-07-08 21:58:20 · 1907 阅读 · 0 评论 -
Redis入门完整教程:Linux配置优化
通常来看,Redis开发和运维人员更加关注的是Redis本身的一些配置优化,例如AOF和RDB的配置优化、数据结构的配置优化等,但是对于操作系统是否需要针对Redis做一些配置优化不甚了解或者不太关心。然而事实证明一个良好的系统操作配置能够为Redis服务良好运行保驾护航。在第1章我们提到过,Redis的作者对于Windows操作系统并不兴趣,目前大部分公司都会将Web服务器、数据库服务器等部署在Linux操作系统上,Redis也不例外,所以接下来介绍Linux操作系统如何优化Redis。12.原创 2022-07-08 20:02:23 · 398 阅读 · 0 评论 -
Redis入门完整教程:热点key重建优化
开发人员使用“缓存+过期时间”的策略既可以加速数据读写,又保证数据的定期更新,这种模式基本能够满足绝大部分需求。但是有两个问题如果同时出现,可能就会对应用造成致命的危害:·当前key是一个热点key(例如一个热门的娱乐新闻),并发量非常大。·重建缓存不能在短时间完成,可能是一个复杂计算,例如复杂的SQL、多次IO、多个依赖等。在缓存失效的瞬间,有大量线程来重建缓存(如图11-16所示),造成后端负载加大,甚至可能会让应用崩溃。要解决这个问题也不是很复杂,但是不能为了解决这个问题给系统带来原创 2022-07-08 19:58:37 · 645 阅读 · 0 评论 -
Redis入门完整教程:雪崩优化
图11-14描述了什么是缓存雪崩:由于缓存层承载着大量请求,有效地保护了存储层,但是如果缓存层由于某些原因不能提供服务,于是所有的请求都会达到存储层,存储层的调用量会暴增,造成存储层也会级联宕机的情况。缓存雪崩的英文原意是stampeding herd(奔逃的野牛),指的是缓存层宕掉后,流量会像奔逃的野牛一样,打向后端存储。预防和解决缓存雪崩问题,可以从以下三个方面进行着手。1)保证缓存层服务高可用性。和飞机都有多个引擎一样,如果缓存层设计成高可用的,即使个别节点、个别机器、甚至是机房宕掉,依然原创 2022-07-08 19:56:30 · 162 阅读 · 0 评论 -
Redis入门完整教程:无底洞优化
2010年,Facebook的Memcache节点已经达到了3000个,承载着TB级别的缓存数据。但开发和运维人员发现了一个问题,为了满足业务要求添加了大量新Memcache节点,但是发现性能不但没有好转反而下降了,当时将这种现象称为缓存的“无底洞”现象。那么为什么会产生这种现象呢,通常来说添加节点使得Memcache集群性能应该更强了,但事实并非如此。键值数据库由于通常采用哈希函数将key映射到各个节点上,造成key的分布与业务无关,但是由于数据量和访问量的持续增长,造成需要添加大量节点做水原创 2022-07-08 19:55:11 · 247 阅读 · 0 评论 -
Redis入门完整教程:穿透优化
缓存穿透是指查询一个根本不存在的数据,缓存层和存储层都不会命中,通常出于容错的考虑,如果从存储层查不到数据则不写入缓存层,如图11-3所示整个过程分为如下3步:1)缓存层不命中。2)存储层不命中,不将空结果写回缓存。3)返回空结果。缓存穿透将导致不存在的数据每次请求都要到存储层去查询,失去了缓存保护后端存储的意义。缓存穿透问题可能会使后端存储负载加大,由于很多后端存储不具备高并发性,甚至可能造成后端存储宕掉。通常可以在程序中分别统计总调用数、缓存层命中数、存储层命中数,如果发现大量存储层原创 2022-07-08 19:51:31 · 102 阅读 · 0 评论 -
Redis入门完整教程:缓存更新策略
缓存中的数据通常都是有生命周期的,需要在指定时间后被删除或更新,这样可以保证缓存空间在一个可控的范围。但是缓存中的数据会和数据源中的真实数据有一段时间窗口的不一致,需要利用某些策略进行更新。下面将分别从使用场景、一致性、开发人员开发/维护成本三个方面介绍三种缓存的更新策略。1.LRU/LFU/FIFO算法剔除使用场景。剔除算法通常用于缓存使用量超过了预设的最大值时候,如何对现有的数据进行剔除。例如Redis使用maxmemory-policy这个配置作为内存最大值后对于数据的剔除策略。一致原创 2022-07-08 19:49:41 · 1234 阅读 · 0 评论 -
Redis入门完整教程:缓存的收益和成本
图11-1左侧为客户端直接调用存储层的架构,右侧为比较典型的缓存层+存储层架构,下面分析一下缓存加入后带来的收益和成本。收益如下:·加速读写:因为缓存通常都是全内存的(例如Redis、Memcache),而存储层通常读写性能不够强悍(例如MySQL),通过缓存的使用可以有效地加速读写,优化用户体验。·降低后端负载:帮助后端减少访问量和复杂计算(例如很复杂的SQL语句),在很大程度降低了后端的负载。 成本如下:·数据不一致性:缓存层和存储层的数据存在着一定时间窗口的不一致性,时间窗口跟更新策原创 2022-07-08 12:34:44 · 625 阅读 · 1 评论 -
Redis入门完整教程:集群运维
Redis集群由于自身的分布式特性,相比单机场景在开发和运维方面存在一些差异。本节我们关注于常见的问题进行分析定位。10.7.1 集群完整性为了保证集群完整性,默认情况下当集群16384个槽任何一个没有指派到节点时整个集群不可用。执行任何键命令返回(error)CLUSTERDOWNHash slot not served错误。这是对集群完整性的一种保护措施,保证所有的槽都指派给在线的节点。但是当持有槽的主节点下线时,从故障发现到自动完成转移期间整个集群是不可用状态,对于大多数业务无法容忍这原创 2022-07-07 21:54:20 · 932 阅读 · 0 评论 -
Redis入门完整教程:故障转移
Redis集群自身实现了高可用。高可用首先需要解决集群部分失败的场景:当集群内少量节点出现故障时通过自动故障转移保证集群可以正常对外提供服务。本节介绍故障转移的细节,分析故障发现和替换故障节点的过程。10.6.1 故障发现当集群内某个节点出现问题时,需要通过一种健壮的方式保证识别出节点是否发生了故障。Redis集群内节点通过ping/pong消息实现节点通信,消息不但可以传播节点槽信息,还可以传播其他状态如:主从状态、节点故障等。因此故障发现也是通过消息传播机制实现的,主要环节包括:主观下原创 2022-07-07 21:50:13 · 2002 阅读 · 0 评论 -
Redis入门完整教程:请求路由
目前我们已经搭建好Redis集群并且理解了通信和伸缩细节,但还没有使用客户端去操作集群。Redis集群对客户端通信协议做了比较大的修改,为了追求性能最大化,并没有采用代理的方式而是采用客户端直连节点的方式。因此对于希望从单机切换到集群环境的应用需要修改客户端代码。本节我们关注集群请求路由的细节,以及客户端如何高效地操作集群。10.5.1 请求重定向在集群模式下,Redis接收任何键相关命令时首先计算键对应的槽,再根据槽找出所对应的节点,如果节点是自身,则处理键命令;否则回复MOVED重定向错误原创 2022-07-07 21:42:36 · 772 阅读 · 0 评论 -
Redis入门完整教程:集群伸缩
10.4.1 伸缩原理Redis集群提供了灵活的节点扩容和收缩方案。在不影响集群对外服务的情况下,可以为集群添加节点进行扩容也可以下线部分节点进行缩容,如图10-16所示。从图10-16看出,Redis集群可以实现对节点的灵活上下线控制。其中原理可抽象为槽和对应数据在不同节点之间灵活移动。首先来看我们之前搭建的集群槽和数据与节点的对应关系,如图10-17所示。 三个主节点分别维护自己负责的槽和对应的数据,如果希望加入1个节点实现集群扩容时,需要通过相关命令把一部分槽和数据迁移给新节点,如图1原创 2022-07-07 21:36:19 · 573 阅读 · 0 评论 -
Redis入门完整教程:节点通信
10.3.1 通信流程在分布式存储中需要提供维护节点元数据信息的机制,所谓元数据是指:节点负责哪些数据,是否出现故障等状态信息。常见的元数据维护方式分为:集中式和P2P方式。Redis集群采用P2P的Gossip(流言)协议,Gossip协议工作原理就是节点彼此不断通信交换信息,一段时间后所有的节点都会知道集群完整的信息,这种方式类似流言传播,如图10-12所示。通信过程说明:1)集群中的每个节点都会单独开辟一个TCP通道,用于节点之间彼此通信,通信端口号在基础端口上加10000。2)每个原创 2022-07-07 21:30:38 · 584 阅读 · 0 评论 -
Redis入门完整教程:搭建集群
介绍完Redis集群分区规则之后,下面我们开始搭建Redis集群。搭建集群工作需要以下三个步骤:1)准备节点。2)节点握手。3)分配槽。 10.2.1 准备节点Redis集群一般由多个节点组成,节点数量至少为6个才能保证组成完整高可用的集群。每个节点需要开启配置cluster-enabled yes,让Redis运行在集群模式下。建议为集群内所有节点统一目录,一般划分三个目录:conf、data、log,分别存放配置、数据和日志相关文件。把6个节点配置统一放在conf目录原创 2022-07-07 20:33:00 · 783 阅读 · 0 评论 -
Redis入门完整教程:数据分布
10.1.1 数据分布理论分布式数据库首先要解决把整个数据集按照分区规则映射到多个节点的问题,即把数据集划分到多个节点上,每个节点负责整体数据的一个子集。如图10-1所示。需要重点关注的是数据分区规则。常见的分区规则有哈希分区和顺序分区两种,表10-1对这两种分区规则进行了对比。 由于Redis Cluster采用哈希分区规则,这里我们重点讨论哈希分区,常见的哈希分区规则有几种,下面分别介绍。1.节点取余分区使用特定的数据,如Redis的键或用户ID,再根据节点数量N使用公式:hash(原创 2022-07-07 20:29:19 · 207 阅读 · 0 评论 -
Redis入门完整教程:客户端连接
通过前面的学习,相信读者对Redis Sentinel有了一定的了解,本节将介绍应用方如何正确地连接Redis Sentinel。有人会说这有什么难的,已经知道了主节点的ip地址和端口,用对应编程语言的客户端连接主节点不就可以了吗?但试想一下,如果这样使用客户端,客户端连接Redis Sentinel和主从复制的Redis又有什么区别呢,如果主节点挂掉了,虽然Redis Sentinel可以完成故障转移,但是客户端无法获取这个变化,那么使用Redis Sentinel的意义就不大了,所以各个语言原创 2022-07-07 20:26:14 · 2581 阅读 · 0 评论 -
Redis入门完整教程:哨兵API
Sentinel节点是一个特殊的Redis节点,它有自己专属的API,本节将对其进行介绍。为了方便演示,以图9-21进行说明:Sentinel节点集合监控着两组主从模式的Redis数据节点。1.sentinel masters展示所有被监控的主节点状态以及相关的统计信息,例如: 2.sentinel master展示指定的主节点状态以及相关的统计信息,例如:3.sentinel slaves展示指定...原创 2022-07-07 20:20:52 · 191 阅读 · 0 评论 -
Redis入门完整教程:哨兵的安装和部署
上一节介绍了Redis Sentinel的基本架构,本节将介绍如何安装和部署Redis Sentinel。9.2.1 部署拓扑结构下面将以3个Sentinel节点、1个主节点、2个从节点组成一个RedisSentinel进行说明,拓扑结构如图9-13所示。具体的物理部署如表9-2所示。 9.2.2 部署Redis数据节点9.1节提到过,Redis Sentinel中Redis数据节点没有做任何特殊配置,按照之前章节介绍的方法启动就可以,下面以一个比较简单的配置进行说明。1.启动主节点配置:原创 2022-07-06 23:56:39 · 1455 阅读 · 0 评论 -
Redis入门完整教程:哨兵基本概念
9.1 基本概念由于对Redis的许多概念都有不同的名词解释,所以在介绍RedisSentinel之前,先对几个名词进行说明,这样便于在后面的介绍中达成一致,如表9-1所示。 Redis Sentinel是Redis的高可用实现方案,在实际的生产环境中,对提高整个系统的高可用性是非常有帮助的,本节首先会回顾主从复制模式下故障处理可能产生的问题,而后引出高可用的概念,最后重点分析RedisSentinel的基本架构、优势,以及是如何实现高可用的。9.1.1 主从复制的问题Redis的主从复制原创 2022-07-06 23:52:24 · 111 阅读 · 0 评论 -
Redis入门完整教程:内存优化
Redis所有的数据都在内存中,而内存又是非常宝贵的资源。如何优化内存的使用一直是Redis用户非常关注的问题。本节深入到Redis细节中,探索内存优化的技巧。8.3.1 redisObject对象Redis存储的所有值对象在内部定义为redisObject结构体,内部结构如图8-6所示。Redis存储的数据都使用redisObject来封装,包括string、hash、list、set、zset在内的所有数据类型。理解redisObject对内存优化非常有帮助,下面针对每个字段做详细说明:原创 2022-07-06 23:46:10 · 1006 阅读 · 0 评论 -
Redis入门完整教程:内存管理
Redis主要通过控制内存上限和回收策略实现内存管理,本节将围绕这两个方面来介绍Redis如何管理内存。8.2.1 设置内存上限Redis使用maxmemory参数限制最大可用内存。限制内存的目的主要有:·用于缓存场景,当超出内存上限maxmemory时使用LRU等删除策略释放空间。·防止所用内存超过服务器物理内存。需要注意,maxmemory限制的是Redis实际使用的内存量,也就是used_memory统计项对应的内存。由于内存碎片率的存在,实际消耗的内存可能会比maxmemory原创 2022-07-06 23:36:26 · 826 阅读 · 0 评论 -
Redis入门完整教程:内存消耗
理解Redis内存,首先需要掌握Redis内存消耗在哪些方面。有些内存消耗是必不可少的,而有些可以通过参数调整和合理使用来规避内存浪费。内存消耗可以分为进程自身消耗和子进程消耗。8.1.1 内存使用统计首先需要了解Redis自身使用内存的统计数据,可通过执行info memory命令获取内存相关指标。读懂每个指标有助于分析Redis内存使用情况,表8-1列举出内存统计指标和对应解释。 需要重点关注的指标有:used_memory_rss和used_memory以及它们的比值mem_frag原创 2022-07-06 23:34:29 · 1056 阅读 · 0 评论 -
Redis入门完整教程:阻塞的外在原因
排查Redis自身原因引起的阻塞原因之后,如果还没有定位问题,需要排查是否由外部原因引起。围绕以下三个方面进行排查:·CPU竞争·内存交换·网络问题7.3.1 CPU竞争CPU竞争问题如下:·进程竞争:Redis是典型的CPU密集型应用,不建议和其他多核CPU密集型服务部署在一起。当其他进程过度消耗CPU时,将严重影响Redis吞吐量。可以通过top、sar等命令定位到CPU消耗的时间点和具体进程,这个问题比较容易发现,需要调整服务之间部署结构。·绑定CPU:部署Redis时为了充分原创 2022-07-06 23:24:41 · 455 阅读 · 0 评论 -
Redis入门完整教程:阻塞内在原因
定位到具体的Redis节点异常后,首先应该排查是否是Redis自身原因导致,围绕以下几个方面排查:·API或数据结构使用不合理。·CPU饱和的问题。·持久化相关的阻塞。7.2.1 API或数据结构使用不合理通常Redis执行命令速度非常快,但也存在例外,如对一个包含上万个元素的hash结构执行hgetall操作,由于数据量比较大且命令算法复杂度是O(n),这条命令执行速度必然很慢。这个问题就是典型的不合理使用API和数据结构。对于高并发的场景我们应该尽量避免在大对象上执行算法复杂度超过原创 2022-07-06 23:22:37 · 223 阅读 · 0 评论 -
Redis入门完整教程:Redis的噩梦:阻塞
Redis是典型的单线程架构,所有的读写操作都是在一条主线程中完成的。当Redis用于高并发场景时,这条线程就变成了它的生命线。如果出现阻塞,哪怕是很短时间,对于我们的应用来说都是噩梦。导致阻塞问题的场景大致分为内在原因和外在原因:·内在原因包括:不合理地使用API或数据结构、CPU饱和、持久化阻塞等。·外在原因包括:CPU竞争、内存交换、网络问题等。本章我们聚焦于Redis阻塞问题,通过学习本章可掌握快速定位和解决Redis阻塞的思路和技巧。7.1 发现阻塞当Redis阻塞时,线上应原创 2022-07-06 23:21:18 · 232 阅读 · 0 评论 -
Redis入门完整教程:开发与运维中的问题
理解了复制原理之后,本节我们重点分析基于复制的应用场景。通过复制机制,数据集可以存在多个副本(从节点)。这些副本可以应用于读写分离、故障转移(failover)、实时备份等场景。但是在实际应用复制功能时,依然有一些坑需要跳过。6.4.1 读写分离对于读占比较高的场景,可以通过把一部分读流量分摊到从节点(slave)来减轻主节点(master)压力,同时需要注意永远只对主节点执行写操作,如图6-19所示。当使用从节点响应读请求时,业务端可能会遇到如下问题:·复制数据延迟。·读到过期数据。原创 2022-07-06 23:19:41 · 196 阅读 · 0 评论 -
Redis入门完整教程:复制原理
6.3.1 复制过程在从节点执行slaveof命令后,复制过程便开始运作,下面详细介绍建立复制的完整流程,如图6-7所示。从图中可以看出复制过程大致分为6个过程:1)保存主节点(master)信息。执行slaveof后从节点只保存主节点的地址信息便直接返回,这时建立复制流程还没有开始,在从节点6380执行info replication可以看到如下信息:master_host:127.0.0.1master_port:6379master_link_status:down从统计信息可以看原创 2022-07-05 21:32:55 · 1649 阅读 · 0 评论 -
Redis入门完整教程:复制拓扑
Redis的复制拓扑结构可以支持单层或多层复制关系,根据拓扑复杂性可以分为以下三种:一主一从、一主多从、树状主从结构,下面分别介绍。1.一主一从结构一主一从结构是最简单的复制拓扑结构,用于主节点出现宕机时从节点提供故障转移支持(如图6-4所示)。当应用写命令并发量较高且需要持久化时,可以只在从节点上开启AOF,这样既保证数据安全性同时也避免了持久化对主节点的性能干扰。但需要注意的是,当主节点关闭持久化功能时,如果主节点脱机要避免自动重启操作。因为主节点之前没有开启持久化功能自动重启后数据集为原创 2022-07-05 21:27:32 · 258 阅读 · 0 评论 -
Redis入门完整教程:复制配置
6.1.1 建立复制参与复制的Redis实例划分为主节点(master)和从节点(slave)。默认情况下,Redis都是主节点。每个从节点只能有一个主节点,而主节点可以同时具有多个从节点。复制的数据流是单向的,只能由主节点复制到从节点。配置复制的方式有以下三种:1)在配置文件中加入slaveof{masterHost}{masterPort}随Redis启动生效。2)在redis-server启动命令后加入--slaveof{masterHost}{masterPort}生效。3)直接使原创 2022-07-05 21:26:08 · 226 阅读 · 0 评论 -
Redis入门完整教程:问题定位与优化
Redis持久化功能一直是影响Redis性能的高发地,本节我们结合常见的持久化问题进行分析定位和优化。5.3.1 fork操作当Redis做RDB或AOF重写时,一个必不可少的操作就是执行fork操作创建子进程,对于大多数操作系统来说fork是个重量级错误。虽然fork创建的子进程不需要拷贝父进程的物理内存空间,但是会复制父进程的空间内存页表。例如对于10GB的Redis进程,需要复制大约20MB的内存页表,因此fork操作耗时跟进程总内存量息息相关,如果使用虚拟化技术,特别是Xen虚拟机原创 2022-07-05 21:23:45 · 757 阅读 · 0 评论