一、持久化方式

Redis提供了两种数据备份的方式,一种是RDB,另外一种是AOF。

  RDB AOF
开启/关闭 开启:默认开启;关闭:把配置文件中所有的save注释就是关闭了 开启:在配置文件中appendonly:yes即是开启了aof;no为关闭
同步机制 可以指定某个时间内发生多少个命令进行同步,比如1分钟内发生2次命令,就做一次同步 每秒同步或者每次发生命令后同步
存储内容 存储的是Redis里具体的值 存储的是执行的更新操作的命令
存储文件的路径 根据dir以及dbfilenname来指定路径和具体的文件名 根据dir以及appendfilename来指定具体的路径和文件名
优点

(1)存储数据文件时会进行压缩,文件体积比aof小;

(2)因为存储的是Redis具体的值,并且会经过压缩,因此在恢复的时候速度比aof快;

(3)非常适合用备份。

(1)aof策略的备份机制是每分钟或者每发生写操作的时候都会同步,因此即使服务器故障,最多只会丢失1秒的数据;

(2)aof存储的是Redis命令,并且是直接追加到aof文件后面,因此每次备份的时候只要添加新的数据进去就可以了;

(3)如果aof文件比较大了,那么Redis会进行重写,只保留最小的命令集合。

缺点

(1)rdb在多少时间内发生了多少写操作的时候就会触发同步机制,因为采用压缩机制,rdb在同步的时候都重新保存整个Redis中的数据,因此一般会设置5分钟才保存一次数据,在这种情况下,一般服务器故障,会造成至少5分钟的数据丢失;

(2)在数据保存进rdb的时候,Redis会fork出一个子进程用来同步,在数据量比较大的时候,可能非常耗时。

(1)aof文件因为没有压缩,因此比rdb体积大;

(2)aof是在每秒或者每次写操作都进行备份,因此如果并发量比较大,效率可能会有点慢;

(3)aof文件因为存储的是命令,因此在灾难恢复的时候Redis会重新运行aof中的命令,因此恢复速度比不上rdb。

1、rdb持久化

实现RDB持久化的方式有两种

(1)save,bgsave

save,同步的方式,持久化操作完成前,系统会被阻塞

bgsave,异步方式

(2)依赖提前做好的计划任务来实现

异步:子进程来完成持久化操作,持久化会将快照中的内容写入到一个临时文件中,当持久化完成了,那么就将这个临时文件改名成dump.rdb

rdb持久化参数介绍

save 900 1                 #900秒和至少1个键改变才会被保存
save 300 10 #300秒和至少10个键改变才会被保存
save 60 10000 #60秒和至少10000个键改变才会被保存
stop-writes-on-bgsave-error yes #错误发生时停止写入
rdbcompression yes #启用压缩
rdbchecksum yes #检验
dbfilename dump.rdb #rdb文件名
dir /var/lib/redis #rdb文件保存路径

2、AOF持久化

AOF比rdb方式更可靠,如果想要启动aof持久化,只要启动appendonly yes即可。

appendonly yes                             #是否启用aof持久化
auto-aof-rewrite-percentage 100 #当aof文件的大小增张了指定比例的时候,执行一次重写操作
auto-aof-rewrite-min-size 64mb #指定aof文件做重写最小值
appendfilename "appendonly.aof" #aof持久化信息保存在哪个文件中(相当于mysql的二进制日志文件)
# appendfsync always #一旦执行了操作,会立刻将操作的语句记录到aof文件中
appendfsync everysec #每秒向aof文件进行一次写入操作
# appendfsync no #不主动向aof执行写入操作,由系统自行判断何时向磁盘执行写入操作
no-appendfsync-on-rewrite no
aof-load-truncated yes

二、Redis主从复制

  主节点:可读可写;从节点:只读不写

  Redis的主从复制,可以实现一个主节点master可以有多个从节点slave节点,一个slave节点也可以作为下面很多从节点的主节点,类似于mysql的级联复制。
  Redis的主从复制策略是通过其持久化的rdb文件来实现的,其过程是先dump出rdb文件,将rdb文件传输给slave,然后再将dump后的操作实时同步到slave中。让从服务器(slave server)成为主服务器(master server)的复制品。

1、拷贝一份Redis配置文件为slave-6380.conf

[root@ren6 redis-5.0.0]# cp redis.conf slave-6380.conf

2、编辑slave-6380.conf文件

[root@ren6 redis-5.0.0]# vim slave-6380.conf
69 bind 192.168.11.6
70 slaveof 192.168.11.6 6379  #指定主节点 93 port 6380

3、编辑主配置文件

[root@ren6 redis-5.0.0]# vim redis.conf
bind 192.168.11.6

4、重启主节点

[root@ren6 redis-5.0.0]# redis-server redis.conf
[root@ren6 redis-5.0.0]# redis-cli -h 192.168.11.6 -p 6379
192.168.11.6:6379> get name
"ren"

5、重启从节点

