想要了解更多,加QQ群72132378
1
2
3
|
tar -xf redis-
3.0
.
7
.tar.gz
cd redis-
3.0
.
7
make
|
1
2
3
4
|
mkdir -p /usr/local/redis/{conf,bin}
cp *.conf /usr/local/redis/conf/
cp runtest* /usr/local/redis/
cp mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-dump redis-cli redis-sentinel redis-server redis-trib.rb /usr/local/redis/bin/
|
1
|
mkdir -pv /data/redis/db
|
1
|
mkdir /data/log/redis -pv
|
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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
|
daemonize yes
#redis 以独立守护模式进程
pidfile /
var
/run/redis.pid
#指定pid文件路径
port
6379
#指定redis运行的端口
tcp-backlog
511
#TCP 监听的最大容纳数量,在高并发的环境下,你需要把这个值调高以避免客户端连接缓慢的问题。Linux 内核会一声不响的把这个值缩小成 /proc/sys/net/core/somaxconn对应的值,所以你要修改这两个值才能达到你的预期。
# bind
127.0
.
0.1
#指定redis监听的地址,默认监听所有
# unixsocket /tmp/redis.sock
#指定redis在Linux下socket文件路径
timeout
0
#客户端空闲多少秒后断开连接;默认是
0
表示不断开。
tcp-keepalive
0
#如果设置为非零,则在与客户端缺乏通讯的时候使用 SO_KEEPALIVE 发送 tcp acks 给客户端。推荐一个合理的值就是
60
秒。
loglevel notice
#日志文件级别,提供debug,verbose,notice,warning四种日志级别。
logfile
"/data/log/redis/redis.log"
#指定日志文件路径
databases
16
#指定数据库实例的数量,默认为
16
个,默认使用的数据库是DB
0
。
#RDB持久化的相关规则
#-------------------------------
save
900
1
#
900
秒有一个key变化则写磁盘
save
300
10
#
300
秒有
10
个key变化,则写磁盘
save
60
10000
#
60
秒有
10000
个key变化,则写磁盘
#-------------------------------
stop-writes-on-bgsave-error yes
默认情况下,如果 redis 最后一次的后台保存失败,redis 将停止接受写操作,这样以一种强硬的方式让用户知道数据不能正确的持久化到磁盘,否则就会没人注意到灾难的发生。如果后台保存进程重新启动工作了,redis 也将自动的允许写操作。然而你要是安装了靠谱的监控,你可能不希望 redis 这样做,那你就改成 no 好了。
rdbcompression yes
# 是否在 dump .rdb 数据库的时候使用 LZF 压缩字符串,默认都设为 yes如果你希望保存子进程节省点 cpu ,你就设置它为 no ,不过这个数据集可能就会比较大。
rdbchecksum yes
#是否校验RDB文件
dbfilename dump.rdb
#RDB文件保存文件名
dir /data/redis/db
#DB文件保存路径RDB和AOF文件
# slaveof <masterip> <masterport>
#开启redis主从复制设置
# masterauth <master-password>
#连接主服务器需要的认证密码
slave-serve-stale-data yes
# 当一个 slave 与 master 失去联系,或者复制正在进行的时候,slave 可能会有两种表现:
#
1
) 如果为 yes ,slave 仍然会应答客户端请求,但返回的数据可能是过时,或者数据可能是空的在第一次同步的时候
#
2
) 如果为 no ,在你执行除了 info he salveof 之外的其他命令时,slave 都将返回一个
"SYNC with master in progress"
的错误。
slave-read-only yes
#设置salve是否为只读模式,
2.6
之后,redis默认slave都是read-only的。
repl-diskless-sync no
# 复制集同步策略:磁盘或者socket
# 新slave连接或者老slave重新连接时候不能只接收不同,得做一个全同步。需要一个新的RDB文件dump出来,然后从master传到slave。可以有两种情况:
#
1
)基于硬盘(disk-backed):master创建一个新进程dump RDB,完事儿之后由父进程(即主进程)增量传给slaves。
#
2
)基于socket(diskless):master创建一个新进程直接dump RDB到slave的socket,不经过主进程,不经过硬盘。
# 基于硬盘的话,RDB文件创建后,一旦创建完毕,可以同时服务更多的slave。基于socket的话, 新slave来了后,得排队(如果超出了repl-diskless-sync-delay还没来),完事儿一个再进行下一个。
# 当用diskless的时候,master等待一个repl-diskless-sync-delay的秒数,如果没slave来的话,就直接传,后来的得排队等了。否则就可以一起传。
# disk较慢,并且网络较快的时候,可以用diskless。(默认用disk-based)
repl-diskless-sync-delay
5
#当启用无硬盘备份,服务器等待一段时间后才会通过套接字向从站传送RDB文件,这个等待时间是可配置的。这一点很重要,因为一旦传送开始,就不可能再为一个新到达的从站服务从站则要排队等待下一次RDB传送。因此服务器等待一段时间以期更多的从站到达。 延迟时间以秒为单位,默认为
5
秒。要关掉这一功能,只需将它设置为
0
秒,传送会立即启动。
# repl-ping-slave-period
10
#默认值
10
,指定slave定期ping master的周期;
# repl-timeout
60
#以下内容设置备份的超时时间:
#
1
)从从站的角度,同步期间的批量传输的I/O
#
2
)从站角度认为的主站超时(数据,ping)
#
3
)主站角度认为的从站超时(REPLCONF ACK pings)
#确认这些值比定义的repl-ping-slave-period要大,否则每次主站和从站之间通信低速时都会被检测为超时。
repl-disable-tcp-nodelay no
#同步之后是否禁用从站上的TCP_NODELAY?
#如果你选择yes,redis会使用较少量的TCP包和带宽向从站发送数据。但这会导致在从站增加一点数据的延时。linux内核默认配置情况下最多
40
毫秒的延时。
#如果选择no,从站的数据延时不会那么多,但备份需要的带宽相对较多。
#默认情况下我们将潜在因素优化,但在高负载情况下或者在主从站都跳的情况下,把它切换为yes是个好主意。
# repl-backlog-size 1mb
#设置备份的工作储备大小。工作储备是一个缓冲区,当从站断开一段时间的情况时,它替从站接收存储数据,因此当从站重连时,通常不需要完全备份,只需要一个部分同步就可以,#即把从站断开时错过的一部分数据接收。
#工作储备越大,从站可以断开并稍后执行部分同步的断开时间就越长。
#只要有一个从站连接,就会立刻分配一个工作储备。
# repl-backlog-ttl
3600
#主站有一段时间没有与从站连接,对应的工作储备就会自动释放。接下来这个选项用于配置释放前等待的秒数,秒数从断开的那一刻开始计算。 值为
0
表示不释放。
slave-priority
100
#从站优先级是可以从redis的INFO命令输出中查到的一个整数。当主站不能正常工作时,redis sentinel使用它来选择一个从站并将它提升为主站。
#低优先级的从站被认为更适合于提升,因此如果有三个从站优先级分别是
10
,
100
,
25
,sentinel会选择优先级为
10
的从站,因为它的优先级最低。
#然而优先级值为
0
的从站不能执行主站的角色,因此优先级为
0
的从站永远不会被redis sentinel提升。
#默认优先级是
100
# min-slaves-to-write
3
# min-slaves-max-lag
10
#主站可以停止接受写请求,当与它连接的从站少于N个,滞后少于M秒。
#N个从站必须是在线状态。
#延迟的秒数必须<=所定义的值,延迟秒数是从最后一次收到的来自从站的ping开始计算。ping通常是每秒一次。
#这一选项并不保证N个备份都会接受写请求,但是会限制在指定秒数内由于从站数量不够导致的写操作丢失的情况。
#如果想要至少
3
个从站且延迟少于
10
秒,以上配置
#设置某一个为
0
表示禁用这一功能。
# min-slaves-max-lag
is
set
to
10
.
#默认情况下
default
min-slaves-to-write设置为
0
(禁用)而min-slaves-max-lag设置为
10
。
# requirepass foobared
#多数情况下无需密码鉴别slave。同时,由于redis处理速度太快,所以爆破速率可达150K/S。
10
万/S。所以如果你要设置密码,必须设置超强的密码。
# rename-command CONFIG
""
# 命令重命名,在一个shared环境里,可以对危险的命令,比如CONFIG,进行重命名:也可以用空字符串,达到完全屏蔽此命令的目的。
# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
# rename-command CONFIG
""
# 记录进AOF或者传给slave的重命名操作可能会引发问题哦~。
# maxclients
10000
设置最大client连接数。默认
10000
一万个。
# maxmemory <bytes>
#如果redis用内存超过了设置的限制,第一,开始用maxmemory-policy配置的策略往外删数据,如果配置成了noeviction。所有write都会拒绝,比如
set
,lpush等。所有读请求可以接受。主要用在把redis用在LRU缓存,或者用在一个内存吃紧又不能删除的策略上。如果你有slave,你应该把最大内存别设置的太大,留一些系统内存给slave output buffers(如果是noeviction策略,就无需这样设置了)
# 内存策略。
# volatile-lru ->用LRU删除设置了ttl的key
# allkeys-lru ->用LRU删除任何key
# volatile-random ->随机删除有ttl的key
# allkeys-random ->随机删除任何key
# volatile-ttl ->删除即将ttl到期的key
# noeviction ->不删,有write的时候报错
# maxmemory-policy noeviction
#默认值volatile-lru,指定清除策略,有上面几种
# maxmemory-samples
5
默认值
3
,LRU和最小TTL策略并非严谨的策略,而是大约估算的方式,因此可以选择取样值以便检查。
appendonly no
#是否开启AOF模式
appendfilename
"appendonly.aof"
#指定AOF文件名
# appendfsync always
appendfsync everysec
# appendfsync no
#调用fsync()方式让操作系统写数据到磁盘上,数据同步方式,以上几种
#always 总是写,一旦key发生变化就写磁盘,会消耗大量的系统资源。
#appendfsync everysec 每秒写一次磁盘,比较安全。
# appendfsync no不调用fsync,由操作系统决定何时同步,比较高效。
no-appendfsync-on-rewrite no
#默认值no。当AOF fsync策略设置为always或everysec,后台保存进程会执行大量的I/O操作。某些linux配置下redis可能会阻塞过多的fsync()调用。
auto-aof-rewrite-percentage
100
auto-aof-rewrite-min-size 64mb
# 自动重写AOF
# 当AOF文件大小到一定比例,就自动隐式调用BGREWRITEAOF
#过程:redis记住最后一次rewrite时aof文件大小(重启后没rewrite的话,就是启动时AOF文件的大小),如果现在AOF大小和上次的比例达到特定值就重写。也要指定最小AOF大小,防止到
2
倍:1M的时候也重写。
# 把percentage改成
0
,就是禁用重写。
aof-load-truncated yes
# AOF文件可能在尾部是不完整的(上次system关闭有问题,尤其是mount ext4文件系统时没有加上data=ordered选项。只会发生在os死时,redis自己死不会不完整)。那redis重启时load进内存的时候就有问题了。
# 发生的时候,可以选择redis启动报错,或者load尽量多正常的数据。
# 如果aof-load-truncated是yes,会自动发布一个log给客户端然后load(默认)。如果是no,用户必须手动redis-check-aof修复AOF文件才可以。
lua-time-limit
5000
# 如果达到最大时间限制(毫秒),redis会记个log,然后返回error。
# 当一个脚本超过了最大时限。只有SCRIPT KILL和SHUTDOWN NOSAVE可以用。第一个可以杀没有调write命令的东西。要是已经调用了write,只能用第二个命令杀。
# 设置成
0
或者负值,时限就无限。
# cluster-enabled yes
#是否打开集群功能在
3.0
以后的版本支持集群。
# cluster-config-file nodes-
6379
.conf
#指定集群配置文件
# cluster-node-timeout
15000
#RedisCluster采用quorum+心跳的机制。从节点的角度看,节点会定期给其他所有的节点发送Ping,cluster-node-timeout(可配置,秒级)时间内没有收到对方的回复,则单方面认为对端节点宕机,将该节点标为PFAIL状态。
# cluster-slave-validity-factor
10
#如果将该项设置为
0
,不管slave节点和master节点间失联多久都会一直尝试failover(设为正数,失联大于一定时间(factor*节点TimeOut),不再进行FailOver)。比如,如果节点的timeout设置为
5
秒,该项设置为
10
,如果master跟slave之间失联超过
50
秒,slave不会去failover它的master(意思是不会去把master设置为挂起状态,并取代它)。注意:任意非
0
数值都有可能导致当master挂掉又没有slave去failover它,这样redis集群不可用。在这种情况下只有原来那个master重新回到集群中才能让集群恢复工作。
# cluster-migration-barrier
1
#一个master可以拥有的最小slave数量。该项的作用是,当一个master没有任何slave的时候,某些有富余slave的master节点,可以自动的分一个slave给它。
# cluster-require-full-coverage yes
#如果该项设置为yes(默认就是yes)当一定比例的键空间没有被覆盖到(就是某一部分的哈希槽没了,有可能是暂时挂了)集群就停止处理任何查询炒作。如果该项设置为no,那么就算请求中只有一部分的键可以被查到,一样可以查询(但是有可能会查不全)
slowlog-log-slower-than
10000
#线程阻塞不能服务其他请求的时间长度。两个参数:第一个是时长(以微秒为单位!,是毫秒的千分之一。)。第二个是log的size,超过了,就会删除之前的log。
#
1000000
是一秒。负值是所有请求都记log!下边是
0
.10S。
100
毫秒。
slowlog-max-len
128
# log长度的设置值是没限制。但是需要内存。
latency-monitor-threshold
0
# 用LATENCY打印redis实例在跑命令时的耗时图表。
# 只记录大于等于下边设置的值的操作。
0
的话,就是关闭监视。可以动态开启。直接运行CONFIG SET latency-monitor-threshold <milliseconds>
notify-keyspace-events
""
# 可以通知pub/sub客户端关于key空间的变化。http:
//redis.io/topics/notifications
# 比如如果开着开关。一个client进行了DEL操作在“foo”key上在database0上。两个消息将会发布通过 pub/sub
# PUBLISH __keyspace@0__:foo del
# PUBLISH __keyevent@0__:del foo
# 大部分人不需要这个功能,并且还需要一定开销,所以默认关闭。
hash-max-ziplist-entries
512
hash-max-ziplist-value
64
# hash结构存储,小数据量的用数组,大数据量用map(encoding保存结构信息)
list-max-ziplist-entries
512
list-max-ziplist-value
64
# 与hash类似,满足条件的list数组也会采用特殊的方式以节省空间。
set
-max-intset-entries
512
# 默认值
512
,当
set
类型中的数据都是数值类型,并且
set
中整型元素的数量不超过指定值时,使用特殊的编码方式。
zset-max-ziplist-entries
128
zset-max-ziplist-value
64
#与hash和list类似。
hll-sparse-max-bytes
3000
#HyperLogLog 不懂。大于
16000
完全不可接受!当CPU很顶得住的话,给
10000
可以。默认给
3000
.
activerehashing yes
# Active rehashing 越多次的操作进入了正在进行rehash的table,越多的rehash步骤需要执行。如果redis是空闲的,那么rehash操作是永远没法停止的,越多的内存也被消耗了。
# 默认就用yes就行 了如果你想释放内存ASAP。
client-output-buffer-limit normal
0
0
0
client-output-buffer-limit slave 256mb 64mb
60
client-output-buffer-limit pubsub 32mb 8mb
60
# client output buffer限制,可以用来强制关闭传输缓慢的客户端(比如redis pub的东西有比较慢的client无法及时sub)
# client-output-buffer-limit <
class
> <hard limit> <soft limit> <soft seconds>
#
class
可以为以下:
#
# normal -> normal clients including MONITOR clients
# slave -> slave clients
# pubsub -> clients subscribed to at least one pubsub channel or pattern
# 当hard限制到了会立即被关闭客户端。如果soft限制到了,会等soft秒。
# 比如硬限制是32m,soft是16m,10secs。到32m就立即断,或者在16m以上停止了10secs。
# 设置成
0
就是关闭。
hz
10
# redis内部调度(进行关闭timeout的客户端,删除过期key等等)频率,越大则调度频率越高。设置成
100
以上会对CPU造成大压力除非你对线上实时性要求很高。可以在
1
~
500
之间。
aof-rewrite-incremental-fsync yes
# 当child进程在rewrite AOF文件,如果这个选项是yes,那么这个file每32MB会写fsync()。这个是保证增量写硬盘而防止写硬盘时I/O突增。
|
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
|
daemonize no
pidfile /
var
/run/redis.pid
port
6379
tcp-backlog
511
timeout
0
tcp-keepalive
0
loglevel notice
logfile
"/data/log/redis/redis.log"
databases
16
save
900
1
save
300
10
save
60
10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /data/redis/db
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay
5
repl-disable-tcp-nodelay no
slave-priority
100
appendonly yes
appendfilename
"appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage
100
auto-aof-rewrite-min-size 1024mb
aof-load-truncated yes
lua-time-limit
5000
slowlog-log-slower-than
10000
slowlog-max-len
128
latency-monitor-threshold
0
notify-keyspace-events
""
hash-max-ziplist-entries
512
hash-max-ziplist-value
64
list-max-ziplist-entries
512
list-max-ziplist-value
64
set
-max-intset-entries
512
zset-max-ziplist-entries
128
zset-max-ziplist-value
64
hll-sparse-max-bytes
3000
activerehashing yes
client-output-buffer-limit normal
0
0
0
client-output-buffer-limit slave 256mb 64mb
60
client-output-buffer-limit pubsub 32mb 8mb
60
hz
10
aof-rewrite-incremental-fsync yes
|
1
|
# /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf
|
1
2
3
|
# ps -ef | grep redis
root
24596
23241
0
14
:
52
pts/
1
00
:
00
:
00
/usr/local/redis/bin/redis-server *:
6379
502
24646
21849
0
14
:
52
pts/
2
00
:
00
:
00
grep redis
|