一、redis.conf详解
单位
配置文件unit单位不区分大小写
包含 INCLUDES
可以包含其他配置文件,把多个conf文件组合成一个
网络 NETWORK
bind 127.0.0.1 #绑定ip
protected-mode yes #保护模式
port 6379 #端口设置
通用 GENERAL
daemonize no # 以守护进程(后台运行)的方式运行,默认是no,我们需要自己开启为yes
pidfile /var/run/redis_6379.pid # 如果以后台的方式运行,我们需要指定一个pid文件
#日志级别
# Specify the server verbosity level.
# This can be one of:
# debug (a lot of information, useful for development/testing)
# verbose (many rarely useful info, but not a mess like the debug level)
# notice (moderately verbose, what you want in production probably)
# warning (only very important / critical messages are logged)
loglevel notice
logfile "" #日志的文件位置名
databases 16 #数据库数量,默认16个
always-show-logo no #是否总是显示log
快照 SNAPSHOTTING
持久化,在规定的时间内,执行了多少次操作,则会持久化到文件.rdb .aof中
redis是内存数据库,如果没有持久化,那么数据断电及失。
#如果900s内,如果至少1个key进行了修改,我们即进行持久化操作
save 900 1
#如果300s内,如果至少10个key进行了修改,我们即进行持久化操作
save 300 10
#如果60s内,如果至少10000个key进行了修改,我们即进行持久化操作(高并发时)
save 60 10000
stop-writes-on-bgsave-error yes #持久化出错后是否继续工作,默认开启
rdbcompression yes #是否压缩rdb文件,需要消耗一些cpu资源
rdbchecksum yes #保存rdb文件时,进行错误的检查
dir ./ # rdb文件保存的目录
主从复制 REPLICATION
replicaof <masterip> <masterport> 配置连接主机的ip和port
masterauth <master-password> 配置连接的主机的密码
安全 SECURITY
可以在这里设置redis的密码,默认没有密码
客户端的限制 CLIENTS
maxclients 10000 # 设置能连接上redis的最大客户端的数量
内存 MEMORY MANAGEMENT
maxmemory <bytes> #redis配置最大的内存容量
maxmemory-policy noeviction # 内存到达上限之后的处理淘汰策略
8种淘汰策略
aof配置 APPEND ONLY MODE
appendonly no #默认不开启aof模式,默认使用rdb方式持久化,在大部分情况rdb完全够用
appendfilename "appendonly.aof" #持久化的文件的名字
# appendfsync always #每次修改都会同步,消耗性能
appendfsync everysec #每秒执行一次同步,但如果在这1s宕机可能会丢失这1s数据
# appendfsync no #不执行同步,操作系统自己同步数据,速度最快
二、Redis持久化
Redis是内存数据库,如果不将内存的数据保存到磁盘,那么一旦服务器进程退出,服务器中的数据库状态也会消失。所以Redis提供了持久化功能。
1、RDB
在指定的时间间隔内将内存中的数据快照写入磁盘,也就是Snapshot快照,它恢复时是将快照文件直接读到内存里。
Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整合过程中,主进程是不进行任何IO操作。这就确保了极高的性能。如果需要进行大规模的数据恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加高效。RDB的缺点是最后一次持久化后的数据可能丢失,我们默认的就是RDB。
rdb保存的文件是dump.rdb,都是在快照中进行配置的
有时候在生产环境会将这个文件进行备份
触发机制
1、save的规则满足的情况下,会自动触发rdb规则
2、执行flushall命令,也会触发rdb规则
3、退出redis,也会产生一个rdb文件
如何恢复rdb文件
1、只需要将rdb文件放在redis启动目录就可以,redis启动时会自动检查dump.rdb恢复其中的数据
2、查看需要存放的位置
127.0.0.1:6379> config get dir
1) "dir"
2) "/usr/local/bin"
优点和缺点
优点:
1、适合大规模的数据恢复
2、如果对数据的完整性要求不高
缺点:
1、需要一定的时间间隔进程操作。如果redis意外宕机了,最后一次修改的数据就会丢失
2、fork进程的时候,会占用一定的内存空间。
2、AOF
是什么
AOF(Append Only File)
将所有命令都记录下来,history,恢复的时候把这个文件的记录全部执行一边
以日志的形式来记录每个写操作,将Redis执行过的所有指令记录下来(读不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件。换句话说,就是redis重启的话就根据日志文件将写指令从前到后执行一次以完成数据的恢复工作
AOF保存的是append
append
默认不开启,需要手动开启,将no改为yes就可以了,重启redis就会生效了
如果aof文件有错误,这时候redis是启动不起来的,我们需要修复这个aof文件
redis给我们提供了一个工具 redis-check-aof --fix
#用此命令修复
redis-check -aof --fix appendonly.aof
如果文件正常,重启就可以直接恢复了
重写规则
aof就是无限追加,文件会越来越大
如果aof文件大于64mb,fork一个新进程将文件进行重写
优点和缺点
appendonly no # 默认不开启aof模式
appendfilename "appendonly.aof" #持久化的文件名
# appendfsync always #每次修改都会sync。消耗性能
appendfsync everysec #每秒执行一次sync,可能会丢失1s的数据
# appendfsync no #不执行sync,这个时候操作系统自己同步数据,速度最快
#rewrite
优点:
1、每一次修改都同步,文件的完整性会更好
2、每秒同步一次,可能会丢失一秒的数据
3、从不同步时,效率最高
缺点:
1、相对于数据文件来说,aof远远大于rdb,修复的速度也比rdb慢
2、aof运行效率也要比rdb慢,所以redis默认是rdb持久化