之前或多或少的也了解过redis,不过并未深入做过学习,现在由于工作的原因需要接触和使用redis,虽然不是开发人员,但做为运维人员势必有监控、调优方面的需求。所以还是很我必要了解下redis.conf里的配置参数 。以下是取自redis 默认通过ubuntu apt源安装的redis的默认配置文件 。 较短的参数解释直接在参数文件里就做了说明 ,需要较长篇幅解释的单独列出。

默认参数

 1361way@ubuntu ~$ egrep -v '(^#|^$)' redis.conf
 2##############基本配置部分##################
 3daemonize yes
 4#是否在后台运行
 5pidfile /var/run/redis/redis-server.pid
 6#运行时redis的pid文件存放的路径
 7port 6379
 8#redis监听的端口
 9bind 127.0.0.1
10#监听地址
11timeout 0
12#设置客户端连接时的超时时间,单位为秒。当客户端在这段时间内没有发出任何指令,那么server端关闭该连接。0为永不超时
13tcp-keepalive 0
14loglevel notice
15logfile /var/log/redis/redis-server.log
16#日志文件存放的路径
17databases 16
18############Snapshotting配置##################
19save 900 1    #900秒之内有1个keys发生变化时
20save 300 10   #300秒之内有10个keys发生变化时
21save 60 10000 #60秒之内有1万个keys发生变化时
22stop-writes-on-bgsave-error yes
23#是否启用停止写在save出错的时候
24rdbcompression yes
25#是否启用rdb文件压缩手段,默认为yes 。压缩需要额外的cpu开支,不过这能够有效的减小rdb文件的大小,有利于存储/备份/传输/数据恢复。
26rdbchecksum yes
27#是否对rdb文件使用CRC64校验和,默认为”yes”,那么每个rdb文件内容的末尾都会追加CRC校验和。
28#对于其他第三方校验工具,可以很方便的检测文件的完整性 。
29dbfilename dump.rdb
30#指定rdb文件的名称
31dir /var/lib/redis
32#指定rdb/AOF文件的目录位置,只能为文件夹不能为文件
33################ Replication ##################
34slave-serve-stale-data yes
35#如果当前server是slave,那么当slave与master失去通讯时,是否继续为客户端提供服务,”yes”表示继续,”no”表示终止。
36slave-read-only yes
37repl-disable-tcp-nodelay no
38slave-priority 100
39appendonly no
40appendfilename "appendonly.aof"
41#更新日志文件名,默认值为appendonly.aof
42appendfsync everysec
43#no表示让操作系统(OS)进行数据缓存同步到磁盘(执行快),always表示每次更新操作后调用fsync()将数据写到磁盘(最安全),everysec表示每秒同步一次。
44no-appendfsync-on-rewrite no
45auto-aof-rewrite-percentage 100
46auto-aof-rewrite-min-size 64mb
47#如果达到64M的百分之百就停止写入
48lua-time-limit 5000
49#执行一个LUA脚本时的最大时间,防止死循环等等,设置为0是没有限制,单位为秒
50slowlog-log-slower-than 10000
51slowlog-max-len 128
52notify-keyspace-events ""
53hash-max-ziplist-entries 512
54hash-max-ziplist-value 64
55#redis 2.0后引入了 hash 数据结构,hash 中包含超过指定元素个数并且最大的元素当没有超过临界时,hash 将以zipmap来存储。
56#zipmap又称为 small hash,可大大减少内存的使用
57list-max-ziplist-entries 512
58list-max-ziplist-value 64
59set-max-intset-entries 512
60zset-max-ziplist-entries 128
61zset-max-ziplist-value 64
62activerehashing yes
63client-output-buffer-limit normal 0 0 0
64client-output-buffer-limit slave 256mb 64mb 60
65client-output-buffer-limit pubsub 32mb 8mb 60
66hz 10
67#一个任务可以使用的cpu数目
68aof-rewrite-incremental-fsync yes

