Redis实战总结-配置、持久化、复制

Redis的配置主要放置在redis.conf,可以通过修改配置文件实现Redis许多特性,比如复制,持久化,集群等。

redis.conf部分配置详解

# 启动redis,显示加载配置redis.conf
# ./redis-server /path/to/redis.conf

# 停止redis
# redis-cli -h IP -p PORT shutdown

# 可以包含一个或多个其他配置文件,如果多个redis服务器存在标准配置模板,但是每隔redis服务器可能有个性化的配置
# include /path/to/local.conf
# include /path/to/other.conf

# 这个地方网上存在许多误解,bind的是网络接口。对于一个redis服务器来说可以有一个或者多个网卡。比如服务器上有两个网卡:bind 192.168.1.100 192.168.1.101,如果bind bind 192.168.1.100,则只有该网卡地址接受外部请求,如果不绑定,则两个网卡都接受请求
# bind 192.168.1.100 192.168.1.101
# bind 127.0.0.1 ::1

# 监听端口号,默认为6379,如果为0监听任连接
port 6379

# TCP连接中已完成队列的长度
tcp-backlog 511

#客户端和Redis服务端的连接超时时间,默认为0表示永不超时
timeout 0

# 服务端周期性时间(单位秒)验证客户端是否处在健康状态,避免服务端一直阻塞
tcp-keepalive 300

# Redis以后台守护进程形式启动
daemonize yes

# 配置PID文件路径,当redis以守护进程启动时,它会把PID默认写到 /var/redis/run/redis_6379.pid文件里面
pidfile "/var/run/redis_6379.pid"

#Redis日志级别:debug,verbose,notice,warning,级别一次递增
loglevel notice

#日志文件路径及名称
logfile ""

Redis持久化

为了能够重用Redis数据,或者防止系统故障,我们需要将Redis中的数据写入到磁盘空间中,即持久化。 
Redis提供了两种不同的持久化方法可以将数据存储在磁盘中,一种叫快照(RDB),另一种叫只追加文件(AOF)。

RDB方式

Redis通过创建快照的方式获取某一时刻Redis中所有数据的副本。用户可以针对该快照进行各种操作,比如:将快照复制到其他服务器从而完成Redis的主从复制,或者将快照留在原地,服务器重启的时候重用数据。 
根据配置文件,可以手动设置Redis快照名及路径:

# RDB文件名
dbfilename "dump.rdb"
# RDB文件和AOF文件路径
dir "/usr/local/var/db/redis"

Redis创建快照主要有以下几种方式: 
* (1)客户端直接通过命令BGSAVE或者SAVE来创建一个快照

-  BGSAVE是通过redis调用fork来创建一个子进程,然后子进程负责将快照写入磁盘,而父进程仍然继续处理命令。
-  SAVE是在没有足够的内存空间去执行BGSAVE或者无所谓等待的时候。执行SAVE命令过程中,redis不在响应任何其他命令。
  • (2)在redis.conf中设置save配置选项(应用开发中比较常用)
# 当在规定的时间内,Redis发生了写操作的个数满足条件,会触发发生BGSAVE命令。
# save <seconds> <changes>
# 当用户设置了多个save的选项配置,只要其中任一条满足,Redis都会触发一次BGSAVE操作,比如:900秒之内至少一次写操作、300秒之内至少发生10次写操作、60秒之内发生至少10000次写操作都会触发发生快照操作
save 900 1
save 300 10
save 60 10000
  • (3) 当Redis通过shutdown命令关闭服务器请求时,会执行SAVE命令创建一个快照,如果使用kill -9 PID将不会创建快照。
  • (4) 主从同步,这个将在下面一小节讲解。

注意:

在只使用快照持久化来报错数据时,如果系统崩溃或者强杀,用户将会丢失最近一次生成快照之后更改的所有数据。因此如果应用程序对于两次快照间丢失的数据可接受,利用快照就是一个很好的方式,但是往往一些系统对于丢失几分钟的数据都不可接受,比如高频的电子商务系统。

此外,如果Redis存储的数据量长达数十G的时候,没执行一次快照需要花费大量时间,严重影响到服务器的性能。

因此,针对上述的问题,可以使用AOF方式来持久化数据。

AOF方式

在执行写命令时,AOF持久化会将执行的写命令也写到AOF文件的末尾,以此来记录数据的变化。换句话说,将AOF文件中包含的内容重新执行一遍,就可以回复AOF文件所记录的数据集。 
在Redis.conf配置中设置如下:

