Redis认证及Redis持久化

1、Redis认证实现方法:

(1)redis.conf
                   requirepass      PASSWORD
         (2)redis-cli
                   AUTHPASSWORD
                   redis-cli-h HOST -a PASSWORD
[root@test ~]# vim /etc/redis.conf
requirepass field
[root@test ~]# service redis restart
停止 redis-server:[确定]
启动:[确定]
[root@test ~]# redis-cli -h 192.168.88.130
192.168.88.130:6379> select 0
(error) NOAUTH Authentication required.
192.168.88.130:6379> auth field
OK
192.168.88.130:6379> EXIT
[root@test ~]#
[root@test ~]# redis-cli -h 192.168.88.130-a field
192.168.88.130:6379> select 1
OK
192.168.88.130:6379[1]>
[root@test etc]# ps -ef | grep redis
redis   42400     1  0 21:30 ?        00:00:01 /usr/bin/redis-server127.0.0.1:6379                                                   
root    43343 42249  0 22:01 pts/0    00:00:00 grep redis
[root@test etc]# kill -9 42400
[root@test etc]# ss -tnl |grep 6379
[root@test etc]# service redis restart
停止 redis-server:Could not connect to Redis at 127.0.0.1:6379: Connection refused
[确定]
启动:[确定]
[root@test etc]# redis-cli -h192.168.88.130
192.168.88.130:6379> select 1
OK
192.168.88.130:6379[1]>

 

2、Redis持久化:默认情况下Redis在工作中用到的所有数据集都是工作在内存中。

RDB和AOF:

RDB:snapshop(快照),二进制格式,按事先定制的策略,周期性的将数据保存至磁盘,数据文件默认为dump.rdb;

客户端也可以显示使用SAVE或BGSAVE命令启动快照保存机制;

         SAVE:同步,在主线程中保存快照,此时会阻塞所有客户端请求;

         BGSAVE:异步,不会阻塞所有客户端请求;

RDB工作模式:创建一个子进程,父进程继续处理客户端请求,子进程负责将内存中的内容快照到磁盘中去

AOF:AppendOnly File(Redis所有操作以附加的方式附加一个文件)

         记录每一次写操作至指定文件的尾部实现持久化;当Redis重启时,可通过重新执行文件中的命令在内存重建数据库;

         BGREWRITEAOF:AOF文件重写;

         不会读取正在使用AOF文件,而通过将内存中的数据以命令的方式保存至临时文件中,完成之后替换原来的AOF文件;

 

RDB相关配置

################################SNAPSHOTTING ################################
save 900 1
#900秒有一个键发生改变就做一次快照,进行一次持久化。
save 300 10
save 60 10000
stop-writes-on-bgsave-erroryes
#异步快照是一旦错误是否停止写操作
rdbcompression yes#rdb文件是否执行压缩来节省空间
rdbchecksum yes
#对rdb文件是否做校验码检查
#rdb快照文件名
dir /var/lib/redis
#rdb快照文件保存路径
################################SNAPSHOTTING ################################
[root@test etc]# redis-cli -h192.168.88.130
192.168.88.130:6379> config get dir
1) "dir"
2) "/var/lib/redis"
192.168.88.130:6379>

 

AOF:

         重写过程:

                   (1)Redis主进程通过fork创建子进程

                   (2)子进程根据Redis内存中的数据创建数据库重建命令序列于临时文件中;

                   (3)父进程继承client的请求,并会把这些请求中的写操作继续追加至原来的AOF文件;额外的,这些新的写请求还会被放置于于一个缓冲队列中

                   (4)子进程重写完成,会通知父进程,父进程把缓冲中的命令写到临时文件中;

                   (5)父进程用临时文件替换老的AOF文件;

 

Redis触发AOF rewrite机制有三种:

(1)Redis Server接收到客户端发送的BGREWRITEAOF指令请求,如果当前AOF/RDB数据持久化没有在执行,那么执行,反之,等当前AOF/RDB数据持久化结束后执行AOF rewrite

(2)在Redis配置文件redis.conf中,用户设置了auto-aof-rewrite-percentage和auto-aof-rewrite-min-size参数,并且当前AOF文件大小server.aof_current_size大于auto-aof-rewrite-min-size(server.aof_rewrite_min_size),同时AOF文件大小的增长率大于auto-aof-rewrite-percentage(server.aof_rewrite_perc)时,会自动触发AOF rewrite

(3)用户设置“config setappendonly yes”开启AOF的时,调用startAppendOnly函数会触发rewrite

192.168.88.130:6379> config set  appendonly yes

OK

 

AOF相关参数:

############################## APPEND ONLYMODE ###############################
appendonly no
#是否开启AOF持久化
appendfilename"appendonly.aof"
#AOF持久化文件名
# appendfsync always
#每一次写操作都会调用一次fsync,这时数据是最安全的,由于每次都会执行fsync,会影响性能。
appendfsync everysec
#Redis每隔一秒进行一次fsync调用,将缓冲区中的数据写到磁盘。
# appendfsync no
#Redis不主动调用fsync去将AOF日志内容同步到磁盘,由操作系统决定。
no-appendfsync-on-rewriteno
#做重写的时候对新写操作不做appendfsync
auto-aof-rewrite-percentage100
#AOF文件大小的增长率为多大时,会自动触发AOF rewrite
auto-aof-rewrite-min-size64mb
#当前AOF文件大小为多大时,会自动触发AOF rewrite
############################## APPEND ONLYMODE ###############################

注意:持久化本身不能取代备份,还应该指定备份策略,对Redis数据库定期进行备份;

RDB和AOF同时启用:

         (1)BGSAVE和BGREWRITEAOF不能同时执行;

         (2)在Redis服务器启动用于恢复数据时,会优先使用AOF;


测试

[root@test redis]# vi /etc/redis.conf
################################SNAPSHOTTING ################################
rdbcompression no#rdb文件是否执行压缩来节省空间,此处关闭便于查看
############################## APPEND ONLYMODE ###############################
appendonly yes
#开启AOF持久化
[root@test redis]# service redis restart
[root@test redis]# redis-cli -h192.168.88.130 -p 6379
192.168.88.130:6379> set server redis
OK
192.168.88.130:6379> set databaseredisdatabase
OK
192.168.88.130:6379> set versionredis-3.2.11-1.el6.x86_64
OK
192.168.88.130:6379> exit
[root@test redis]# ll
总用量 8
-rw-r--r-- 1 redis redis 543 4月  26 15:21 appendonly.aof
-rw-r--r-- 1 redis redis 130 4月  26 15:19 dump.rdb
[root@test redis]# tail appendonly.aof
database
$13
redisdatabase
*3
$3
set
$7
version
$25
redis-3.2.11-1.el6.x86_64
[root@test redis]# cat dump.rdb
REDIS0007s-ver3.2.11is-bits
 
mon04portlday0426yearbip0.0.0.0
x[root@test redis]#
[root@test redis]#