Redis基础知识补充及持久化、备份介绍

By | 2018年11月20日
目录
[隐藏]

一. 启用redis的认证功能

第一步:登录redis并创建几个字符串,并退出

[root@ken ~]# redis-cli
127.0.0.1:6379> set name zhangsan
OK
127.0.0.1:6379> set addr jiangsu
OK
127.0.0.1:6379> set tel 123456
OK
127.0.0.1:6379> MGET name addr tel
1) "zhangsan"
2) "jiangsu"
3) "123456"

127.0.0.1:6379> exit

 

第二步:修改redis配置文件

大约在80行处启动protect-mode,并添加一行requirepass及密码

[root@ken ~]# vim /etc/redis.conf 
...
  76 # By default protected mode is enabled. You should disable it only if
  77 # you are sure you want clients from other hosts to connect to Redis
  78 # even if no authentication is configured, nor a specific set of interfaces
  79 # are explicitly listed using the "bind" directive.
  80 protected-mode yes
  81 requirepass 123456
  82 
  83 # Accept connections on the specified port, default is 6379 (IANA #815344).
  84 # If port 0 is specified Redis will not listen on a TCP socket.
...

 

第三步:重启redis

[root@ken ~]# systemctl restart redis

 

第四步:登录redis

可以发现登录时可以正常登录,但是已经无法查看里面的key了

[root@ken ~]# redis-cli
127.0.0.1:6379> get name
(error) NOAUTH Authentication required.

 

第五步:验证登录

使用auth加上配置文件中定义的密码即可进行验证,再次获取key就会成功了

127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> get name
"zhangsan"

 

二.Redis的消息模式

 

订阅的基本格式:

SUBSCRIBE channel [channel …]    #订阅给定的一个或多个频道的信息

 

发送消息基本格式:

PUBLISH channel message    #将信息 message 发送到指定的频道 channel

 

第一步:xshell开启两个窗口,并登陆redis

第二步:订阅频道

在一个窗口中执行如下命令,开启订阅

127.0.0.1:6379> SUBSCRIBE ken
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "ken"
3) (integer) 1

 

第三步:频道发布内容

在另外一个窗口中在此频道发布内容

127.0.0.1:6379> PUBLISH ken "my name is ken"
(integer) 1
127.0.0.1:6379> PUBLISH ken "welcome to my homepage"
(integer) 1

 

第四步:在另外一个窗口进行查看

在订阅窗口查看。可以发现已经接收到订阅频道的信息了

127.0.0.1:6379> SUBSCRIBE ken
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "ken"
3) (integer) 1
1) "message"
2) "ken"
3) "my name is ken"
1) "message"
2) "ken"
3) "welcome to my homepage"

 

三.Redis事务

redis和mysql一样也支持事务

 

MULTI

标记一个事务块的开始。

事务块内的多条命令会按照先后顺序被放进一个队列当中,最后由 EXEC 命令原子性(atomic)地执行

 

EXEC

执行所有事务块内的命令

 

第一步:启动事务

127.0.0.1:6379> MULTI
OK

 

第二步:输入命令、指令

127.0.0.1:6379> INCR tel
QUEUED
127.0.0.1:6379> INCR tel
QUEUED
127.0.0.1:6379> INCR tel
QUEUED
127.0.0.1:6379> INCR tel
QUEUED

127.0.0.1:6379> get tel
QUEUED

 

第三步:执行

127.0.0.1:6379> EXEC
1) (integer) 123457
2) (integer) 123458
3) (integer) 123459
4) (integer) 123460
5) "123460"

完整演示如下

127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> INCR tel
QUEUED
127.0.0.1:6379> INCR tel
QUEUED
127.0.0.1:6379> INCR tel
QUEUED
127.0.0.1:6379> INCR tel
QUEUED
127.0.0.1:6379> get tel
QUEUED
127.0.0.1:6379> EXEC
1) (integer) 123457
2) (integer) 123458
3) (integer) 123459
4) (integer) 123460
5) "123460"

 

Redis持久化

 

RDB持久化

一.redis持久化会在磁盘上依赖两个文件

数据文件:rdb

日志文件:aof

 

二.redis实现持久化两种机制

RDB:周期的将内存中的数据备份到磁盘

AOF:借助于一个日志文件,这个文件会记录每次操作

RDB:基于快照的方式实现的,数据文件dump.rdb

 

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

1. save,bgsave

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

bgsave,异步方式

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

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

 

四./etc/redis.conf配置文件中关于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文件保存路径

 

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备份

备份持久化所生成的数据(rdb文件)

注意:生产环境中备份rdb文件需要关闭持久化

 

第一步:查看rdb文件是否存在

[root@ken ~]# ls /var/lib/redis/dump.rdb

 

第二步:查看redis中的key

[root@ken ~]# redis-cli
127.0.0.1:6379> keys *
1) "name"
2) "tel"
3) "addr"

 

第三步:关闭rdb持久化

配置文件200行处,save后面为空,并注释掉202 203 204

 198 #   like in the following example:
 199 #
 200 save ""
 201 
 202 #save 900 1
 203 #save 300 10
 204 #save 60 10000
 205

 

第四步:重启redis

[root@ken ~]# systemctl restart redis

 

第五步:移动rdb文件至home下

[root@ken ~]# mv /var/lib/redis/dump.rdb /home
[root@ken ~]# ls /var/lib/redis/

 

第六步:重启redis

[root@ken ~]# systemctl restart redis

 

第七步:再次登录redis查看key

发现已经为空

[root@ken ~]# redis-cli
127.0.0.1:6379> keys *
(empty list or set)

 

第八步:复制home下的rdb文件至/var/lib/redis下

[root@ken ~]# cp /home/dump.rdb /var/lib/redis/

 

第九步:重启redis加载rdb文件

[root@ken ~]# systemctl restart redis

 

第十步:再次查看keys

发现所有的keys又回来了

[root@ken ~]# redis-cli
127.0.0.1:6379> keys *
1) "name"
2) "tel"
3) "addr"

所以我们日常备份中只要备份这个文件即可

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注