# redis默认关闭AOF机制,可以将no改成yes实现AOF持久化
appendonly no
# AOF文件
appendfilename "appendonly.aof"
# AOF持久化同步频率,always表示每个Redis写命令都要同步fsync写入到磁盘中,但是这种方式会严重降低redis的速度;everysec表示每秒执行一次同步fsync,显示的将多个写命令同步到磁盘中;no表示让操作系统来决定应该何时进行同步fsync,Linux系统往往可能30秒才会执行一次
# appendfsync always
appendfsync everysec
# appendfsync no

# 在日志进行BGREWRITEAOF时,如果设置为yes表示新写操作不进行同步fsync,只是暂存在缓冲区里,避免造成磁盘IO操作冲突,等重写完成后在写入。redis中默认为no
no-appendfsync-on-rewrite no
# 当前AOF文件大小是上次日志重写时的AOF文件大小两倍时,发生BGREWRITEAOF操作。
auto-aof-rewrite-percentage 100
#当前AOF文件执行BGREWRITEAOF命令的最小值,避免刚开始启动Reids时由于文件尺寸较小导致频繁的BGREWRITEAOF。
auto-aof-rewrite-min-size 64mb
# Redis再恢复时,忽略最后一条可能存在问题的指令(因为最后一条指令可能存在问题,比如写一半时突然断电了)
aof-load-truncated yes
#Redis4.0新增RDB-AOF混合持久化格式,在开启了这个功能之后,AOF重写产生的文件将同时包含RDB格式的内容和AOF格式的内容,其中RDB格式的内容用于记录已有的数据,而AOF格式的内存则用于记录最近发生了变化的数据,这样Redis就可以同时兼有RDB持久化和AOF持久化的优点(既能够快速地生成重写文件,也能够在出现问题时,快速地载入数据)。
aof-use-rdb-preamble no

RDB与AOF同时开启 默认先加载AOF的配置文件,因此需要根据具体情况使用,4.0+的可以使用RDB-AOF混合持久化格式

Redis复制

本部分只介绍主从同步的简单实现,并利用哨兵机制实现高可用,不介绍集群Cluster无中心的方式(放在后面的博客中详解)。

Redis主从复制

在Redis中实现主从复制比较简单,只需要修改slave服务器的redis.conf中的slaveof。下面利用一个具体的实例展示主从同步。

主从复制示例

环境如下: MacOS,Redis版本4.0.2 
master服务器:127.0.0.1 6379 
slave服务器:127.0.0.1 6399

配置slave服务器:

# 设置master服务器IP和端口
slaveof 127.0.0.1 6379
# slave是否只读,从服务器负责读操作,主服务器负责写操作,从而实现读写分离
slave-read-only yes

分别按照顺序启动mater(redis-server redis.conf)和slave(redis-server redis2.conf) 
在master中添加元素

在slave服务器中可以获得元素

主从复制如何交互

下面来研究下slave服务器和master服务器间是如何建立起主从同步机制的。

  1. Slave服务启动,主动连接Master,并发送SYNC命令,请求初始化同步
  2. Master收到SYNC后,执行BGSAVE命令生成RDB文件,并缓存该时间段内的写命令
  3. Master完成RDB文件后,将其发送给所有Slave服务器,
  4. Slave服务器接收到RDB文件后,删除内存中旧的缓存数据,并装载RDB文件
  5. Master在发送完RDB后,即刻向所有Slave服务器发送缓存中的写命令
  6. 至此初始化完成,后续进行增量同步

上述主从复制模式链是非常脆弱的,一旦Master服务器发生宕机,会导致无法向redis中读取或者写入数据,高可用性极差。

原文地址:https://www.cnblogs.com/austinspark-jessylu/p/8960862.html

时间: 2024-10-12 10:35:53

Redis实战总结-配置、持久化、复制的相关文章

Redis实战 | 持久化、主从复制特性和故障处理思路

前言 前面两篇我们了解了Redis的安装.Redis最常用的5种数据类型.本篇总结下Redis的持久化.主从复制特性,以及Redis服务挂了之后的一些处理思路. 前期回顾传送门: Linux下安装Redis简易教程Redis实战 | 5种Redis数据类型详解 Redis的两种持久化方式 经常有面试官会问:Redis数据存储在内存中,万一断电了怎么办呢? 不要慌,这个其实就是在问Redis的持久化策略啦.我们知道,保存在内存中的数据,在服务重启或者是机器挂掉之后是会丢失的.而硬盘中的数据是不会丢

