




已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录1说明32Redis安装(含Sentinel)32.1安装步骤32.2目录介绍43客户端支持44数据结构54.1字符串(string)54.2列表(list)54.3集合(Set)64.4哈希(Hashes)64.5有序集合(Sorted sets)75持久化85.1RDB95.1.1优点95.1.2缺点95.1.3运行机制95.2AOF105.2.1优点105.2.2缺点105.2.3运行机制105.2.4AOF文件修复115.3RDB切换到AOF116主从复制126.1特点介绍126.2复制机制126.3部分重同步136.4配置147高可用157.1Sentinel157.1.1简介157.1.2特点介绍157.1.3主观下线/客观下线167.1.4自动故障转移167.1.5方案推荐177.1.6配置187.1.7开发197.2Keepalived198备份和容灾199附录199.1配置redis.conf说明199.2配置sentinel.conf说明239.3常见问题249.3.1内存分配策略249.4Redis命令集259.4.1关键字(Keys)259.4.2字符串(String)259.4.3哈希(Hashs)269.4.4列表(Lists)269.4.5集合(Sets)269.4.6有序集合( Sorted Sets)279.4.7发布/订阅(Pub/Sub)279.4.8事务(Transaction)279.4.9服务(Server)271 说明Redis目前最新版本是2.8.19,本文档以该版本为基础整理。官网网站:http:/redis.io推荐中文网站:/推荐中文技术网站:/2 Redis安装(含Sentinel)2.1 安装步骤1 下载Redishttp:/redis.io/download页面,下载最新版本.2 安装3 启动启动redissrc/redis-server ./redis.conf启动sentinelsrc/redis-server ./sentinel.conf -sentinel 启动sentinel。因sentinel没有自带日志输出配置项,说以需要启动时指定日志路径,如:nohup src/redis-server ./sentinel.conf -sentinel ./logs/sentinel.log &4 测试2.2 目录介绍3 客户端支持语言官方推荐产品ChiredisC#ServiceStack.RedisStackExchange.RedisC+官方无推荐客户端JavaJedisRedissonErlangEredisPerlRedisPHPPredis phpredisRubyredis-rb还有其它语言的客户端,这里不一一详细列出,具体见官网网站:http:/redis.io/clients4 数据结构4.1 字符串(string)字符串是一种最基本的Redis值类型。Redis字符串是二进制安全的,这意味着一个Redis字符串能包含任意类型的数据,例如: 一张JPEG格式的图片或者一个序列化的Ruby对象。一个字符串类型的值最多能存储512M字节的内容。命令示例:4.2 列表(list)Redis列表是简单的字符串列表,按照插入顺序排序。 你可以添加一个元素到列表的头部(左边)或者尾部(右边)。一个列表最多可以包含2的32次方减1个元素(4294967295,每个表超过40亿个元素)。访问头或尾部的速度比较快。命令示例:4.3 集合(Set)Redis集合是一个无序的字符串合集。你可以以O(1)的时间复杂度(无论集合中有多少元素时间复杂度都为常量)完成 添加,删除以及测试元素是否存在的操作。集合不允许相同成员存在,向集合中多次添加同一元素,在集合中最终只会存在一个此元素。支持服务端的集合运算,可以在很短的时间内完成合并(union),求交(intersection), 找出不同元素的操作。一个集合最多可以包含2的32次方减1个元素(4294967295,每个集合超过40亿个元素)。命令示例:4.4 哈希(Hashes)Redis Hashes是字符串字段和字符串值之间的映射,所以它们是完美的表示对象(eg:一个有名,姓,年龄等属性的用户)的数据类型。一个hash最多可以包含2的32次方减1个字段-值对(超过40亿)命令示例:4.5 有序集合(Sorted sets)Redis有序集合和Redis集合类似,是不包含相同字符串的合集。它们的差别是,每个有序集合的成员都关联着一个评分,这个评分用于把有序集合中的成员按最低分到最高分排列。使用有序集合,你可以非常快地(O(log(N))完成添加,删除和更新元素的操作。 因为元素是在插入时就排好序的,所以很快地通过评分(score)或者 位次(position)获得一个范围的元素。访问有序集合的中间元素同样也是非常快的,因此你可以使用有序集合作为一个没有重复成员的智能列表。 在这个列表中, 你可以轻易地访问任何你需要的东西: 有序的元素,快速的存在性测试,快速访问集合中间元素!命令示例:5 持久化Redis 提供了多种不同级别的持久化方式: RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)。 AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。 AOF 文件中的命令全部以 Redis 协议的格式来保存,新命令会被追加到文件的末尾。 Redis 还可以在后台对 AOF 文件进行重写(rewrite),使得 AOF 文件的体积不会超出保存数据集状态所需的实际大小。 Redis 还可以同时使用 AOF 持久化和 RDB 持久化。 在这种情况下, 当 Redis 重启时, 它会优先使用 AOF 文件来还原数据集, 因为 AOF 文件保存的数据集通常比 RDB 文件所保存的数据集更完整。 你甚至可以关闭持久化功能,让数据只在服务器运行时存在。5.1 RDB5.1.1 优点 RDB 是一个非常紧凑(compact)的文件,适合用于进行备份,灾难恢复(disaster recovery)。 RDB 可以最大化 Redis 的性能:父进程在保存 RDB 文件时唯一要做的就是 fork 出一个子进程,然后这个子进程就会处理接下来的所有保存工作,父进程无须执行任何磁盘 I/O 操作。 DB 在恢复大数据集时的速度比 AOF 的恢复速度要快5.1.2 缺点 保存数据时时间比较长,保存时间间隔较大,容易出现数据丢失。 Fork()子进程时间可能比较长(如果数据量大的话),这段时间,可能出现停止响应客户端请求。5.1.3 运行机制当 Redis 需要保存 dump.rdb 文件时, 服务器执行以下操作: Redis 调用 fork() ,同时拥有父进程和子进程。 子进程将数据集写入到一个临时 RDB 文件中。 当子进程完成对新 RDB 文件的写入时,Redis 用新 RDB 文件替换原来的 RDB 文件,并删除旧的 RDB 文件。5.2 AOF5.2.1 优点 数据不容易丢失,宕机是最多丢失1秒的数据。 AOF文件过大时,可以自动进行AOF文件重写。 AOF文件格式简单易懂,便于分析、修改等。5.2.2 缺点 AOF文件比较大。 AOF在采用fsync策略时,速度相对RDB慢。5.2.3 运行机制主要分三个步骤:1. 命令传播:Redis 将执行完的命令、命令的参数、命令的参数个数等信息发送到 AOF 程序中。2. 缓存追加:AOF 程序根据接收到的命令数据,将命令转换为网络通讯协议的格式,然后将协议内容追加到服务器的 AOF 缓存中。3. 文件写入和保存:AOF 缓存中的内容被写入到 AOF 文件末尾,如果设定的 AOF 保存条件被满足的话, fsync 函数或者 fdatasync 函数会被调用,将写入的内容真正地保存到磁盘中。Redis 目前支持三种 AOF 保存模式,它们分别是:l AOF_FSYNC_NO :不保存。l AOF_FSYNC_EVERYSEC :每一秒钟保存一次。l AOF_FSYNC_ALWAYS :每执行一个命令保存一次。5.2.4 AOF文件修复因宕机等原因会导致保存到AOF文件中的数据不完整,从而Redis无法加载AOF文件,这时可以使用Redis自动工具,修复AOF文件。命令:redis-check-aof5.3 RDB切换到AOF 在 Redis 2.2 或以上版本,可以在不重启的情况下,从 RDB 切换到 AOF。 6 主从复制6.1 特点介绍1、 Redis 使用异步复制。从 Redis 2.8 开始,从服务器会以每秒一次的频率向主服务器报告复制流(replication stream)的处理进度。2、 一个主服务器可以有多个从服务器。3、 不仅主服务器可以有从服务器, 从服务器也可以有自己的从服务器, 多个从服务器之间可以构成一个图状结构4、 复制功能不会阻塞主服务器: 即使有一个或多个从服务器正在进行初次同步, 主服务器也可以继续处理命令请求。5、 复制功能也不会阻塞从服务器:只要在redis.conf文件中进行了相应的设置, 即使从服务器正在进行初次同步, 服务器也可以使用旧版本的数据集来处理命令查询。6、 主从复制中,如果主服务没有开启持久化,不要设置为自动重启,否则数据会丢失。 7、 从 Redis 2.6 开始,从服务器支持只读模式,并且该模式为从服务器的默认模式。6.2 复制机制1、 无论是初次连接还是重新连接,当建立一个从服务器时, 从服务器都将向主服务器发送一个SYNC命令。2、 接到SYNC命令的主服务器将开始执行BGSAVE并在保存操作执行期间, 将所有新执行的写入命令都保存到一个缓冲区里面。3、 当BGSAVE执行完毕后,主服务器将执行保存操作所得的.rdb文件发送给从服务器,从服务器接收这个.rdb文件,并将文件中的数据载入到内存中。4、 之后主服务器会以 Redis 命令协议的格式,将写命令缓冲区中积累的所有内容都发送给从服务器。6.3 部分重同步从 Redis 2.8 开始,在网络连接短暂性失效之后,主从服务器可以尝试继续执行原有的复制进程(process),而不一定要执行完整重同步操作。这个特性需要主服务器为被发送的复制流创建一个内存缓冲区(in-memory backlog),并且主服务器和所有从服务器之间都记录一个复制偏移量(replication offset)和一个主服务器 ID (master run id),当出现网络连接断开时,从服务器会重新连接,并且向主服务器请求继续执行原来的复制进程: 如果从服务器记录的主服务器 ID 和当前要连接的主服务器的 ID 相同,并且从服务器记录的偏移量所指定的数据仍然保存在主服务器的复制流缓冲区里面,那么主服务器会向从服务器发送断线时缺失的那部分数据,然后复制工作可以继续执行。 否则的话,从服务器就要执行完整重同步操作。6.4 配置在从服务器配置文件redis.conf中增加:slaveof 6379当然, 你需要将代码中的 和 6379 替换成你的主服务器的 IP 和端口号。另外一种方法是调用 SLAVEOF 命令, 输入主服务器的 IP 和端口, 然后同步就会开始::6379 SLAVEOF 10086OK7 高可用7.1 Sentinel7.1.1 简介Redis Sentinel是Redis官方的高可用性解决方案,主要功能有: 监控(Monitoring): Redis Sentinel实时监控主服务器和从服务器运行状态。 提醒(Notification):当被监控的某个 Redis 服务器出现问题时, Redis Sentinel 可以向系统管理员发送通知,也可以通过 API 向其他程序发送通知。 自动故障转移(Automatic failover): 当一个主服务器不能正常工作时,Redis Sentinel 可以将一个从服务器升级为主服务器, 并对其他从服务器进行配置,让它们使用新的主服务器。当应用程序连接到 Redis 服务器时, Redis Sentinel会告之新的主服务器地址和端口。原主服务器恢复后,自动调整为从服务器。7.1.2 特点介绍 Redis Sentinel是一个分布式系统, 你可以在架构中运行多个Sentinel进程,这些进程通过相互通讯来判断一个主服务器是否断线,以及是否应该执行故障转移。 Redis至少需要1个Master和1个Slave。 Sentinel至少需要3个。 零手工干预并且短时间内进行M-S切换。 自动发现 Sentinel 和从服务器。 自动故障转移。7.1.3 主观下线/客观下线 主观下线:主观下线(Subjectively Down, 简称 SDOWN)指的是单个 Sentinel 实例对服务器做出的下线判断。 客观下线:指的是多个 Sentinel 实例在对同一个服务器做出 SDOWN 判断, 并且SENTINEL间互相交流之后,得出的服务器下线判断。 客观下线条件只适用于主服务器: 对于任何其他类型的 Redis 实例, Sentinel 在将它们判断为下线前不需要进行协商, 所以从服务器或者其他 Sentinel 永远不会达到客观下线条件。 只要一个 Sentinel 发现某个主服务器进入了客观下线状态, 这个 Sentinel 就可能会被其他 Sentinel 推选出, 并对失效的主服务器执行自动故障迁移操作。7.1.4 自动故障转移一次故障转移操作由以下步骤组成:1) 发现主服务器已经进入客观下线状态。2) 对我们的当前纪元进行自增,并尝试在这个纪元中当选。3) 如果当选失败,那么在设定的故障迁移超时时间的两倍之后,重新尝试当选。 如果当选成功,那么执行以下步骤。4) 选出一个从服务器,并将它升级为主服务器。5) 向被选中的从服务器发送SLAVEOFNOONE命令,让它转变为主服务器。6) 通过发布与订阅功能, 将更新后的配置传播给所有其他 Sentinel , 其他 Sentinel 对它们自己的配置进行更新。7) 向已下线主服务器的从服务器发送SLAVEOF命令, 让它们去复制新的主服务器。8) 当所有从服务器都已经开始复制新的主服务器时, 领头 Sentinel 终止这次故障迁移操作。7.1.5 方案推荐M代表Redis master服务。R代表Redis slave服务。C代表客户端应用S代表sentinel。Redis和sentinel建议在同一网段。7.1.6 配置以下是sentinel.conf配置信息:第一行配置指示 Sentinel 去监视一个名为mymaster的主服务器, 这个主服务器的 IP 地址为, 端口号为6379, 而将这个主服务器判断为失效至少需要2个 Sentinel 同意 (只要同意 Sentinel 的数量不达标,自动故障迁移就不会执行)。不过要注意, 无论你设置要多少个 Sentinel 同意才能判断一个服务器失效, 一个 Sentinel 都需要获得系统中多数(majority) Sentinel 的支持, 才能发起一次自动故障迁移, 并预留一个给定的配置纪元 (configuration Epoch ,一个配置纪元就是一个新主服务器配置的版本号)。示例:7.1.7 开发目前支持sentinel的客户端只有jedis(java客户端)。最小支持版本:V2.2.0,当前最新版本V2.6.2官网:/xetorthio/jedis/releases开发示例:7.2 Keepalived8 备份和容灾采用RDB持久化数据,RDB文件允许Redis运行中被复制,因此可以采用定时机制自动备份或容灾。9 附录9.1 配置redis.conf说明字段描述常规daemonize默认情况下,redis 不是在后台运行的,如果需要在后台运行,把该项的值更改为 yespidfile当redis在后台运行的时候,Redis默认会把pid文件放在/var/run/redis.pid,你可以配置到其他地址。当运行多个 redis 服务时,需要指定不同的 pid 文件和端口port指定redis运行的端口,默认是6379tcp-backlog此参数确定了TCP连接中已完成队列(完成三次握手之后)的长度, 当然此值必须不大于Linux系统定义的/proc/sys/net/core/somaxconn tcp_max_syn_backlog值,默认是511,而Linux的默认参数值是128。当系统并发量大并且客户端速度缓慢的时候,可以将这二个参数一起参考设定。timeout设置客户端连接时的超时时间,单位为秒。当客户端在这段时间内没有发出任何指令,那么关闭该连接;0表示永不超时。tcp-keepalive如果值非0,单位是秒,表示将周期性的使用SO_KEEPALIVE检测客户端是否还处于健康状态,避免服务器一直阻塞,官方给出的建议值是60S。loglevelRedis总共支持四个级别:debug、verbose、notice、warning。Debug:记录很多信息,用于开发和测试;Varbose:有用的信息,不像debug会记录那么多;Notice:普通的verbose,常用于生产环境;Warning:只有非常重要或者严重的信息会记录到日志;默认是notice级别。logfile设置log记录路径及名称,如:/opt/redis-2.8.19/logs/redis.log。如果设置为空,日志输出到standard output。如果是后台运行,同时设置为空,则日志保存在/dev/null文件中。databases默认值为16,默认数据库为0,数据库范围在0-(database-1)之间快照save保存数据库快照信息到磁盘,其对应的值有两个,比如save 300 10表示:300秒内至少有300个key被改变时,触发保存信息到磁盘的事件。默认配置:save 900 1save 300 10save 60 10000stop-writes-on-bgsave-error当持久化出现错误后,Redis是否依然进行继续进行工作默认yesrdbcompression持久化到RDB文件时,是否压缩,“yes”为压缩,“no”则反之默认:yesrdbchecksum读取和写入的时候是否支持CRC64校验,默认是开启的dbfilename本地持久化数据库文件名,默认值为dump.rdbdir本地持久化数据库存放路径包括rdb、aof数据文件。默认在工作目录的根目录 ./主从复制slaveof主从复制.设置该数据库为其他数据库的从数据库.slaveofmasterauth设置访问master服务器的密码slave-serve-stale-data当slave服务器和master服务器失去连接后,或者当数据正在复制传输的时候,如果此参数值设置“yes”,slave服务器可以继续接受客户端的请求,否则,会返回给请求的客户端如下信息“SYNC with master in progress”slave-read-only是否允许slave服务器节点只提供读服务默认:yesrepl-diskless-sync(官方还在测试)当slave初次接入master或原有复制无法继续时,master会将一份完整的RDB文件传递给slave。生成RDB文件有两中方式1、 Disk-backed:将RDB生成文件保存在磁盘上,再传递给slave。2、 Diskless:生成RDB文件,不存磁盘,直接通过socket传递给slave。采用Disk-backed,该值设置为 no采用Diskless,该值设置为 yesrepl-diskless-sync-delay(官方还在测试)复制采用Diskless,当多个slave都需要传递RDB时,只能一个一个处理,该值设置处理时间间隔。单位秒repl-ping-slave-periodSlave 发ping命令到master的时间间隔。单位秒默认10秒repl-timeout设置主库批量数据传输时间或者ping回复时间间隔,默认值是60秒;一定要确保 repl-timeout 大于 repl-ping-slave-periodrepl-disable-tcp-nodelay指定向slave同步数据时,是否禁用socket的NO_DELAY选项。若配置为“yes”,则禁用NO_DELAY,则TCP协议栈会合并小包统一发送,这样可以减少主从节点间的包数量并节省带宽,但会增加数据同步到slave的时间。若配置为“no”,表明启用NO_DELAY,则TCP协议栈不会延迟小包的发送时机,这样数据同步的延时会减少,但需要更大的带宽。通常情况下,应该配置为no以降低同步延时,但在主从节点间网络负载已经很高的情况下,可以配置为yes。repl-backlog-sizemaster中缓存slave端数据的缓存空间大小(该缓存称为:backlog)backlog越大,缓存数据越多,支持slave断开重连后进行部分同步的时间越长。默认配置:关闭repl-backlog-ttl当没有slave再连接到master时,backlog空间被释放的时间间隔(从最后一个slave断开链接开始算)。如果设置为0,则不释放backlog空间。slave-priority指定slave的优先级。在不只1个slave存在的部署环境下,当master宕机时,Redis Sentinel会将priority值最小的slave提升为master。需要注意的是,若该配置项为0,则对应的slave永远不会自动提升为master。min-slaves-to-writemin-slaves-max-lag如果少于N个slave连接,且延迟时间 利用LRU算法移除设置过过期时间的key (LRU:最近使用 Least Recently Used )2、allkeys-lru - 利用LRU算法移除任何key3、volatile-random - 移除设置过过期时间的随机key4、allkeys-random - remove a random key, any key 5、volatile-ttl - 移除即将过期的key(minor TTL)noeviction - 不移除任何可以,只是返回一个写错误默认:maxmemory-policy volatile-lrumaxmemory-samples每次进行淘汰的时候 会随机抽取3个key 从里面淘汰最不经常使用的(默认选项)AOFappendonly是否开启AOF持久化。YES:是,NO:否appendfilenameAOF文件名。默认appendonly.aofappendfsync# Redis支持三种同步AOF文件的策略:no: 不进行同步,系统去操作 . Faster.always: always表示每次有写操作都进行同步. Slow, Safest.everysec: 表示对写操作进行累积,每秒同步一次. Compromise.默认是everysec,按照速度和安全折中这是最好的。no-appendfsync-on-rewrite设置在rewrite的时候是否对新的写操作进行fsync。默认noYes:rewrite时不进行fsync操作(接受写数据,暂时存入内容;所以可能导致数据丢失)。No:进行fsync操作。(可能导致写操作等待时间过长)需要验证是否存在fsync阻止情况Redis数据内存大小与AOF文件大小关系。auto-aof-rewrite-percentageRewrite时满足的百分比。Redis支持自动触发rewrite AOF文件操作。该参数指定,当前AOF文件比上次Rewrite后AOF文件大该百分比后,自动触发rewrite操作。如果设置为0,则关闭该特性。auto-aof-rewrite-min-sizeRedis自动rewrite AOF文件时,AOF最小应该大于等于该值,如果小于该值,则不触发rewrite操作。aof-load-truncatedAOF文件数据末尾不完整处理配置。yes:redis加载AOF数据,启动时提示问题信息。No:redis不记载AOF文件,退出启动。 这时可以手动调用工具redis-check-aof修复AOF文件。慢查询日志slowlog-log-slower-than命令执行时间超过该值,被记录到慢查询日志。单位 微秒0:强制每个命令记录。负数:关闭慢查询日志。slowlog-max-lenSlow log记录的最大长度。当空间用完后(内存),会删除最早的查询日志。推荐使用默认值128,当慢日志超过128时,最先进入队列的记录会被踢出9.2 配置sentinel.conf说明字段描述portSentinel实例运行端口dirSentinel工作目录sentinel monitor配置master的信息sentinel monitor master-name:master名称IP:master的ip地址redis-port:master的redis 端口。,quorum:master客观下线,需要最少同意的sentinel数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 认购返利合同模板8篇
- 租房转租合同模板6篇
- 理货员岗位安全培训课件
- 迪庆木栈道工程方案(3篇)
- 玖龙纸业岗位安全培训课件
- 猫造型雕塑专业知识培训课件
- 德利矿业年产400万吨氧化钙、70万吨炼钢专用石项目(二期工程)环境影响报告表
- 防盗工程门加工方案(3篇)
- 狼崖山五壮士课件
- 顶梁美化改造工程方案(3篇)
- 保安公司运营管理方案
- 血常规室内质控模板
- Welcome+unit +and+Expressions+单词讲解课件 【知识精讲精研】高中英语人教版必修第一册
- GB/T 43950-2024工业浓盐水回用技术导则
- 2024年出租车网约车司机从业资格证考试题库附参考答案【模拟题】
- “1+X”幼儿照护技能等级证书(中级)考试题库(多选、判断题)
- T-CUWA 20059-2022 城镇供水管网模型构建与应用技术规程
- 火电厂检修培训课件
- 核医学医学影像医技科室质量评估细则
- 观看《中国乒乓之绝地反击》观后感600字三篇
- YY/T 0698.5-2023最终灭菌医疗器械包装材料第5部分:透气材料与塑料膜组成的可密封组合袋和卷材要求和试验方法
评论
0/150
提交评论