redis.conf 配置档详解

  1. 云栖社区>
  2. 博客>
  3. 正文

redis.conf 配置档详解

机智如我丶 2015-11-28 21:28:00 浏览2069
展开阅读全文

最近对 Redis 数据库非常感兴趣,所以想详细整理下配置档中的参数以及意义! 下面开始

基本配置

redis 对单位不区分大小写,所以1kb = 1KB =1kB
1k => 1000 bytes
1kb => 1024 bytes
1m => 1000000 bytes
1mb => 1024*1024 bytes
1g => 1000000000 bytes
1gb => 1024*1024*1024 bytes

redis 默认不作为守护程序在后台运行,如果需要,则选择 yes
daemonize yes

redis 运行时pid文件保存在 /var/run/redis/redis.pid ,当然你也可以自己指定
pidfile /var/run/redis/redis.pid

redis 默认监听端口为 6379 ,如果设置为 0 ,则 redis 不会监听一个套接字
port 6379

redis 所绑定的 ip 地址
bind 10.1.0.100

redis 关闭连接后,客户端空闲 N 秒,0禁用
timeout 0

redis 日志级别定义,有下面几个选项
debug : 几乎用不到
verbose : 输出很多无用信息
notice : 默认定义,输出一些提示信息
warning : 输出重大错误信息
loglevel notice

redis 日志位置
logfile /var/log/redis/redis.log

redis 数据库个数定义
databases 16


SNAPSHOTTING

redis 保存快照定义 (RDB 持久化)
save ‘seconds’ ‘changes’
save 900 1 #900秒(15分钟)如果至少有1个关键的变化
save 300 10 #300秒(5分钟)如果至少10键改变
save 60 10000 #60秒后如果至少10000键改变

redis RDB 压缩
如果你想节约CPU,那么则选择 no,默认开启,并且你有可压缩的值或键,那么会更大!
rdbcompression yes

redis RDB 文件名
dbfilename dump.rdb

redis 存放 dump.rdb 的目录
dir /var/lib/redis/


REPLICATION

redis 主从复制区,指定一个 redis 服务器作为slave。那么该 redis 服务器则是其他 redis 服务器的 slave。

redis 从服务器指定
slaveof “masterip” “masterport”

redis master服务设置了密码保护时,slave服务连接master的密码
masterauth “master-password”

redis master slave 设置
当 slave 和 master 之间的连接断开或 slave 正在于 master 同步时,如果有 slave 请求,当 slave-serve-stale-data 配置为 yes时 , slave 可以相应客户端请求;当为 no 时, slave 将要响应错误,默认是 yes
slave-serve-stale-data yes

slave 会按照一个时间间隔向 master 发送 PINGs. 可以通过 repl-ping-slave-period 设置这个时间间隔,默认是 10 秒
repl-ping-slave-period 10

设置主库批量数据传输时间或者 ping 回复时间间隔,默认值是 60 秒,该值必须大于 repl-ping-slave-period 的值。
repl-timeout 60


SECURITY

设置客户端连接后进行任何其他指定前需要使用的密码。
警告:因为 redis 速度相当快,所以在一台比较好的服务器下,一个外部的用户可以在一秒钟进行 150K 次的密码尝试,这意味着你需要指定非常非常强大的密码来防止暴力破解
requirepass foobared


LIMITS

设置同一时间最大客户端连接数,默认无限制, Redis 可以同时打开的客户端连接数为 Redis 进程可以打开的最大文件描述符数,如果设置 maxclients 0 ,表示不作限制。

当客户端连接数到达限制时, Redis 会关闭新的连接并向客户端返回 max number of clients reached 错误信息
maxclients 10000

maxmemory 的设置比较适合于把 redis 当作于类似 memcached 的缓存来使用,而不适合当做一个真实的 DB 。当把 Redis 当做一个真实的数据库使用的时候,内存使用将是一个很大的开销。
maxmemory “bytes”

当内存达到最大值的时候 Redis 会选择删除哪些数据?有五种方式可供选择。
注意:对于上面的策略,如果没有合适的 key 可以移除,当写的时候 Redis 会返回一个错误。默认是 : volatile-lru。
maxmemory-policy volatile-lru

volatile-lru -> 利用 LRU 算法移除设置过过期时间的 key (LRU: 最近使用 Least RecentlyUsed )
allkeys-lru -> 利用 LRU 算法移除任何 key
volatile-random -> 移除设置过过期时间的随机 key
allkeys->random -> remove a randomkey, any key
volatile-ttl -> 移除即将过期的 key (minor TTL)
noeviction -> 不移除任何 key ,只是返回一个写错误

Redis 默认的会选择 3 个样本进行检测,你可以通过 maxmemory-samples 进行设置
maxmemory-samples 3


APPEND ONLY MODE

默认情况下, redis 会在后台异步的把数据库镜像备份到磁盘,但是该备份是非常耗时的,而且备份也不能很频繁,如果发生诸如拉闸限电、拔插头等状况,那么将造成比较大范围的数据丢失。

