系统配置
vm.overcommit_memory
Linux系统对内存请求都会分配,以便能运行更多程序。在申请内存后并不会马上使用内存,这种技术就叫做overcommit,如果参数设置为0则Redis会出现告警。
 | 
 | 
该参数有三个值可选,Redis建议设置为1并配合maxmemory使用
| 值 | 描述 | 
|---|---|
| 0 | 内核将检查是否有可用内存(包括swap),如果有足够的内存,则申请通过,否则将失败信息返回给应用程序 | 
| 1 | 内核允许超量使用内存直到用完为止 | 
| 2 | 内核保证不会超量使用内存,即不超过swap+50%的RAM值,50%是参数overcommit_ratio控制 | 
修改内核参数
 | 
 | 
swappiness
swap内存交换空间能够在内存不足时,对部分内存页进行swap操作。但swap空间是由硬盘提供,对于高并发应用程序来说,磁盘IO能力会成为系统瓶颈。Linux并不是完全等到内存不够用时才使用swap,参数swappiness会决定系统使用swap的策略。swappiness取值范围为0~100,值越大说明系统会更积极使用swap,值越低系统就更倾向于物理内存,默认值为60
| 值 | 描述 | 
|---|---|
| 0 | Linux3.5以及以上:宁愿OOM killer也不用swap;Linux3.4以及更早:宁愿swap也不要OOM killer | 
| 1 | Linux3.5以及以上:宁愿swap也不要OOM killer | 
| 60 | 默认值 | 
| 100 | 操作系统会主动地使用swap | 
查看swap使用情况
 | 
 | 
设置swappiness
 | 
 | 
如果Linux > 3.5 ,则设置为1,否则设置为0。但是Redis为高可用环境时,死掉会比阻塞更好,能够及时切换到正常节点上
THP
Linux kernel在2.6.38内核增加了Transparent Huge Pages (THP)特性 ,支持大内存页(2MB)分配,默认开启。当开启时可以降低fork子进程的速度,但fork之后,每个内存页从原来4KB变为2MB,会大幅增加重写期间父进程内存消耗。同时每次写命令引起的复制内存页单位放大了512倍,会拖慢写操作的执行时间,导致大量写操作慢查询。因此,建议关闭该功能。
 | 
 | 
NTP
无论是什么数据库环境,都强烈建议配置时间同步,避免集群节点出现时间不一致的情况,增加问题排查日志难度,定时任务异常等情况。日常可以使用NTP服务来作为时间同步,通过crontab定时同步系统时间
ulimit
open files限制单个用户最大文件打开个数。Redis的maxclients默认为10000,加上最大32个文件描述符,因此建议open files设置为至少10032,如果采用默认的4096,减去32个文件描述符,则maxclients仅为4064
 | 
 | 
TCP backlog
Redis默认的tcp-backlog为511,可以通过修改配置tcp-backlog进行调整,如果Linux的tcp-backlog小于Redis设置的tcp-backlog,那么在Redis启动时会看到如下日志:
 | 
 | 
修改tcp backlog
 | 
 | 
Redis安装
解压安装包
 | 
 | 
编译安装
 | 
 | 
创建数据目录
 | 
 | 
参数配置(/etc/redis.conf)
 | 
 | 
设置环境变量
 | 
 | 
启动数据库实例
 | 
 | 
