默认 redis 不是以后台进程的方式启动, 如果需要在后台运行, 需要将这个值设置成 yes
以后台方式启动的时候, redis 会写入默认的进程文件 / var/run/redis.pid
daemonize yes
redis 启动的进程路径
pidfile/var/run/redis.pid
启动进程端口号, 这里最好不要使用默认的 6379, 容易被攻击
port 7179
tcp-backlog 511
配置 redis 监听到的 ip 地址, 可以是一个也可以多个
bind 127.0.0.110.254.3.42
redis 的 sock 路径
unixsocket/tmp/redis.sock
unixsocketperm 755
超时时间
timeout 0
指定 TCP 连接是否为长连接,"侦探" 信号有 server 端维护. 默认为 0. 表示禁用
tcp-keepalive 0
日志级别, log 等级分为 4 级, debug,verbose,notice, 和 warning. 生产环境下一般开启 notice
loglevel notice
日志文件地址
logfile"/usr/local/redis/logs/redis.log"
设置数据库的个数, 可以使用 SELECT 命令来切换数据库. 默认使用的数据库是 0 号库. 默认 16 个库
databases 16
RDB 方式的持久化是通过快照 (snapshotting) 完成的, 当符合一定条件时 Redis 会自动将内存中的所有数据进行快照并存储在硬盘上. 进行快照的条件可以由用户在配置文件中自定义, 由两个参数构成: 时间和改动的键的个数. 当在指定的时间内被更改的键的个数大于指定的数值时就会进行快照. RDB 是 Redis 默认采用的持久化方式, 在配置文件中已经预置了 3 个条件:
save 900 1 # 900 秒内有至少 1 个键被更改则进行快照
save 300 10 # 300 秒内有至少 10 个键被更改则进行快照
save 60 10000 # 60 秒内有至少 10000 个键被更改则进行快照
持久化数据存储目录
dir/usr/local/redis/data
当持久化出现错误时, 是否依然继续进行工作, 是否终止所有的客户端 write 请求. 默认设置 "yes" 表示终止, 一旦 snapshot 数据保存故障, 那么此 server 为只读服务. 如果为 "no", 那么此次 snapshot 将失败, 但下一次 snapshot 不会受到影响, 不过如果出现故障, 数据只能恢复到 "最近一个成功点"
stop-writes-on-bgsave-errorno
在进行数据镜像备份时, 是否启用 rdb 文件压缩手段, 默认为 yes. 压缩可能需要额外的 cpu 开支, 不过这能够有效的减小 rdb 文件的大, 有利于存储 / 备份 / 传输 / 数据恢复
rdbcompression yes
checksum 文件检测, 读取写入的时候 rdb 文件 checksum, 会损失一些性能
rdbchecksum yes
镜像备份文件的文件名, 默认为 dump.rdb
dbfilename dump.rdb
当主 master 服务器挂机或主从复制在进行时, 是否依然可以允许客户访问可能过期的数据. 在 "yes" 情况下, slave 继续向客户端提供只读服务, 有可能此时的数据已经过期; 在 "no" 情况下, 任何向此 server 发送的数据请求服务 (包括客户端和此 server 的 slave) 都将被告知 "error"
slave-serve-stale-datayes
如果是 slave 库, 只允许只读, 不允许修改
slave-read-only yes
slave 与 master 的连接, 是否禁用 TCPnodelay 选项."yes" 表示禁用, 那么 socket 通讯中数据将会以 packet 方式发送 (packet 大小受到 socket buffer 限制). 可以提高 socket 通讯的效率 (tcp 交互次数), 但是小数据将会被 buffer, 不会被立即发送, 对于接受者可能存在延迟."no" 表示开启 tcp nodelay 选项, 任何数据都会被立即发送, 及时性较好, 但是效率较低, 建议设为 no, 在高并发或者主从有大量操作的情况下, 设置为 yes
repl-disable-tcp-nodelayno
适用 Sentinel 模块 (unstable,M-S 集群管理和监控), 需要额外的配置文件支持. slave 的权重值, 默认 100. 当 master 失效后, Sentinel 将会从 slave 列表中找到权重值最低 (>0) 的 slave, 并提升为 master. 如果权重值为 0, 表示此 slave 为 "观察者", 不参与 master 选举
slave-priority 100
限制同时连接的客户数量. 当连接数超过这个值时, redis 将不再接收其他连接请求, 客户端尝试连接时将收到 error 信息. 默认为 10000, 要考虑系统文件描述符限制, 不宜过大, 浪费文件描述符, 具体多少根据具体情况而定
maxclients 10000
redis-cache 所能使用的最大内存 (bytes), 默认为 0, 表示 "无限制", 最终由 OS 物理内存大小决定 (如果物理内存不足, 有可能会使用 swap). 此值尽量不要超过机器的物理内存尺寸, 从性能和实施的角度考虑, 可以为物理内存 3/4. 此配置需要和 "maxmemory-policy" 配合使用, 当 redis 中内存数据达到 maxmemory 时, 触发 "清除策略". 在 "内存不足" 时, 任何 write 操作 (比如 set,lpush 等) 都会触发 "清除策略" 的执行. 在实际环境中, 建议 redis 的所有物理机器的硬件配置保持一致 (内存一致), 同时确保 master/slave 中 "maxmemory""policy" 配置一致.
maxmemory 0
内存过期策略, 内存不足 "时, 数据清除策略, 默认为"volatile-lru".
volatile-lru -> 对 "过期集合" 中的数据采取 LRU(近期最少使用) 算法. 如果对 key 使用 "expire" 指令指定了过期时间, 那么此 key 将会被添加到 "过期集合" 中. 将已经过期 / LRU 的数据优先移除. 如果 "过期集合" 中全部移除仍不能满足内存需求, 将 OOM.
allkeys-lru -> 对所有的数据, 采用 LRU 算法
volatile-random -> 对 "过期集合" 中的数据采取 "随即选取" 算法, 并移除选中的 K-V, 直到 "内存足够" 为止. 如果如果 "过期集合" 中全部移除全部移除仍不能满足, 将 OOM
allkeys-random -> 对所有的数据, 采取 "随机选取" 算法, 并移除选中的 K-V, 直到 "内存足够" 为止
volatile-ttl -> 对 "过期集合" 中的数据采取 TTL 算法 (最小存活时间), 移除即将过期的数据.
noeviction -> 不做任何干扰操作, 直接返回 OOM 异常
另外, 如果数据的过期不会对 "应用系统" 带来异常, 且系统中 write 操作比较密集, 建议采取 "allkeys-lru"
maxmemory-policyvolatile-lru
默认值 5, 上面 LRU 和最小 TTL 策略并非严谨的策略, 而是大约估算的方式, 因此可以选择取样值以便检查
maxmemory-samples 5
默认情况下, redis 会在后台异步的把数据库镜像备份到磁盘, 但是该备份是非常耗时的, 而且备份也不能很频繁. 所以 redis 提供了另外一种更加高效的数据库备份及灾难恢复方式. 开启 append only 模式之后, redis 会把所接收到的每一次写操作请求都追加到 appendonly.aof 文件中, 当 redis 重新启动时, 会从该文件恢复出之前的状态. 但是这样会造成 appendonly.aof 文件过大, 所以 redis 还支持了 BGREWRITEAOF 指令, 对 appendonly.aof 进行重新整理. 如果不经常进行数据迁移操作, 推荐生产环境下的做法为关闭镜像, 开启 appendonly.aof, 同时可以选择在访问较少的时间每天对 appendonly.aof 进行重写一次.
另外, 对 master 机器, 主要负责写, 建议使用 AOF, 对于 slave, 主要负责读, 挑选出 1-2 台开启 AOF, 其余的建议关闭
appendonly yes
aof 文件名字, 默认为 appendonly.aof
appendfilename"appendonly.aof"
设置对 appendonly.aof 文件进行同步的频率. always 表示每次有写操作都进行同步, everysec 表示对写操作进行累积, 每秒同步一次. no 不主动 fsync, 由 OS 自己来完成. 这个需要根据实际业务场景进行配置
appendfsync everysec
在 aof rewrite 期间, 是否对 aof 新记录的 append 暂缓使用文件同步策略, 主要考虑磁盘 IO 开支和请求阻塞时间. 默认为 no, 表示 "不暂缓", 新的 aof 记录仍然会被立即同步
no-appendfsync-on-rewriteno
当 Aof log 增长超过指定比例时, 重写 logfile, 设置为 0 表示不自动重写 Aof 日志, 重写是为了使 aof 体积保持最小, 而确保保存最完整的数据.
auto-aof-rewrite-percentage100
触发 aof rewrite 的最小文件尺寸
auto-aof-rewrite-min-size64mb
lua 脚本执行的最大时间, 单位毫秒
lua-time-limit 5000
慢日志记录, 单位微妙, 10000 就是 10 毫秒值, 如果操作时间超过此值, 将会把 command 信息 "记录" 起来.(内存, 非文件). 其中 "操作时间" 不包括网络 IO 开支, 只包括请求达到 server 后进行 "内存实施" 的时间."0" 表示记录全部操作
slowlog-log-slower-than10000
"慢操作日志" 保留的最大条数,"记录" 将会被队列化, 如果超过了此长度, 旧记录将会被移除. 可以通过 "SLOWLOG<subcommand> args" 查看慢记录的信息 (SLOWLOG get 10,SLOWLOG reset)
slowlog-max-len 128
notify-keyspace-events""
hash 类型的数据结构在编码上可以使用 ziplist 和 hashtable.ziplist 的特点就是文件存储 (以及内存存储) 所需的空间较小, 在内容较小时, 性能和 hashtable 几乎一样. 因此 redis 对 hash 类型默认采取 ziplist. 如果 hash 中条目的条目个数或者 value 长度达到阀值, 将会被重构为 hashtable.
这个参数指的是 ziplist 中允许存储的最大条目个数,, 默认为 512, 建议为 128
hash-max-ziplist-entries512
ziplist 中允许条目 value 值最大字节数, 默认为 64, 建议为 1024
hash-max-ziplist-value64
同上
list-max-ziplist-entries512
list-max-ziplist-value64
intset 中允许保存的最大条目个数, 如果达到阀值, intset 将会被重构为 hashtable
set-max-intset-entries512
zset 为有序集合, 有 2 中编码类型: ziplist,skiplist. 因为 "排序" 将会消耗额外的性能, 当 zset 中数据较多时, 将会被重构为 skiplist.
zset-max-ziplist-entries128
zset 中允许条目 value 值最大字节数, 默认为 64, 建议为 1024
zset-max-ziplist-value64
是否开启顶层数据结构的 rehash 功能, 如果内存允许, 请开启. rehash 能够很大程度上提高 K-V 存取的效率
activerehashing yes
客户端 buffer 控制. 在客户端与 server 进行的交互中, 每个连接都会与一个 buffer 关联, 此 buffer 用来队列化等待被 client 接受的响应信息. 如果 client 不能及时的消费响应信息, 那么 buffer 将会被不断积压而给 server 带来内存压力. 如果 buffer 中积压的数据达到阀值, 将会导致连接被关闭, buffer 被移除.
buffer 控制类型包括: normal -> 普通连接; slave-> 与 slave 之间的连接; pubsub ->pub/sub 类型连接, 此类型的连接, 往往会产生此种问题; 因为 pub 端会密集的发布消息, 但是 sub 端可能消费不足. 指令格式: client-output-buffer-limit <class> <hard><soft><seconds>", 其中 hard 表示 buffer 最大值, 一旦达到阀值将立即关闭连接; soft 表示" 容忍值 ", 它和 seconds 配合, 如果 buffer 值超过 soft 且持续时间达到了 seconds, 也将立即关闭连接, 如果超过了 soft 但是在 seconds 之后, buffer 数据小于了 soft, 连接将会被保留. 其中 hard 和 soft 都设置为 0, 则表示禁用 buffer 控制. 通常 hard 值大于 soft.
client-output-buffer-limitnormal 0 0 0
client-output-buffer-limitslave 256mb 64mb 60
client-output-buffer-limitpubsub 32mb 8mb 60
Redis server 执行后台任务的频率, 默认为 10, 此值越大表示 redis 对 "间歇性 task" 的执行次数越频繁 (次数 / 秒)."间歇性 task" 包括 "过期集合" 检测, 关闭 "空闲超时" 的连接等, 此值必须大于 0 且小于 500. 此值过小就意味着更多的 cpu 周期消耗, 后台 task 被轮询的次数更频繁. 此值过大意味着 "内存敏感" 性较差. 建议采用默认值.
hz 10
当一个 child 在重写 AOF 文件的时候, 如果 aof-rewrite-incremental-fsync 值为 yes 生效, 那么这个文件会以每次 32M 数据的来被同步, 这大量新增提交到磁盘是有用的, 并且能避免高峰延迟.
aof-rewrite-incremental-fsyncyes
来源: http://www.jianshu.com/p/bfc7db90b003