tcp-keepalive:指定TCP连接是否为长连接,”侦探”信号由server端维护,长连接将会额外的增加server端的开支
#默认为0.表示禁用,非0值表示开启”长连接”;”侦探”信号的发送间隔将有linux系统决定。在多次”侦探”后,如果对等端仍不回复,将会关闭连接,否则连接将会被保持开启。

loglevel:server日志级别,合法值:debug,verbose,notice,warning 默认为notice 。

  • debug适合开发环境,客户端操作信息都会输出日志
  • verbose输出一些相对有用的信息,目前效果不明
  • notice适合生产环境
  • warning异常信息

databases:设定redis所允许的最大”db簇”的个数,默认为16个簇。客户端可以通过”select”指令指定需要使用的”db簇”索引号,默认为0。 redis的顶层数据结构中,所有K-V都潜在的包括了”db簇”索引号,任何一个key都将隶属于一个”db”。 任何对数据的检索,只会覆盖指定的”db”;例如数据被插入到”db10″中,那么在”db 1″中去get,将会返回null。 对数据归类到不同的db簇中,可以帮助我们实现一些特定的需求,比如根据不同客户端连接,来指定不同的db索引号。

save :在多少秒期间至少多少个变更操作”触发snapshot,snapshot最终将生成新的dump.rdb文件 。 设置 Redis 进行数据库镜像的频率。保存数据到disk的策略 。save ” “用来禁用snapshot功能。

appendonly:是否在每次更新操作后进行日志记录,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中,默认值为no。

开启append only 模式后,redis 将每一次写操作请求都追加到appendonly.aof 文件中,redis重新启动时,会从该文件恢复出之前的状态。但可能会造成 appendonly.aof 文件过大,所以redis支持BGREWRITEAOF 指令,对appendonly.aof重新整理。

其他参数:

maxclients 10000 :客户端链接的最大数量

slaveof : 将当前server做为slave,并为其指定master信息

requirepass 密码:当前server的授权密码

masterauth :以认证的方式连接到master。 如果master中使用了”密码保护”,slave必须交付正确的授权密码,才能连接成功。此配置项中值需要和master机器的”requirepass”保持一致。

vm-enabled yes :redis 是一个内存数据库,当内存满时,无法接收新的写请求,所以在redis2.0后,提供了虚拟内存的支持。但需要注意的是redis 所有的key都会放在内存中,在内存不够时,只把value 值放入交换区中。虽然使用虚拟内存,但性能基本不受影响,需要注意的是要把vm-max-memory设置到足够来放下所有的key。

vm-swap-file /tmp/redis.swap :设置虚拟内存的交换文件路径,不可多个Redis实例共享

vm-max-memory 0 :设置开启虚拟内存后,redis将使用的最大物理内存大小, 默认为0,redis将把他所有能放到交换文件的都放到交换文件中,以尽量少的使用物理内存。即当vm-max-memory设置为0的时候,其实是所有value都存在于磁盘。在生产环境下,需要根据实际情况设置该值,最好不要使用默认的 0 。

vm-page-size 32:设置虚拟内存的页大小。如果 value 值比较大,如要在 value 中放置博客、新闻之类的所有文章内容,就设大一点。

vm-pages 134217728:设置交换文件的总的 page 数量。注意page table信息是放在物理内存中,每8个page 就会占据RAM中的 1 个 byte,总的虚拟内存大小 = vm-page-size * vm-pages 。

vm-max-threads 4:设置 VM IO 同时使用的线程数量。

activerehashing yes:是否重置Hash表,设置成yes后redis将每100毫秒使用1毫秒CPU时间来对redis的hash表重新hash,可降低内存的使用。当使用场景有较为严格的实时性需求,不能接受Redis时不时的对请求有2毫秒的延迟的话,把这项配置为no。如果没有这么严格的实时性要求,可以设置为 yes,以便能够尽可能快的释放内存。

slave-serve-stale-data yes:如果当前server是slave,那么当slave与master失去通讯时,是否继续为客户端提供服务,”yes”表示继续,”no”表示终止.
在”yes”情况下,slave继续向客户端提供只读服务,有可能此时的数据已经过期.
在”no”情况下,任何向此server发送的数据请求服务(包括客户端和此server的slave)都将被告知”error”