# Redis默认不是以守护进程的方式运行,可以通过该配置项修改,改为 yes 启用守护进程。
daemonize no
# 当以守护进程运行时,Redis 默认会在 /var/run/redis.pid中 写入一个 pid 文件。
# 可以在此处指定自定义的 pid 文件位置,当运行多个 redis 服务时,需要指定不同的 pid 文件和端口
pidfile /var/run/redis.pid
# 接受指定端口上的连接,默认值为6379。
# 如果指定了端口 0,则 Redis 将不会监听 TCP连接。
port 6379
# 指定 Redis 可接收请求的 IP 地址,不设置将处理所有请求,建议生产环境中设置。
# bind 127.0.0.1
# 设置客户端闲置 n 秒后断开链接,超时后会关闭连接,0 表示禁用。
timeout 0
# 日志等级,4个可选值。
loglevel notice
# 指定日志文件名,默认为 stdout 输出到控制台。
# 请注意,如果您使用标准输出进行日志记录但进行守护进程,则日志将发送到/dev/null
# 一般配置为 /redis/logs/redis.log
logfile "/redis/logs/redis.log"
# 设置数据库的数量,可以使用 SELECT <db_id> 命令来切换数据库。
databases 16
# 设置 Redis 进行数据备份的频率:
# 900 秒之内有 1 个 keys 发生变化时;
# 300 秒之内有 10 个 keys 发生变化时;
# 60 秒之内有 10000 个 keys 发生变化时;
# 可以注释掉配置表示禁用。
save 900 1
save 300 10
save 60 10000
# 指定存储至本地数据库时是否压缩数据,默认为yes,Redis 采用 LZF 压缩,
# 如果为了节省 CPU 时间,可以关闭该选项,但会导致数据库文件变的巨大。
rdbcompression yes
# The filename where to dump the DB
# 备份数据库的文件名
dbfilename dump.rdb
# 备份文件存放的路径,默认值为 ./
dir /var/lib/redis/
# 主从复制。
# 使用 slaveof 使本机 Redis 实例成为另一个 Redis 服务器的副本。
# 在 Redis 启动时,它会自动从 master 进行数据同步。
# slaveof <masterip> <masterport>
# 如果主服务器受密码保护,salve 在开始复制同步时需进行密码验证。
# masterauth <master-password>
# 当从属服务器失去与主服务器的连接或主从正在同步数据时,salve 服务器可以通过两种不同的方式响应客户端请求:
# 1. 如果 slave-serve-stale-data 设置为 yes(默认),则 slave 仍将回复客户端请求,可能数据不足,或者如果这是第一次同步,则数据集可能只是空的。
# 2. 如果 slave-serve-stale-data 设置为 no,则 slave 会返回 "SYNC with master in progress" 错误信息,但 INFO 和 SLAVEOF 命令除外。
slave-serve-stale-data yes
# 为 Redis 设置密码,默认无密码。
# Redis 速度相当快,攻击者可以在一秒内进行 150K 次密码尝试,必须指定强大的密码来防止暴力破解
# requirepass foobared
# 设置最大客户端连接数,0 表示不限制。
# 当连接数超过这个值时,Redis 将返回错误信息 "max number of clients reached"。
# maxclients 128
# 设置 Redis 能够使用的最大内存。
# 当达到内存限制时,Redis 将尝试根据逐出策略来删除密钥(请参见maxmemmory-policy)。
# 如果 Redis 无法根据该策略删除密钥,或者如果该策略设置为'noeviction',则 Redis 将开始对会使 # 用更多内存的命令(例如SET,LPUSH等)进行错误答复,但是允许 GET 之类的只读命令。
# 警告:如果您将 salve 连接到具有最大内存开启的 master,则 master 会从已用内存计数中减去为 salve 提供数据所需的输出缓冲区的大小,以便网络问题/重新同步不会触发收回键的循环,并且反过来,salve 的输出缓冲区已满,有被驱逐的 keys DEL 触发了更多 keys 的删除,直到数据库完全清空。
# 简而言之...如果您连接了 salve,建议您为 maxmemory 设置一个较低的值,以便系统上有一些用于 salve 输出缓冲区的可用RAM(但是如果策略为“ noeviction”,则不需要这样做)。
# maxmemory <bytes>
# Redis 默认按照 save 参数的配置进行数据备份,但如果发生意外情况可能会造成部分数据丢失,
# Redis 提供了另外一种更加高效的备份及灾难恢复方式,开启 appendonly, Redis 将每一次写操作请求# 都追加到 appendonly.aof 文件中,Redis 重新启动时,会从该文件恢复出之前的状态。
# 但可能会造成 appendonly.aof 文件过大,所以 Redis 支持 BGREWRITEAOF 指令对
# appendonly.aof 文件重新整理。
appendonly no
# 指定更新日志文件名,默认值为 appendonly.aof
# appendfilename appendonly.aof
# 指定更新日志的同步频率:
# no:表示等操作系统进行数据缓存同步到磁盘(快);
# always:表示每次更新操作后手动调用 fsync() 将数据写到磁盘(慢,安全);
# everysec:表示每秒同步一次(折中,默认值)
appendfsync everysec
# 指定包含其它的配置文件,可以在同一主机上多个Redis实例之间使用同一份配置文件,
# 而同时各个实例又拥有自己的特定配置文件。
include /path/to/local.conf
# 是否开启虚拟内存支持,默认为 no。
# Redis 内存满时,将无法接收新的写入请求,所以在 Redis2.0 后,提供了虚拟内存的支持。
# 但需要注意的,Redis 所有的 keys 都会放在内存中,在内存不够时,只把 value 放入磁盘交换区。虽使用虚拟内存,但性能基本不受影响,需要注意的是要把 vm-max-memory 设置到足够来放下所有的 key。
vm-enabled no
# 设置虚拟内存的交换文件路径,不可多个 Redis 实例共享。
vm-swap-file /tmp/redis.swap
# 设置开启虚拟内存后,Redis 将使用的最大物理内存大小。
# 默认为 0,当设置为 0 的时候,所有 value 都存在于磁盘(keys 永远都在会放在内存中)。
# 在生产环境下,需要根据实际情况设置该值,最好不要使用默认的 0。
vm-max-memory 0
# 设置虚拟内存页大小。
# Redis swap 文件分成了很多的 page,一个对象可以保存在多个 page 上面,但一个 page 上不能被多个对象共享。
# 如果存储很多小对象,page 大小最好设置为 32 或者 64bytes;
# 如果存储很大大对象,则可以使用更大的 page,如果不确定,就使用默认值;
vm-page-size 32
# 设置 swap 文件中的 page 数量。
# 假定页表(空闲/已使用页的位图)是在内存中获取的,则磁盘上每 8 个 pages 将占用 1byte 内存。
# 使用默认的 vm-page-size 32和 vm-pages 134217728,Redis 将使用 4GB 的 swap,该文件将为页表使用 16 MB 的内存。
vm-pages 134217728
# 设置访问 swap 文件的线程数,最好不要超过机器的核心数,默认值为4。
# 如果设置为0,那么所有对 swap 文件的操作都是串行的,可能会造成比较长时间的延迟。
vm-max-threads 4
# 设置在向客户端应答时,是否把较小的包合并为一个包发送,默认为开启
glueoutputbuf yes
# Redis2.0 后引入了 hash 数据结构。
# 当 hash 中包含超过指定个数的元素并且最大的元素当没有超过临界时,hash 将以zipmap来存储,
# zipmap又称为 small hash,可大大减少内存的使用。
hash-max-zipmap-entries 64
hash-max-zipmap-value 512
# 是否重置 Hash 表
# 设置为 yes,Redis 将每100毫秒使用1毫秒CPU时间来对 hash 表重新 hash,可降低内存的使用。
# 当使用场景有严格的实时性需求,不能接受 Redis 可能对请求有2毫秒的延迟的话,把这项配置为no。
activerehashing yes
Redis官方文档对 VM 的使用提出了一些建议:
当key很小而value很大时,使用VM的效果会比较好.因为这样节约的内存比较大
当key不小时,可以考虑使用一些非常方法将很大的key变成很大的value,如可将key,value组合成一个新的value
最好使用linux ext3 等对稀疏文件支持比较好的文件系统保存你的swap文件
vm-max-threads参数可设置访问swap文件的线程数,最好不要超过机器的核数;设置为0则所有对swap文件的操作都是串行的,可能会造成比较长时间的延迟,但是对数据完整性有很好的保证
redis数据存储
redis的存储分为内存存储、磁盘存储和log文件三部分,配置文件中有三个参数对其进行配置。
save seconds updates,save配置,指出在多长时间内,有多少次更新操作,就将数据同步到数据文件。可多个条件配合,默认配置了三个条件。
appendonly yes/no ,appendonly配置,指出是否在每次更新操作后进行日志记录,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为redis本身同步数据文件是按上面的save条件来同步的,所以有的数据会在一段时间内只存在于内存中。
appendfsync no/always/everysec ,appendfsync配置,no表示等操作系统进行数据缓存同步到磁盘,always表示每次更新操作后手动调用fsync()将数据写到磁盘,everysec表示每秒同步一次。