redis持久化及主从

版权声明:本文为博主原创文章,转载请指明地址。 https://blog.csdn.net/Mr_rsq/article/details/83106674

1 redis持久化

官方文档(很详细)
redis安装配置及常见数据类型

Redis 提供了多种不同级别的持久化方式:

  • RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)。
  • AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。AOF 文件中的命令全部以 Redis 协议的格式来保存,新命令会被追加到文件的末尾。 Redis 还可以在后台对 AOF 文件进行重写(rewrite),使得 AOF 文件的体积不会超出保存数据集状态所需的实际大小。
  • Redis 还可以同时使用 AOF 持久化和 RDB 持久化。 在这种情况下, 当 Redis 重启时, 它会优先使用 AOF 文件来还原数据集, 因为 AOF 文件保存的数据集通常比 RDB 文件所保存的数据集更完整。
  • 甚至可以关闭持久化功能,让数据只在服务器运行时存在。

有关RDB和AOF的优缺点详见官方文档,有详细的介绍

1.1 RDB快照

RDB原理:

  1. Fork子进程
  2. 父进程继续干活,子进程开始将内存中的数据写入硬盘中的临时文件
  3. 当子进程写完数据后,用临时文件替换DRB文件

配置:

# RDB快照配置很简单,默认是开启的(搜索下面这几行)
# 修改后要重启redis
[root@redis ~]# vim /etc/redis.conf
save 900 1    		# 在900s(15m)内如果有一个key被改变,那么就进行一次快照
save 300 10			# 在300s(5m)内如果有10个key被改变,那么就进行一次快照
save 60 10000		# 在60s(1m)内如果有10000个key被改变,那么就进行一次快照

# 存放目录
dir /var/lib/redis

# 存放文件名
dbfilename dump.rdb

# rdb文件是不能通过cat和vim等文本查看或编辑的
[root@redis ~]# cd /var/lib/redis/
[root@redis redis]# ll
total 4
-rw-r--r-- 1 redis redis     77 Oct 17 10:48 dump.rdb
[root@redis redis]# file dump.rdb 
dump.rdb: data

1.2 AOF追加

AOF原理:

  1. Fork子进程
  2. 父进程继续干活,子进程开始将内存中的数据写入硬盘中的临时文件
  3. 当子进程写完数据后,用临时文件替换AOF文件

配置AOF:

# 修改配置文件,appendonly yes 打开此选项
[root@redis ~]# vim /etc/redis.conf
appendonly yes

# 重启redis
[root@redis ~]# /etc/init.d/redis restart
Stopping redis-server:                                     [  OK  ]
Starting redis-server:                                     [  OK  ]

# 测试
[root@redis ~]# redis-cli -h 10.0.0.10
10.0.0.10:6379> SET key1 v1
OK
10.0.0.10:6379> SET key2 v2
OK
10.0.0.10:6379> SET key3 v3
OK
10.0.0.10:6379> SET key4 v4
OK
10.0.0.10:6379> exit
[root@redis ~]# cd /var/lib/redis
[root@redis redis]# ll
total 8
-rw-r--r-- 1 redis redis 124 Oct 17 17:22 appendonly.aof
-rw-r--r-- 1 redis redis  91 Oct 17 17:22 dump.rdb
[root@redis redis]# cat appendonly.aof 
*3
$3
SET
$4
key1
$2
v1
*3
$3
SET
$4
key2
$2
v2
*3
$3
SET
$4
key3
$2
v3
*3
$3
SET
$4
key4
$2
v4

# 当然也可以直接在命令行中开启AOF
10.0.0.10:6379> CONFIG SET appendonly yes
OK

1.3 RBD和AOF如何选择

  • 一般来说, 如果想达到足以媲美 PostgreSQL 的数据安全性, 你应该同时使用两种持久化功能。
  • 如果非常关心你的数据, 但仍然可以承受数分钟以内的数据丢失, 那么你可以只使用 RDB 持久化。
  • 有很多用户都只使用 AOF 持久化, 但我们并不推荐这种方式: 因为定时生成 RDB 快照(snapshot)非常便于进行数据库备份, 并且 RDB 恢复数据集的速度也要比 AOF 恢复的速度要快, 除此之外, 使用 RDB 还可以避免之前提到的 AOF 程序的 bug 。

2 redis主从复制

官方文档(很详细)

Redis 支持简单且易用的主从复制(master-slave replication)功能, 该功能可以让从服务器(slave server)成为主服务器(master server)的精确复制品。以下是关于 Redis 复制功能的几个重要方面:

  • Redis 使用异步复制。 从 Redis 2.8 开始, 从服务器会以每秒一次的频率向主服务器报告复制流(replication stream)的处理进度。
  • 一个主服务器可以有多个从服务器。
  • 不仅主服务器可以有从服务器, 从服务器也可以有自己的从服务器, 多个从服务器之间可以构成一个图状结构。
  • 复制功能不会阻塞主服务器: 即使有一个或多个从服务器正在进行初次同步, 主服务器也可以继续处理命令请求。
  • 复制功能也不会阻塞从服务器: 只要在 redis.conf 文件中进行了相应的设置, 即使从服务器正在进行初次同步, 服务器也可以使用旧版本的数据集来处理命令查询。不过, 在从服务器删除旧版本数据集并载入新版本数据集的那段时间内, 连接请求会被阻塞。还可以配置从服务器, 让它在与主服务器之间的连接断开时, 向客户端发送一个错误。
  • 复制功能可以单纯地用于数据冗余(data redundancy), 也可以通过让多个从服务器处理只读命令请求来提升扩展性(scalability): 比如说, 繁重的 SORT 命令可以交给附属节点去运行。
  • 可以通过复制功能来让主服务器免于执行持久化操作: 只要关闭主服务器的持久化功能, 然后由从服务器去执行持久化操作即可。

配置:

# 需要新开一个redis进程,或者再用一台设备(这里用的后者)

# 开一个新进程命令
cp /etc/redis.conf /etc/redis2.conf

# 修改redis2.conf的端口改为6378(slave)
/usr/sbin/redis-server /etc/redis2.conf      # 指定配置文件启动
redis-cli -h 10.0.0.10 -p 6378

#启动master
[root@redis ~]# redis-cli -h 10.0.0.10

#salve查看INFO信息
[root@redis_slave ~]# redis-cli  -h 127.0.0.1 -p 6378
127.0.0.1:6378> INFO
......
# Replication
role:slave
master_host:10.0.0.10
master_port:6379
master_link_status:up
master_last_io_seconds_ago:2
master_sync_in_progress:0

# Master写入,Slave查看
10.0.0.10:6379> SET MAST KEY1
OK

127.0.0.1:6378> GET MAST
"KEY1"

需要设置redis从库只读,默认是只读(redis-3.2.12)

[root@redis ~]# vim /etc/redis.conf
slave-read-only yes

猜你喜欢

转载自blog.csdn.net/Mr_rsq/article/details/83106674
今日推荐