[root@ren6 ~]# redis-server redis-5.0.0/slave-6380.conf
[root@ren6 ~]# redis-cli -h 192.168.11.6 -p 6380
192.168.11.6:6380> get name
"ren"

三、多实例(同主从)

  多实例就是一台服务器上安装多个redis服务器,这样可以更大程度的利用有限资源,在做一些实验的时候也是强烈建议使用多实例的方式,以节省内存消耗。
  多实例的启动需要用到redis-server + 配置文件 的方式启动,而不能再使用systemctl restart redis。
  另外多实例的登录需要指定-p ip地址,-p指定端口号。

步骤:

1、创建目录,主要存放每个实例的数据,如配置文件,日志文件,pid文件,rdb文件等

2、复制配置文件到创建的实例目录下

3、修改每个实例的配置文件

必须修改的地方:bind监听的地址、端口号、开启后台启动、pid文件保存位置、日志文件保存位置、rdb文件保存位置

bind 192.168.11.6
protected-mode yes
port 6380
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /redis/6380/redis_6380.pid
loglevel notice
logfile /redis/6380/redis.log
...

四、高可用

  Redis高可用即哨兵模式,可以实现对主节点及从节点的监控,当节点出现故障的时候可以实现通知的功能,也可以实现故障转移,失败接管,当主节点出现故障的时候,从节点就可以来接替主节点,实现主从节点的切换。这个时候原本是从节点的服务器,就晋升为主节点了。
  主节点发生故障,进行了主从的切换之后,如果修复好原来的主节点,再次启用的话,原来的主节点就成为了从节点。

1、在主节点查看

可以使用info replicationc查看主从信息,在主节点进行操作

192.168.11.6:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.11.6,port=6380,state=online,offset=1497,lag=0
master_replid:0c33819e00bb6132c5fdb11c3e57bd78d3fe2d35
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1497
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:1497

2、修改监控端的配置文件

[root@ren6 redis-5.0.0]# vim sentinel.conf
17 protected-mode no  #关闭保护模式
21 port 26379    #端口号为26379(默认)
67 # sentinel monitor <master-name> <ip> <redis-port> <quorum>
#注:quorum指几个主机同意可以故障切换,这里是1表示,只要一个主机同意故障切换就会切换
84 sentinel monitor mymaster 192.168.11.6 6379 1    #添加主节点信息

3、启动监控节点

[root@ren6 redis-5.0.0]# redis-server sentinel.conf --sentinel
[root@ren6 ~]# ss -tnl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:26379 *:*
LISTEN 0 128 192.168.11.6:6379 *:*
LISTEN 0 128 192.168.11.6:6380 *:*
LISTEN 0 128 *:22 *:*
LISTEN 0 128 :::26379 :::*
LISTEN 0 128 :::22 :::*

4、登录监控端、查看主/从服务端信息

[root@ren6 ~]# redis-cli -h 192.168.11.6 -p 26379  #登录监控端
192.168.11.6:26379> sentinel masters    #查看主服务端信息
1) 1) "name"
2) "mymaster"
3) "ip"
4) "192.168.11.6"
5) "port"
6) "6379"
7) "runid"
8) "ab924650ae917f3187b511b4ad5e7173ef01a639"
9) "flags"
10) "master"
...
192.168.11.6:26379> sentinel slaves mymaster  #查看从服务端信息
1) 1) "name"
2) "192.168.11.6:6380"
3) "ip"
4) "192.168.11.6"
5) "port"
6) "6380"
7) "runid"
8) "01cada6b7d9d540d380f2a3bbdba548566dc6d84"
9) "flags"
10) "slave"
...

5、测试

[root@ren6 ~]# ps aux |grep redis  #查看Redis的各个实例的pid
root 12149 0.2 1.0 159516 10132 ? Ssl 15:14 0:05 redis-server 192.168.11.6:6379
root 12187 0.2 1.3 163100 13324 ? Ssl 15:15 0:05 redis-server 192.168.11.6:6380
root 12229 0.3 0.8 153884 8308 pts/0 Sl+ 15:48 0:02 redis-server *:26379 [sentinel]
root 12256 0.0 0.7 24720 7436 pts/2 S+ 15:51 0:00 redis-cli -h 192.168.11.6 -p 26379
root 12282 0.0 0.0 112728 972 pts/3 R+ 15:58 0:00 grep --color=auto redis
[root@ren6 ~]# kill 12149    #关闭Redis主节点进程
192.168.11.6:26379> sentinel masters  #再次查看主节点,已经变成了6380端口了
1) 1) "name"
2) "mymaster"
3) "ip"
4) "192.168.11.6"
5) "port"
6) "6380"
7) "runid"
8) "01cada6b7d9d540d380f2a3bbdba548566dc6d84"
9) "flags"
10) "master"

注意:现在再把之前的主节点重启启动的话,之前的主节点会变成现在的主节点的从节点,即之前的主机点故障之后再启动已经变成从节点了。