3、redis.conf中的持久化相关配置

Redis支持2种持久化策略:snapshot方式和commandlog方式,前者通过将当前内存数据快照周期性写入RDB文件来实现:后者通过在log中记录Redis进程收到的写操作来实现,下次Redis重启时,回放commandlog来恢复数据状态.        根据实际需求,用户可以选择完全禁用持久化,也可以在同一个Redis实例中同时启用RDB和AOF.        特别注意:如果部署方式为主从,则不同实例的持久化时机最好错开!避免master和slaves同时进入后台持久化,这可能会降

redis实战_06_持久化机制

redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到硬盘来保证持久化. redis持久化的两种方式: 1 snapshotting(快照)默认方式,将内存中以快照的方式写入到二进制文件中,默认为dump.rdb.可以通过配置设置自动做快照持久化的方式.我们可以配置redis在n秒内超过m个key则修改就自动做快照. snapshotting设置: save 900 #900秒内如果超过1个key被修改则发起快照保存 save 300 10 #300秒内如果超过1

生产环境下Redis主备配置(持久化)

1.redis简介 REmote DIctionary Server(Redis)是一个几乎key-value键值对的持久化数据库存储系统.redis和大名鼎鼎的Memcached缓存服务很像,但是redis支持的数据存储类型更丰富,包括string(字符串).list(链表).set(集合)和zset(有序集合)等. 这些数据类型都支持push/pop.add/remove及取交集.并集和差集及更丰富的操作,而且这些操作都是原子性的.在此基础上,redis支持各种不同方式的排序.与memcac

redis实战 pdf 完整版 PDF高清下载

<redis实战>深入浅出地介绍了Redis的5种数据类型,并通过多个实用示例展示了Redis的用法. 除此之外,书中还讲述了Redis的优化方法以及扩展方法,是一本对于学习和使用 Redis 来说不可多得的参考书籍.<redis实战>一共由三个部分组成. 部分对Redis进行了介绍,说明了Redis的基本使用方法.它拥有的5种数据结构以及操作这5种数据结构的命令,并讲解了如何使用Redis去构建文章展示网站.cookie.购物车.网页缓存.数据库行缓存等一系列程序. 第二部分对R

redis实战笔记(4)-第4章 数据安全与性能保障

本章主要内容 4.1 将数据持久化至硬盘 4.2 将数据复制至其他机器 4.3 处理系统故障 4.4 Redis事务 4.5 非事务型流水线( non-transactional pipeline) 4.6 诊断性能问题 1.本章首先会介绍Redis的各个持久化选项, 这些选项可以让用户将自己的数据存储到硬盘上面. 2.接着本章将介绍如何通过 Redis 的复制特性, 把不断更新的数据副本存储到附加的机器上面, 从而提升系统的性能和数据的可靠性. 3. 之后本章将会说明同时使用复制和持久化的好处

redis的主从复制配置

redis的主从复制配置 一.     原理 Redis的主从复制功能非常强大,一个master可以拥有多个slave,而一个slave又可以拥有多个slave,如此下去,形成了强大的多级服务器集群架构.下面是关于redis主从复制的一些特点:1.master可以有多个slave2.除了多个slave连到相同的master外,slave也可以连接其他slave形成图状结构3.主从复制不会阻塞master.也就是说当一个或多个slave与master进行初次同步数据时,master可以继续处理cl

redis内存优化、持久化以及主从复制

Redis 数据库内存优化参数的配置,每种持久化方式的利与弊以及主从复制的原理以及配置 一.常用内存优化手段与参数 redis的性能如何是完全依赖于内存的,所以我们需要知道如何来控制和节省内存. 首先最重要的一点是不要开启Redis的VM选项,即虚拟内存功能,这个本来是作为Redis存储超出物理内存数据的一种数据在内存与磁盘换入换出的一个持久化策略,但是其内存管理成本非常的高,所以要关闭VM功能,请检查你的redis.conf文件中 vm-enabled 为 no. 其次最好设置下redis.c

Redis资料汇总(七) 持久化

redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到磁盘来保证持久化. redis支持两种持久化方式,一种是 Snapshotting(快照)也是默认方式,另一种是Append-only file(缩写aof)的方式.下面分别介绍 Snapshotting 快照是默认的持久化方式.这种方式是就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb.可以通过配置设置自动做快照持久 化的方式.我们可以配置redis在n秒内如果超过m个key被修