官方学习链接:
http://redis.cn/
http://redisdoc.com/
http://redisbook.readthedocs.io/en/latest/index.html
Redis 是基于内存的、持久化、日志型数据库。其基于 C 语言进行了编写,因此可以在 linux 中采用 ps -ef |grep redis 来查看进程。
daemonize no
redis 默认不是以守护进程的方式运行,可以通过该配置项修改,使用 yes 启用守护进程
pidfile /var/run/redis.pid
当 redis 以守护进程方式运行时,redis 默认会把 pid 写入 /var/run/redis/pid 文件,可以通过 pidfile 指定。
port 6379
指定 redis 监听端口,默认端口为 6379
tcp-backlog 511
TCP 接收队列长度,受 /proc/sys/net/core/somaxconn 和 tcp_max_syn_backlog 这两个内核参数的影响。
bind 127.0.0.1
绑定主机地址
timeout 300
当客户端闲置多长时间后关闭连接,如果指定为 0, 则表示关闭该功能。
tcp-keepalive 60
如果非零,则设置 SO_KEEPALIVE 选项来向空闲连接的客户端发送 ACK。
loglevel verbose
指定日志记录级别 debug,versbose,notice,warning。默认为 verbose。
debug:大量信息,主要用于调试。
verbose:精简后的有用信息
notice:适量的信息
warning:很重要或很严重的信息会被记录下来。
logfile “./redis7003.log”
日志名
databases 16
设置数据库的数量,可以使用 select dbid 命令在连接上指定数据库 id。
save
指定在多长时间内,有多少次更新操作,将数据同步到数据文件,可以多个条件配置。
默认配置文件中提供了三个条件:
save 900 1
save 300 10
save 60 10000
分别表示 900s 内有一个更改,300s内有 10 个更改以及 60s 内有 10000 个更改。只要出发一个条件就可以执行同步操作。
stop-writes-on-bgsave-error yes
默认如果开启 RDB快照,并且最新的后台保存失败,Redis 将会停止接受写操作。这将使用户知道数据没有正确地持久化到硬盘,否则可能没人注意。
rdbcompression yes
指定存储到本地数据库时是否压缩数据,默认是 yes,Redis 采用 LZF 压缩,如果为了节省 CPU 时间,可以关闭该选项,但会导致数据库文件变的很大。
dbfilename dump.rdb
指定本地数据库文件名,默认值为 dump.rdb,除非非常紧要的数据,否则尽量不要开启数据持久化。
dir ./
指定本地数据库存放的目录。
slaveof
设置当本机为 slave 服务时,设置 master 服务的 ip 和 port, 在 Redis 启动时,它会自动从 master 进行数据同步。
masterauth
当 master 服务设置了密码保护时,slave 服务连接 master 的密码。
requirepass foobared
设置 Redis 连接密码,如果配置了连接密码,客户端在连接 Redis 时需要通过 AUTH
slave-read-only yes
配置 salve 实例是否接受写操作。可写的 slave 实例可能对存储临时数据比较有用(因为写入 slave 的数据在同 master 同步之后将很容易被删除。
repl-disable-tcp-nodelay no
是否在 slave 套接字发送 SYNC 之后禁用 TCP_NODELAY? 如果选择 “yes”, Redis 将使用更少的 TCP 包和带宽来向 slaves 发送数据。但是这将使数据传输到 slave 上有延迟,Linux 内核的默认配置会达到 40 毫秒。如果选择了 “no” 数据传输到 slave 的延迟将会减少但要使用更多的带宽。
slave-priority 100
slave 的优先级是一个整数展示在 Redis 的 Info 输出中。如果 master 不再正常工作了,哨兵将用它来选择一个 slave 提升为 master。优先级数字小的 slave 会优先考虑提升为 master,所以例如有三个 slave 优先级分别为10,100,25,哨兵将挑选优先级最小数字为 10 的 slave。0 作为一个特殊的优先级,标识这个 slave 不能作为 master,所以一个优先级为 0 的 slave 永远不会被# 哨兵挑选提升为 master。
maxclients 128
设置同一时间最大客户端连接数,默认无限制,Redis 可以同时打开的客户端连接数为 Redis进 程可以打开的最大文件描述符数,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis 会关闭新的连接并向客户端返回 max number of clients reached 错误信息。
maxmemory
指定 Redis 最大内存限制,Redis 在启动时会把数据加载到内存中,达到最大内存后,Redis 会先尝试清除已到期或即将到期的 Key,当此方法处理后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis 新的 vm 机制,会把 Key 存放内存,Value 会存放在 swap 区。
maxmemory-policy volatile-lru
最大内存策略:如果达到内存限制了,Redis如何选择删除key。可以在下面五个行为里选:
volatile-lru : 根据 LRU 算法删除带有过期时间的 key。
allkeys-lru : 根据 LRU 算法删除任何 key。
volatile-random : 根据过期设置来随机删除 key, 具备过期时间的 key。
allkeys-random : 无差别随机删, 任何一个 key。
volatile-ttl : 根据最近过期时间来删除(辅以TTL), 这是对于有过期时间的 key
noeviction : 谁也不删,直接在写操作时返回错误。
appendonly no
指定是否在每次更新操作后进行日志记录,Redis 在默认情况下是异步的把数据写入磁盘。如果不开启,可能会在断电时导致一段时间内的数据丢失。因为 redis 本身同步数据文件是按上面 save 条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为 no。
appendfilename appendonly.aof
指定操作日志文件名,目录为dir设置的目录,默认为 appendonly.aof
appendfsync everysec
指定更新日志条件,共有3个可选值:
no:表示等操作系统进行数据缓存同步到磁盘(快)
always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全)
everysec:表示每秒同步一次(折衷,默认值)
vm-enabled no
指定是否启用虚拟内存机制,默认值为 no。VM 机制将数据分页存放,由 Redis 将访问量较少的页即冷数据 swap 到磁盘上,访问多的页面由磁盘自动换出到内存中。
vm-swap-file /tmp/redis.swap
虚拟内存文件路径,默认值为 /tmp/redis.swap,不可由多个 Redis 实例共享
no-appendfsync-on-rewrite yes
如果 AOF 的同步策略设置成 “always” 或者是 “everysec”,后台的存储进程会产生很多磁盘 IO 开销。某些 Linux 的配置下会使 Redis 因为 fsync() 系统调用而阻塞很久。
为了缓解这个问题,可以使用这个选项。它可以在 BGSAVE 和 BGREWRITEAOF 处理时阻止主进程进行 fsync()。这就意味着:如果有子进程在进行保存操作,那么 Redis 就处于 “不可同步” 的状态。在最差的情况下,其可能会丢掉 30s 的日志数据。
如果有延时时间问题,就将该属性设置为 “yes”,否则就保持为 “no”,这是保存持久化数据最安全的方式。
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
自动重写 AOF 文件。
aof-load-truncated yes
如果 aof-load-truncated 设置成 yes,Redis 会自动发布一个 log 给客户端然后 load;
如果是 no,那么用户必须手动 redis-check-aof 修复 AOF 文件才可以。
这个选项仅仅用于当服务器尝试读取更多的数据但又找不到相应的数据时。
lua-time-limit 5000
lua 脚本的最大执行时间,毫秒为单位。
slowlog-log-slower-than 10000
Redis 慢查询日志可以记录超过指定时间的查询。
slowlog-max-len 128
这个长度没有限制,但是会消耗内存,可以通过 SLOWLOG RESET 来回收内存。
latency-monitor-threshold 0
Redis 延时监控系统在运行时会采样一些操作,以便收集可能导致延时的数据根源。通过 LATENCY 命令可以打印一些图样和获取一些报告,方便监控这个系统仅仅记录那个执行时间大于或等于预定时间的操作,这个预定时间是通过 latency-monitor-threshold 配置来指定的。当设置为 0 时,这个监控系统处于停止状态。
notify-keyspace-events
Redis 能通过 pub / sub 客户端关于键空间发生的事件,默认关闭。
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
当 hash 只有少量的 entry 时,并且最大的 entry 所占空间没有超过指定的限制时,会用一种节省内存的数据结构来编码。
list-max-ziplist-entries 512
list-max-ziplist-value 64
与 hash 似,数据元素较少的 list,可以用另一种方式来编码从而节省大量空间。
set-max-intset-entries 512
set 有一种特殊编码的情况:当 set 数据全是十进制 64 位有符号整型数字构成的字符串时。这个配置项就是用来设置 set 使用这种编码来节省内存的最大长度。
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
与 hash 和 list 相似,有序集合也可以用一种特别的编码方式来节省大量空间。这种编码只适合长度和元素都小于限制的有序集合
hll-sparse-max-bytes 3000
HyperLogLog 稀疏结构表示字节的限制。该限制包括 16 个字节的头。当 HyperLogLog 使用稀疏结构表示这些限制,它会被转换成密度表示。值大于16000是完全没用的,因为在该点密集的表示是更多的内存效率。建议值是3000左右,以便具有的内存好处, 减少内存的消耗。
activerehashing yes
启用哈希刷新,每 100 个 CPU 毫秒会拿出 1 个毫秒来刷新Redis的主哈希表(顶级键值映射表)
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
客户端的输出缓冲区的限制,可用于强制断开那些因为某种原因从服务器读取数据的速度不够快的客户端
hz 10
默认情况下,“hz” 的被设定为 10。提高该值将在 Redis 空闲时使用更多的 CPU 时,但同时当有多个 key 同时到期会使 Redis 的反应更灵敏,以及超时可以更精确地处理。
aof-rewrite-incremental-fsync yes
当一个子进程重写 AOF 文件时,如果启用该选项,则文件每生成 32M 数据会被同步。
vm-max-memory 0
将所有大于 vm-max-memory 的数据存入虚拟内存,无论 vm-max-memory 设置多小, 所有索引数据都是内存存储的,也就是说,当 vm-max-memory 设置为 0 的时候,其实是所有 value 都存在于磁盘。默认值为 0
vm-page-size 32
swap 文件分成了很多的 page,一个对象可以保存在多个 page 上面,但一个 page 上不能被多个对象共享,vm-page-size 要根据存储的数据大小来设定的。如果存储很多小对象,page 大小最好设置为 32 或者 64bytes;如果存储很大大对象,则可以使用更大的 page,如果不确定,就使用默认值。
vm-pages 134217728
设置 swap 文件中的 page 数量,由于页表是在放在内存中的,在磁盘上每 8 个 pages 将消耗 1byte 的内存。
vm-max-threads 4
设置访问 swap 文件的线程数,最好不要超过机器的核数,如果设置为 0,那么所有对 swap 文件的操作都是串行的,可能会造成比较长时间的延迟。默认值为 4。
glueoutputbuf yes
设置在向客户端应答时,是否把较小的包合并为一个包发送,默认为开启.
hash-max-zipmap-entries 64
hash-max-zipmap-value 512
指定在超过一定的数量或者最大的元素超过某一临界值时,采用一种特殊的哈希算法。
activerehashing yes
指定是否激活重置哈希,默认为开启。
include /path/to/local.conf
指定包含其它的配置文件,可以在同一主机上多个 Redis 实例之间使用同一份配置文件,而同时各个实例又拥有自己的特定配置文件。
heapdir ./rdb/
指定内存映射文件路径。
maxheap 1024000000
指定内存映射文件大小,如果设置了最大内存那么该文件的大小 = 1.5 * 最大内存大小。