附录
参数详解
| 参数 | 说明 | 
|---|---|
| daemonize | 是否以后台进程启动 | 
| databases | 创建database的数量 | 
| port | 进程对应的端口,默认为6379 | 
| tcp-keepalive | 指定TCP连接是否为长连接,0则关闭,非0则开启 | 
| loglevel | Server日志级别:debug调试模式、verbose、notice、warning | 
| protected-mode | 外网保护模式,禁止外网访问redis,如果要设置为no,需确保数据库不会暴漏在外网,设置为YES的话需要设置bind绑定内网IP或设置实例密码 | 
| pidfile | 指定pid文件的存放位置 | 
| logfile | 指定日志文件的存放位置 | 
| requirepass | 设置redis登录密码 | 
| maxmemory | 设置redis最大内存大小,单位为byte | 
| bind | 设置绑定的网口IP,用于接收服务请求 | 
| hz | Server执行后台任务的频率 | 
| save | rdb持久化策略,例如save 300 1表示5分钟内至少一个key变更则触发持久化操作,禁用rdb持久化可设置save "" | 
| rdbcompression | 是否启用rdb文件压缩,默认为yes | 
| rdbchecksum | 是否对rdb文件使用CRC64校验和 | 
| stop-writes-on-bgsave-error | 当bgsave持久化写入错误时是否停止 | 
| dbfilename | 设置rdb文件名称,默认为dump.rdb | 
| dir | 指定持久化文件的存放位置 | 
| appendonly | 是否开启AOF持久化 | 
| appendfilename | 指定AOF持久化文件名称,默认为appendonly.aof | 
| appendfsync | AOF持久化策略,可选值有always、everysec、no | 
| no-appendfsync-on-rewrite | 表示rewrite重写AOF时,是否阻塞AOF持久化,no表示会阻塞 | 
| auto-aof-rewrite-percentage | 触发AOF文件rewrite的增长百分比 | 
| auto-aof-rewrite-min-size | 触发AOF文件rewrite的大小 | 
| aof-rewrite-incremental-fsync | AOF rewrite是否采取增量文件同步策略 | 
| slaveof | 当前为从库时,设置同步主库信息 | 
| masterauth | 当前为从库时,设置主库的登录密码 | 
| repl-timeout | 复制超时时间,单位为秒,默认为60 | 
| slave-server-stale-data | 当前为从库时,在与主库连接断开时,是否继续提供服务 | 
| slave-read-only | 当前为从库时,只读 | 
| redis-disable-tcp-nodelay | 主从是否延迟传输 | 
| slave-priority | 指定slave的优先级,在哨兵模式下,主库宕机,会将优先级最小的提升为master。如果设置为0则永远不会提升为master | 
| slowlog-log-slower-than | 慢查询日志记录阀值,单位为微秒,超过阀值将被记录到慢查询日志 | 
| slowlog-max-len | 控制slow log保留多少条记录,超过后将删除最旧的一条记录 | 
| hash-max-ziplist-entries | hash类型默认采用ziplist结构编码,超过该值则采用hashtable | 
| hash-max-ziplist-value | ziplist允许条目value值的最大字节数 | 
| list-max-ziplist-entries | list类型默认采用ziplist结构编码,超过该值则采用linkedlist | 
| list-max-ziplist-value | ziplist允许条目value值的最大字节数 | 
| set-max-intset-entries | intset中允许保存的最大条目数,如果达到阀值,才重构为hashtable | 
| zset-max-ziplist-entries | zset类型默认采用ziplist编码结构,超过阀值将重构为skiplist | 
| zset-max-ziplist-value | zset允许条目value值的最大字节数 | 
| activerehashing | 是否开启顶层数据结构得rehash功能 | 
| client-output-buffer-limit normal | 客户端buffer控制,normal表示普通连接,hard表示最大值,一旦到达立即关闭连接,soft表示容忍值,和seconds配合表示在超过seconds则关闭连接,都设置为0则表示禁用 | 
| client-output-buffer-limit slave | 客户端buffer控制,slave表示从库连接,hard表示最大值,一旦到达立即关闭连接,soft表示容忍值,和seconds配合表示在超过seconds则关闭连接,都设置为0则表示禁用 | 
| client-output-buffer-limit pubsub | 客户端buffer控制,pubsub表示pub/sub类型连接,hard表示最大值,一旦到达立即关闭连接,soft表示容忍值,和seconds配合表示在超过seconds则关闭连接,都设置为0则表示禁用 | 
| rename-command | 重命名指定命令 |