Redis-配置文件

配置文件redis.conf

基础配置

下面为常用的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# Redis configuration file example.
#
# Note that in order to read the configuration file, Redis must be
# started with the file path as first argument:
#
# ./redis-server /path/to/redis.conf

# 说明单位和不区分大小写
# Note on units: when memory size is needed, it is possible to specify
# it in the usual form of 1k 5GB 4M and so forth:
#
# 1k => 1000 bytes
# 1kb => 1024 bytes
# 1m => 1000000 bytes
# 1mb => 1024*1024 bytes
# 1g => 1000000000 bytes
# 1gb => 1024*1024*1024 bytes
#
# units are case insensitive so 1GB 1Gb 1gB are all the same.

################################## INCLUDES ###################################
# 可以配置多个conf文件组合起来
# Include one or more other config files here. This is useful if you
# have a standard template that goes to all Redis servers but also need
# to customize a few per-server settings. Include files can include
# other files, so use this wisely.
#
# Note that option "include" won't be rewritten by command "CONFIG REWRITE"
# from admin or Redis Sentinel. Since Redis always uses the last processed
# line as value of a configuration directive, you'd better put includes
# at the beginning of this file to avoid overwriting config change at runtime.
#
# If instead you are interested in using includes to override configuration
# options, it is better to use include as the last line.
#
# include /path/to/local.conf
# include /path/to/other.conf

################################## NETWORK #####################################
# 网络模块
bind 127.0.0.1

# 开启保护模式
protected-mode yes

# 连接的服务器端口
port 6379

tcp-backlog 511

# 超时时间
timeout 0

tcp-keepalive 300

################################# GENERAL #####################################

# When Redis is supervised by upstart or systemd, this parameter has no impact.
# 默认为 daemonize no
# 需要手动改为yes,我们需要后台启动
daemonize yes

# 如果以后台方式运行,就需要指定一个pid文件
pidfile /var/run/redis_6379.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 ""

# 默认有16个数据库
databases 16

# 是否显示logo
always-show-logo yes

set-proc-title yes

proc-title-template "{title} {listen-addr} {server-mode}"

################################## SECURITY ###################################
# 可以设置Redis的密码

# auth
# config set requirepass root
# 设置密码使用命令
requirepass root


################################### CLIENTS ####################################
# 客户端的一些限
# 最大客户端连接数
maxclients 10000

############################## MEMORY MANAGEMENT ################################
# 内存设置

# 设置最大内存
# maxmemory <bytes>

# The default is:
# 内存满了,有什么策略,和JUC中的那四种拒绝策略有点类似
# 1.volatile-lru:只对设置了过期时间的key进行lru
# 2.allkeys-lru:删除lru算法的key
# 3.volatile-random:随机删除即将过期的
# 4.allkeys-random:随机删除
# 5.volatile-ttl:删除即将过期的
# 6.noeviction:返回错误
maxmemory-policy noeviction

############################# LAZY FREEING ####################################

lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no

lazyfree-lazy-user-del no

lazyfree-lazy-user-flush no

配置RDB(Redis DataBase)持久化

Redis是内存性数据库,如果不讲内存中的数据保存到磁盘中,那么一旦服务器退出,服务器中的服务器状态也就消失了,所以需要学会Redis中的持久化操作

在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是Snapshot快照,它恢复时是将快照文件直接读取到内存里。

Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文
件替换上次持久化好的文件。整个过程中,主进程是不进行任何IO操作的。这就确保了极高的性能。如果需要进行大规模数据的恢
复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。

RDB的优点是效率高,对于数据的完整性要求不高

RDB的缺点是最后一次持久化后的数据可能丢失。

rdb文件默认保存为dump.rdb

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
################################ SNAPSHOTTING  ################################
# 快照:做持久化的时候会用到。
# 在规定的时间内执行了多少次操作就会生成一个.rdb文件或者.aof文件

# Redis是内存数据库,如果没有持久化,用完数据就没了
# 持久化规则
# 3600s内至少有一个key进行了修改,则进行持久化操作
save 3600 1
# 300s内至少有100个key进行了修改,则进行持久化操作
save 300 100
# 60s内至少有10000个key进行了修改,则进行持久化操作
save 60 10000

# 持久化出错后,是否还继续工作
stop-writes-on-bgsave-error yes

# 是否压缩rdb文件,消耗CPU资源
rdbcompression yes

# 是否校验rdb文件的数目
rdbchecksum yes

# 持久化生成的文件名字
dbfilename dump.rdb

rdb-del-sync-files no

# 保存的目录,当前目录
dir ./

配置AOF(Append Only File)文件

以日志的形式来记录每个写操作,将Redis执行过的所有指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis
启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复
工作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
############################## APPEND ONLY MODE ###############################
# 持久化文件aof的配置
# 默认关闭aof,默认开启rdb的持久化,大部分情况下,rdb完全够用
appendonly no

# 持久化文件的名字
appendfilename "appendonly.aof"

# appendfsync always # 每次修改都同步一下
appendfsync everysec # 每1s都同步一下
# appendfsync no # 不同步,操作系统自己同步

# 是否重写
# incrby view 10
# incrby view 20
# 重写后
# incrby 30
no-appendfsync-on-rewrite no

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

如果aof中被恶意篡改了,这时候redis是启动不起来的,这时候可以使用redis提供的一个工具redis-check-aof.exe

优点:每一次修改都同步,文件的完整性会更好,

缺点:该文件远远大于rdb,修复速度远远慢于rdb,运行效率比rdb低

小结:

  1. RDB 持久化方式能够在指定的时间间隔内对你的数据进行快照存储

  2. AOF 持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以Redis 协
    自加保存每次写的操作到文件未尾,Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大。

  3. 只做缓存,如果你只希望你的数据在服务器运行的时候存在,你也可以不使用任何持久化

  4. 同时开启两种持久化方式

  • 在这种情况下,当redis重启的时候会优先载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集要比RDB
    文件保存的数据集要完整。
  • RDB 的数据不实时,同时使用两者时服务器重启也只会找AOF文件,那要不要只使用AOF呢?作者建议不要,因为RDB更适合
    用于备份数据库(AOF在不断变化不好备份),快速重启,而且不会有AOF可能潜在的Bug,留着作为一个万一的手段。
  1. 性能建议
  • 因为RDB文件只用作后备用途,建议只在Slave上持久化RDB文件,而且只要15分钟备份一次就够了,只保留 save 900 1这条规则。
  • 如果Enable AOF,好处是在最恶劣情况下也只会丢失不超过两秒数据,启动脚本较简单只load自己的AOF文件就可以了
    • 代价一是带来了持续的IO
    • 代价二是AOF rewrite 的最后将 rewrite 过程中产生的新数据写到新文件造成的阻塞几乎是不可避免的。只要硬盘许可,应该尽量减少AOF rewrite 的频率,AOF重写的基础大小默认值64M太小了,可以设到5G以上,默认超过原大小100%大小重写可以改到适当的数值。
  • 如果不Enable AOF,仅靠Master-Slave Repllcation(主从复制)实现高可用性也可以,能省掉一大笔IO,也减少了rewrite时带来的系统波动。代价是如果Master/Slave 同时断电,会丢失十几分钟的数据,启动脚本也要比较两个Master/Slave中的RDB文件,载入较新的那个。
给作者买杯咖啡吧~~~