目录
1.安装
2.配置
2.1 include
2.2 loadmodule
2.3 网络配置
2.4 通用配置
2.5 RDB配置
2.6 主从配置
2.7 安全配置
2.8 maxclients
2.9 内存管理
2.10 AOF配置
2.11 Lua脚本最大执行时间
2.12 slowlog
2.13 高级配置
安装本身比较简单,就是去官网下载源码包,解压后执行make和make install即可,不过有可能会遇到一个错误:
fatal error: jemalloc/jemalloc.h: No such file or directory
#include
^~~~~~~~~~~~~~~~~~~~~
该问题在README.md有描述,只要在make时使用
make MALLOC=libc
即可
完整命令如下:
wget http://download.redis.io/releases/redis-5.0.4.tar.gz
tar -zxvf redis-5.0.4.tar.gz
cd redis-5.0.4/
make MALLOC=libc
make install
然后可以执行 redis-server -v来验证有没有安装成功:
root@Yhc-Surface:~/redis-5.0.4# redis-server -v
Redis server v=5.0.4 sha=00000000:0 malloc=libc bits=64 build=172bab0d8aa0a3b7
这里的配置主要是指redis-server的配置。
首先是redis-server的-h选项输出:
root@Yhc-Surface:~/redis-5.0.4# redis-server -h
Usage: ./redis-server [/path/to/redis.conf] [options]
./redis-server - (read config from stdin)
./redis-server -v or --version
./redis-server -h or --help
./redis-server --test-memory
Examples:
./redis-server (run the server with default conf)
./redis-server /etc/redis/6379.conf
./redis-server --port 7777
./redis-server --port 7777 --replicaof 127.0.0.1 8888
./redis-server /etc/myredis.conf --loglevel verbose
Sentinel mode:
./redis-server /etc/sentinel.conf --sentinel
可以看出,redis-server支持通过命令行选项直接指定本机节点和集群主节点,还支持通过配置文件配置单机和集群环境,以及哨兵节点。
命令行配置比较简单,哨兵配置暂时不看,所以这里主要看redis.conf文件的配置。
此处没有包括集群相关的配置,以及被标注为实验性功能的碎片整理功能的配置。
redis支持通过include引用其他配置文件的配置,并且可以同时引用多个配置文件:
include ~/first.conf
include ~/second.conf
include引入的配置可以被覆盖,conf文件中,在前面的配置可以被后面的配置覆盖,因此,如果需要动态调整配置,最好将include写在开头处,反之,如果不希望模板中的配置被覆盖掉,可以把include写到结尾处。
模块是Redis 4提出的,可以在 Redis Module Hub 找到很多模块,然后在redis.conf中通过loadmodule加载:
loadmodule ~/first.so
loadmodule ~/second.so
和include一样,这里也可以加载多个模块。配置的模块会在Redis服务器实例启动时加载。
除了在配置文件中加载模块,Redis也支持在运行中通过 MODULE LOAD和MODULE UNLOAD命令动态加载/卸载模块。
1)bind
即Redis接收哪些主机发来的连接,如果不配置,则默认接受所有连接,是不安全的,Redis未授权访问详解 - FreeBuf专栏·安全之光 是一个借助Redis漏洞进行免密登录的案例。默认配置 bind 127.0.0.1 代表只允许本地访问。
2)port
即Redis监听的端口,默认6379。
3)protected-mode
默认yes,当没有配置bind和密码时,会强制只能本地访问。
4)tcp-backlog
backlog是已连接但未进行accept处理的SOCKET队列大小,如果这个队列满了,将会发送“Connection Refused”错误信息给客户端,默认511,如果设置的太大,可能会导致请求来没来得及处理就已经超时。
5)unixsocket
配置Redis监听的Socket文件,没有默认值,即不显式配置的话就不监听
6)timeout
默认0,即客户端断开后立即关闭连接,单位为秒
7)tcp-keepalive
用来配置发送保持连接的ACK的时间间隔,默认300,即每300秒发送一次ACK以保持连接。
1)daemonize
是否以后台模式启动,默认no,如果设置为yes,则写入pid到/var/run/redis.pid(可配置)
2)pidfile
指定后台模式pid文件的位置
3)loglevel
指定日志级别,有:debug、verbose、notice、warning四种级别(内容越来越少),默认notice。
4)logfile
指定日志输出位置,默认为空,即输出到标准输出(后台模式则丢弃日志)
5)使用system logger
一共三个配置项:
6)databases
redis也是有 数据库 的概念的,必须选中数据库才能操作数据,默认16个数据库,并默认选中DB0,即第一个数据库
7)always-show-logo
是否显示LOGO,默认yes
1)save
格式为:save
save 900 1 //如果过了15分钟,有过至少1次改动,则持久化
save 300 10 //如果过了5分钟,有过至少10次改动,则持久化
save 60 10000 //如果过了1分钟,有过至少10000次改动,则持久化
如果没有配置save,或者配置了 save "",则不持久化
2)stop-writes-on-bgsave-error
默认yes,即持久化失败后停止写入,以免运维感知不到持久化异常。
3)rdbcompression
是否在持久化时对string对象使用LZF进行压缩,默认yes,但是会消耗CPU
4)rdbchecksum
是否向RDB文件写入校验码,默认yes,no的话就写入0,即跳过校验
5)dbfilename
即RDB文件的名称,默认dump.rdb
6)dir
即RDB存放的位置,默认在Redis工作目录下
1)slaveof
即将本节点配置为指定节点的从节点,格式为:slaveof
2)masterauth
主节点可能配置了密码,可以在此配置密码,以完成认证,格式为:masterauth
3)slave-serve-stale-data
即(作为从节点的)本节点,当与主节点断开连接后,是否继续为客户端提供服务,默认yes,但是可能会造成不一致
4)slave-read-only
从节点是否只读,默认yes,如果是一些存活期短的数据,可以写在从节点上,一方面能够减轻写压力,另一方面与主节点同步后这些数据就消失了,也不会影响整体一致性
5)repl-diskless-sync
这一条是配置主从节点同步方式,默认no,即同步时需要先创建一个RDB文件,把主节点的数据写进来再恢复,这种方式的好处在于,可以将集群配置为树状结构,让已完成同步的从节点为未完成同步的从节点提供数据,从而大幅加快同步速度,坏处在于,如果硬盘很慢,那么读写RDB文件将会大幅降低节点同步效率;如果配置为yes,则不写入RDB文件,而是直接同步进内存
6)repl-diskless-sync-delay
设置主节点在无盘传输前等待多久,因为同步过程是阻塞的,如果不等待就直接开始同步,那么有些新加入的节点就不能及时同步数据、提供服务,必须等到下次同步,如果设置了延时,就可以让更多的从节点加入同步过程,默认设置5秒
7)repl-ping-slave-period
从节点每隔一段时间就向主节点发送PING,该项就是设置这个发送间隔,默认10秒
8)repl-timeout
设置分区超时时间,主要应用于:
如果以上两个操作所用时间超过了超时时间,则认为分区连接中断,默认60秒
9)repl-disable-tcp-nodelay
默认no,代表发送较小的数据包,这种方式延迟小,但是带宽占用大,yes则是发送较大的数据包,带宽占用小,但是延迟比较大
10)repl-backlog-size、repl-backlog-ttl
分区的backlog可以理解为一个缓存,用来保存从节点的最近的数据包,如果从节点又很快重新连接上来,就可以根据这些数据包恢复工作,最多进行一次增量同步,这样就避免了全量同步带来的开销,repl-backlog-size代表这个缓存大小,默认设置为1MB,repl-backlog-ttl代表这个缓存的存活时间,默认3600秒,设置为0代表永不淘汰
11)slave-priority
用来设置从节点优先级,值越低优先级越高,在主节点宕机后,哨兵节点会优先选择高优先级的从节点晋升为主节点,默认值为100
12)分区规模配置
min-slaves-to-write和min-slaves-max-lag限定了一个分区的规模,设前者的值为N,后者的值为M,则一个可以正常执行写入操作的分区,必须有N个延迟小于等于M的从节点。默认配置:N=3,M=10
13)slave-announce-ip、slave-announce-port
一个从节点可以用一个ip-port对标记,但是如果使用了NAT或端口转发时,可能会导致同一个从节点被重复标记,可以使用该配置进行唯一标记
1)requirepass
为服务器设置一个密码
2)rename-command
修改命令名称,主要是为了防止一些关键命令被滥用,例如config,如果某个命令被设置为空字符串,则表示废弃
代表最多允许同时连接多少个客户端,默认10000
1)maxmemory
代表Redis最多可以存储多少字节的数据,当存储的数据到达上限之后,就会触发缓存清除
2)maxmemory-policy
代表Redis缓存清除策略,有如下选项:
3)maxmemory-samples
上述的算法不是精确算法,默认情况下,Redis抽出5个数据,对其中最符合策略的一个进行清除,如果调大取样率,则效果更好但也更消耗CPU,反之亦然
4)懒删除
默认的del命令是阻塞命令,虽然Redis提供了unlink等非阻塞命令,但是其他操作造成的数据清除还是阻塞的,比如上述的缓存清除,此时就需要配置懒删除,以非阻塞方式释放内存。这些选项默认都是no。
AOF是另一种持久化方案,RDB在持久化时,由于用时较长,可能会导致最近若干时间内的改动丢失,AOF采用增量方式持久化,最多丢失1秒的更改。
AOF和RDB可以共存,如果启用AOF,则会在Redis服务器启动时加载AOF文件进行数据恢复。
1)appendonly
表示是否启用AOF,默认no
2)appendfilename
设置AOF文件的名称
3)appendfsync
代表持久化频率,有三个选项:
4)no-appendfsync-on-rewrite
如果appendfsync为always或everysec时,Redis可能阻塞fsync调用太久,该选项可以使Redis在有其他进程调用fsync时不会去触发fsync,即退化为appendfsync no,可以在一定程度上缓解问题,不过也会导致可能有数据来不及持久化
5)自动重写时机
Redis会记住上一次重写后AOF文件的大小,然后根据当前大小与auto-aof-rewrite-percentage(默认100)和auto-aof-rewrite-min-size(默认64MB)的值进行比较,如果达到配置值,则自动触发重写
6)aof-load-truncated
Redis在启动时会自动加载AOF文件,如果因为操作系统崩溃导致AOF文件不完整,默认情况下(即该配置为yes),Redis会尝试尽可能多地读取数据并恢复,如果此配置项为no,则Redis会拒绝启动并报错
7)aof-use-rdb-preamble
相当于把AOF文件变成 RDB+AOF元数据 ,这样做读写都会更快,不过可能导致格式问题,所以默认为no
lua-time-limit指定了脚本最多允许运行多少毫秒,如果一个脚本运行时间超过该时长,就会对接下来的请求响应错误,此时可以使用script kill结束脚本,或shutdown nosave关闭服务器。
slowlog用来统计慢查询,需要注意的是,这里只统计了命令本身调用所用的时间,而不包括命令调用导致的I/O时间(如连接客户端等),所以slowlog没有记录不代表没有超时操作。
1)slowlog-log-slower-than
表示slowlog记录调用时间在多少毫秒以上的慢查询,默认10000
2)slowlog-max-len
代表slowlog记录最近多少个慢查询记录,默认128
1)数据结构配置
Redis支持的数据结构,如string、hash、set等,都会根据存储的数据规模大小,对底层的数据结构进行转换,例如hash,在数据量较小时,会以链表的形式存储,当数据量足够大时,就会转换为hashtable,此处的配置就是各数据结构底层结构转换的阈值:
2)客户端缓存配置
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
后面四个项的意思是:
1)类型:有normal、slave、pubsub三种,分别代表普通客户端、连接到从节点的客户端、订阅了pubsub通道的客户端
2) hard-limit:当缓存大小到达hard-limit时,直接断开
3)soft-limit、soft-seconds:当缓存大小到达soft-limit时,等待soft-seconds秒后断开
3)其他服务器配置
4)LFU配置
Redis提供了两个LFU的配置项:lfu-log-factor(默认10)、lfu-decay-time(默认1)。
LFU策略下,Redis的计数器有8位,默认值为5,最大值为255(2的8次方减1),如果每次访问都增大,很容易溢出,所以采用了概率增大计数器的方式。当一个键被访问时,首先从0到1中随机选一个值R,然后用旧值参与计算计数器增大概率P,公式为:1/(oldvalue*lfu_log_factor+1),当R
lfu-decay-time代表计数器值的半衰期,默认1代表每过1分钟,计数器值减半(小于等于10时则减1),如果设置为0,则每次扫描计数器时进行减半。