所以 redis 提供了另外一种更加高效的数据库备份及灾难恢复方式。

开启 append only 模式之后, redis 会把所接收到的每一次写操作请求都追加到 appendonly.aof 文件中,当 redis 重新启动时,会从该文件恢复出之前的状态。

但是这样会造成 appendonly.aof 文件过大,所以 redis 还支持了 BGREWRITEAOF 指令,对 appendonly.aof 进行重新整理。

你可以同时开启 asynchronous dumps 和 AOF
appendonly no

AOF 文件名称 ( 默认 : “appendonly.aof”)
appendfilename appendonly.aof

Redis 支持三种同步 AOF 文件的策略 :
no: 不进行同步,系统去操作 . Faster.
always: always 表示每次有写操作都进行同步 . Slow, Safest.
everysec: 表示对写操作进行累积,每秒同步一次 . Compromise.

默认是 “everysec” ,按照速度和安全折中这是最好的。
如果想让 Redis 能更高效的运行,你也可以设置为 “no” ,让操作系统决定什么时候去执行,或者相反想让数据更安全你也可以设置为 “always”,如果不确定就用 “everysec”.
appendfsync everysec
appendfsync always
appendfsync no

AOF 策略设置为 always 或者 everysec 时,后台处理进程 ( 后台保存或者 AOF 日志重写 ) 会执行大量的 I/O 操作,在某些 Linux 配置中会阻止过长的 fsync() 请求。注意现在没有任何修复,即使 fsync 在另外一个线程进行处理,为了减缓这个问题,可以设置下面这个参数 no-appendfsync-on-rewrite
no-appendfsync-on-rewrite no

AOF 自动重写
当 AOF 文件增长到一定大小的时候 Redis 能够调用 BGREWRITEAOF 对日志文件进行重写。

它是这样工作的: Redis 会记住上次进行些日志后文件的大小 ( 如果从开机以来还没进行过重写,那日子大小在开机的时候确定 ) 基础大小会同现在的大小进行比较。如果现在的大小比基础大小大制定的百分比,重写功能将启动; 同时需要指定一个最小大小用于 AOF 重写,这个用于阻止即使文件很小但是增长幅度很大也去重写 AOF 文件的情况,设置 percentage 为 0 就关闭这个特性
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb


SLOW LOG

Redis Slow Log 记录超过特定执行时间的命令。执行时间不包括 I/O 计算比如连接客户端,返回结果等,只是命令执行时间可以通过两个参数设置 slow log :一个是告诉 Redis 执行超过多少时间被记录的参数 slowlog-log-slower-than( 微秒 ) ,另一个是 slow log 的长度。当一个新命令被记录的时候最早的命令将被从队列中移除。
下面的时间以微妙为单位,因此 1000000 代表一秒。
注意指定一个负数将关闭慢日志,而设置为 0 将强制每个命令都会记录
slowlog-log-slower-than 10000

配置记录慢查询的最大条数,对日志长度没有限制,只是要注意它会消耗内存,可以通过 SLOWLOG RESET 回收被慢日志消耗的内存,推荐使用默认值 128 ,当慢日志超过 128 时,最先进入队列的记录会被踢出。
slowlog-max-len 1024


高级配置

当 hash 中包含超过指定元素个数并且最大的元素没有超过临界时,hash 将以一种特殊的编码方式(大大减少内存使用)来存储,这里可以设置这两个临界值,Redis Hash 对应 Value 内部实际就是一个 HashMap ,实际这里会有 2 种不同实现,这个 Hash 的成员比较少时 Redis 为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的 HashMap 结构,对应的valueredisObject 的 encoding 为 zipmap。
当成员数量增大时会自动转成真正的 HashMap, 此时 encoding 为 ht 。
hash-max-zipmap-entries 512
hash-max-zipmap-value 64

和 Hash 一样,多个小的 list 以特定的方式编码来节省空间。list 数据类型节点值大小小于多少字节会采用紧凑存储格式。
list-max-ziplist-entries 512
list-max-ziplist-value 64

set 数据类型内部数据如果全部是数值型,且包含多少节点以下会采用紧凑格式存储。
set-max-intset-entries 512

和 hashe 和 list 一样 , 排序的 set 在指定的长度内以指定编码方式存储以节省空间,zsort 数据类型节点值大小小于多少字节会采用紧凑存储格式。
zset-max-ziplist-entries 128
zset-max-ziplist-value 64

Redis 将在每 100 毫秒时使用 1 毫秒的 CPU 时间来对 redis 的 hash 表进行重新 hash ,可以降低内存的使用。当你的使用场景中,有非常严格的实时性需要,不能够接受 Redis 时不时的对请求有 2 毫秒的延迟的话,把这项配置为 no 。

如果没有这么严格的实时性要求,可以设置为 yes ,以便能够尽可能快的释放内存
activerehashing yes

网友评论

登录后评论
0/500
评论
机智如我丶
+ 关注