3.这就已经安装完成了,接下来最重要的就是redis的运行配置参数,redis文件夹下面有一个redis.conf的配置文件,编辑此文件,里面有很多的英文注释和配置行,介绍了参数的作用和用法,下面进行详细介绍:
------------------------------------------------------------------------------------------------------
配置redis:
daemonize yes #作为守护进程(后台程序)执行,默认为no。
pidfile /usr/local/redis-master/var/redis.pid #指定pid文件。
port 6379 #指定端口。
bind 127.0.0.1 #绑定连接。
timeout 600 #超时断开连接,如果为0表示永不超时。
tcp-keepalive 60 #tcp连接保持,选择建议的60秒。
loglevel debug|verbose|notice|warning #日志信息越来越少,debug>verbose>notice>warning,生产环境用notice。
logfile /usr/local/redis-master/log/redis.log #指定日志文件,stdout表标准输出(如果daemonize,日志会被发送到/dev/null)。
databases 10 #设置数据库数量,默认数据库是DB 0,连接时可以使用SELECT<dbid>(dbid从0到databases-1)选择不同的数据库。
#### SNAPSHOTTING ####
save 900 1 #刷新快照到硬盘中,必须满足两者要求才会触发,即900秒之后至少1个关键字发生变化。
save 300 10 #必须是300秒之后至少10个关键字发生变化。
save 60 10000 #必须是60秒之后至少10000个关键字发生变化。
stop-writes-on-bgsave-error yes #后台存储错误停止写。
rdbcompression yes #使用LZF压缩rdb文件。
rdbchecksum yes #存储和加载rdb文件时校验。
dbfilename dump.rdb #设置rdb文件名。
dir /usr/local/redis-master/data/ #设置工作目录,rdb文件会写入该目录。
#### REPLICATION ####
slaveof <masterip><masterport> #创建slave,它是master的备份。
masterauth <master-password> #如果master设置了密码,slave需要进行认证。
slave-serve-stale-data yes #当slave失去与master的连接,或正在拷贝中,如果为yes,slave会响应客户端的请求,数据可能不同步甚至没有数据,如果为no,slave会返回错误"SYNC with master in progress"。
slave-read-only yes #如果为yes,slave实例只读,如果为no,slave实例可读可写。
repl-ping-slave-period 10 #slave发送ping给master的时间间隔,单位是秒。
repl-timeout 60 #Bulktransfer I/O超时,或ping响应超时,单位是秒,值必须要比repl-ping-slave-period大。
slave-priority 100 #如果master不能再正常工作,那么会在多个slave中,选择优先值最小的一个slave提升为master,优先值为0表示不能提升为master。
#### SECURITY ####
requirepass <password> #设置访问密码,密码要足够强。
rename-command <dangerous-command><strange-command> #给一些危险的指令进行重命名,如果重命名为“”,取消该命令。
#### LIMITS ####
maxclients 10000 #客户端并发连接数的上限是10000,到达上限,服务器会关闭所有新连接并返回错误"max numberof clients reached"。
maxmemory <bytes> #设置最大内存,到达上限,服务器会根据驱逐政策(eviction policy)删除某些键值,如果政策被设置为noeviction,那么redis只读,对于增加内存的操作请求返回错误。
maxmemory-policyvolatile-lru|allkeys-lru|volatile-random|allkeys-random|volatile-ttl|noeviction #设置驱逐政策(eviction policy)。
maxmemory-samples 3 #LRU和minimal TTL是近似算法(为了节省内存),它们会在一个有3个键值的样本中选择较没用的那个。
#### APPEND ONLY MODE ####
appendonly no #redis默认采用快照(snapshotting)异步转存到硬盘中,它是根据save指令来触发持久化的,当Redis异常中断或停电时,可能会导致最后一些写操作丢失。AOF(Append OnlyFile,只追加文件)可以提供更好的持久性,结合apendfsync指令可以把几分钟的数据丢失降至一秒钟的数据丢失,它通过日志把所有的操作记录下来,AOF和RDB持久化可以同时启动。
appendfilename appendonly.aof #指定aof的文件名。
apendfsync always|everysec|no #调用fsync()写数据到硬盘中,always是每一次写操作就马上同步到日志中,everysec是每隔一秒强制fsync,no是不调用fsync(),让操作系统自己决定何时同步。
no-appendfsync-on-rewrite no #如果为yes,当BGSAVE或BGREWRITEAOF指令运行时,即把AOF文件转写到RDB文件中时,会阻止调用fsync()。
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb #Redis会将AOF文件最初的大小记录下来,如果当前的AOF文件的大小增加100%并且超过64mb时,就会自动触发Redis改写AOF文件到RDB文件中,如果auto-aof-rewrite-percentage为0表示取消自动rewrite功能。
#### LUA SCRIPTING ####
lua-time-limit 5000 #一个Lua脚本最长的执行时间为5000毫秒(5秒),如果为0或负数表示无限执行时间。
#### SLOW LOG ####
slowlog-log-slower-than 10000 #当某个请求执行时间(不包括IO时间)超过10000微妙(10毫秒),把请求记录在慢日志中,如果为负数不使用慢日志,如果为0强制记录每个指令。
slowlog-max-len 128 #慢日志的最大长度是128,当慢日志超过128时,最先进入队列的记录会被踢出来,慢日志会消耗内存,你可以使用SLOWLOG RESET清空队列回收这些内存。
#### ADVANCED CONFIG ####
hash-max-ziplist-entries 512
hash-max-ziplist-value 64 #较小的hash可以通过某种特殊的方式进行编码,以节省大量的内存空间,我们指定最大的条目数为512,每个条目的最大长度为64。
list-max-ziplist-entries 512
list-max-ziplist-value 64 #同上。
zset-max-ziplist-entries 128
zset-max-ziplist-value 64 #同上。
activerehashing yes #重新哈希the main Redis hash table(the one mapping top-level keysto values),这样会节省更多的空间。
client-output-buffer-limit normal 0 0 0 #对客户端输出缓冲进行限制可以强迫那些就不从服务器读取数据的客户端断开连接。对于normal client,第一个0表示取消hard limit,第二个0和第三个0表示取消soft limit,normal client默认取消限制,因为如果没有寻问,他们是不会接收数据的。
client-output-buffer-limit slave 256mb64mb 60 #对于slave client和MONITER client,如果client-output-buffer一旦超过256mb,又或者超过64mb持续60秒,那么服务器就会立即断开客户端连接。
client-output-buffer-limit pubsub 32mb8mb 60 #对于pubsub client,如果client-output-buffer一旦超过32mb,又或者超过8mb持续60秒,那么服务器就会立即断开客户端连接。
#### INCLUDES ####
include /path/to/conf #包含一些可以重用的配置文件。
------------------------------------------------------------------------------------------------------
最后说一点:
调整系统内核参数,如果内存情况比较紧张的话,需要设定内核参数:
Linux命令:cat /proc/sys/vm/overcommit_memory
这里说一下这个配置的含义:/proc/sys/vm/overcommit_memory
该文件指定了内核针对内存分配的策略,其值可以是0、1、2。
0,表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1,表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2,表示内核允许分配超过所有物理内存和交换空间总和的内存
修改方法:
vim /etc/sysctl.conf
末尾追加:vm.overcommit_memory=1
然后执行:sysctl vm.overcommit_memory=1 使之生效
Redis在dump数据的时候,会fork出一个子进程,理论上child进程所占用的内存和parent是一样的,比如parent占用的内存为 8G,这个时候也要同样分配8G的内存给child, 如果内存无法负担,往往会造成redis服务器的down机或者IO负载过高,效率下降。所以这里比较优化的内存分配策略应该设置为 1(表示内核允许分配所有的物理内存,而不管当前的内存状态如何)