nosql数据库之Redis持久化、备份和主从配置的更多相关文章

  1. Linux实战教学笔记45:NoSQL数据库之redis持久化存储(一)

    第1章 redis存储系统 1.1 redis概述 REmote DIctionary Server(Redis)是一个基于key-value键值对的持久化数据库存储系统.redis和大名鼎鼎的Mem ...

  2. Linux实战教学笔记46:NoSQL数据库之redis持久化存储 (二)

    第3章 Redis数据类型详解 3.1 Redis键/值介绍 Redis key值是二进制安全的,这意味着可以用任何二进制序列作为key值,从形如"foo"的简单字符串到一个JPG ...

  3. NOSQL数据库之 REDIS

    NOSQL数据库之 REDIS 一.NOSQL 1.简介 NoSQL ,(Not Only SQL),泛指非关系型数据库. 特点: NoSQL 通常是以key-value形式存储, 不支持SQL语句, ...

  4. nosql数据库之Redis概念及基本操作

    一.概述 redis是一种nosql数据库(非关系型数据库),他的数据是保存在内存中,同时redis可以定时把内存数据同步到磁盘,即可以将数据持久化,并且他比memcached支持更多的数据结构(st ...

  5. redis数据库安装 redis持久化及主从复制

    ----------------------------------------安装redis-5.0.4---------------------------------------- wget h ...

  6. Python操作nosql数据库之redis

    一.NoSQL的操作 NoSQL,泛指非关系型的数据库.随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不 ...

  7. NoSQL数据库:Redis内存使用优化与存储

    Redis常用数据类型 Redis最为常用的数据类型主要有以下五种: ●String ●Hash ●List ●Set ●Sorted set 在具体描述这几种数据类型之前,我们先通过一张图了解下Re ...

  8. no-sql数据库之redis

    一.FAQ 1.如果用连接器连接redis不成功,报如下错误: crash-report-server replied:Request Entity Too Large 则可以先通过cmd命令查看端口 ...

  9. redis集群(主从配置)

    市面上太多kv的缓存,最常用的就属memcache了,但是memcache存在单点问题,不过小日本有复制版本,但是使用的人比较少,redis的出现让kv内存存储的想法成为现实.今天主要内容便是redi ...

随机推荐

  1. 201871030102-崔红梅 实验二 个人项目—— D{0-1}KP 项目报告

    项目 内容 课程班级博客链接 班级博客 这个作业要求链接 实验二作业链接 我的课程学习目标 1.熟练掌握将本地代码保存至GitHub中2.掌握折扣背包问题3.回顾动态规划算法和回溯算法4.对java语 ...

  2. BUAA_OO_2020_第一单元总结

    BUAA_OO_2020_第一单元总结 OO第一单元作业主题为表达式求导,主要学习目标为熟悉面向对象思想,学会使用类来管理数据,感受分工协作的行为设计,建立程序鲁棒性概念.如今,第一单元的学习已落下帷 ...

  3. 后续来啦:Winform/WPF中快速搭建日志面板

    后续来啦:Winform/WPF中快速搭建日志面板 继昨天发文ASP.NET Core 可视化日志组件使用(阅读文章,查看视频)后,视频下有朋友留言 "Winform客户端的程序能用它不?& ...

  4. 【macOS】Homebrew & Homebrew cask macOS软件包管理神器

    Homebrew Homebrew 与 Homebrew Cask Homebrew 是基于 OS X 的套件管理工具,是一个开源的 Ruby 脚本,专门用于快速下载软件.更通俗地讲,Homebrew ...

  5. day7.文件处理

      @字符编码 见:https://zhuanlan.zhihu.com/p/108805502 一.文件基本操作 ''' 1.什么是文件     文件是操作系统提供给用户或者应用程序的一种操作硬盘的 ...

  6. 使用Tensorflow Object Detection进行训练和推理

    整体流程(以PASCAL VOC为例) 1.下载PASCAL VOC2012数据集,并将数据集转为tfrecord格式 2.选择并下载预训练模型 3.配置训练文件configuration(所有的训练 ...

  7. BB网络层测试

    网络层测试2020 问题 1 以下不属于网络层的协议是___A_______. A  DHCP  B ICMP  C IGMP  D ARP 10 分    问题 2 如果目的网络.目的主机都对,但是 ...

  8. Ubuntu20.04安装Redis

    本文介绍了如何在Ubuntu20.04上安装Redis. 安装Redis sudo apt install redis-server 检查服务的状态 安装完成后可以通过以下命令检查服务的状态 sudo ...

  9. 034- do_while语句

    语法 初始化语句; do { 循环体语句; 控制条件语句; }while(boolean表达式); 执行过程: 首先会执行do循环体中的语句,然后运算while中的boolean表达式,如果是true ...

  10. 【Spring】Spring中Bean的生命周期

    Spring中Bean的生命周期依赖于Spring的容器,大致可分为以下4个阶段: 1.Bean的初始化阶段 2.Bean属性赋值的阶段,获取上下文关联 3.Bean初始化的阶段 4.Bean销毁的阶 ...