redis启动与持久化
redis启动
- redis utils目录下,有个redis_init_script脚本
- 将redis_init_script脚本拷贝到linux的/etc/init.d目录中,将redis_init_script重命名为redis_6379,6379 是redis监听的端口号
- 修改redis_6379脚本的第6行的REDISPORT,设置为相同的端口号(默认就是6379)
- 创建两个目录:/etc/redis(存放redis配置文件),/var/redis/6379(存放redis持久化文件)
- 修改redis配置文件(默认在安装的根目录下,redis.conf),拷贝到/etc/redis目录中
- 修改redis.conf中的部分配置为生产环境
需要修改的配置项下:
daemonize yes
pidfile /var/run/redis_6379.pid
dir /var/redis/6379
- 启动redis,执行cd /etc/init.d,./redis_6379 start
- 确认redis是否启动ps -ef | grep 6379
- 让redis跟随系统启动是启动,方法如下:
在redis_6379脚本最上面,加入两行注释:
#chkconfig: 2345 90 10
#description: Redis is a persistent key-value database
执行 chkconfig redis_6379 on
redis配置RDB持久化
在redis.conf中,也就是/etc/redis/6379.conf中配置持久化,可以配置多个
save 3600 1
save 300 100
save 30 1000
save 60 1000,代表每隔60s,如果有超过1000个key发生了变更,那么就生成一个新的dump.rdb文件,这个操作也被称之为snapshotting,快照也可以手动save或者bgsave命令,同步或异步执行rdb快照生成。
redis配置AOF持久化
AOF持久化,默认是关闭的,也是在6379.conf中配置
appendonly yes #打开AOF持久化,生产环境中一般都要打开
打开AOF持久化机制之后,redis每次接收到一条写命令,就会写入日志文件中,当然是先写入os cache中的,然后每隔一段时间在fsync一下。
而且即使AOF和RDB都开启了,redis重启的时候,也是优先通过AOF进行数据恢复的,因为AOF数据比较完整。
可以配置AOF的fsync策略,有三种策略可以选择,一种是每次写入一条数据就执行依次fsync;一种是每隔一秒执行依次fsync;一种是不主动执行fsync。
appendfsync always
appendfsync everysec
appendfsync no
appendfsync always:每次写入一条数据,立即将这个数据对应的日志fsync到磁盘上去,性能非常差,吞 吐量很低,需要确保redis里的数据一条都不丢,那就只能这样了。
appendfsync everysec:每秒将内存中的数据fsycn到磁盘,性能很高。
appendfsync no:将数据写入内存中就不管了,然后后面系统自己会时不时有自己的策略将数据刷到磁盘,不可控。
AOF破损文件的修复
如果redis在append数据到AOF文件时,机器宕机了,可能会导致AOD文件破损
用redis-check-aof --fix命令来修复破损的AOF文件。