1 ## Redis 3.2x配置文件详解 2 3 --------------------------------------- 4 # 默认redis不是之后台进程的方式启动,若是须要在后台运行,须要将这个值设置成yes 5 # 之后台方式启动的时候,redis会写入默认的进程文件/var/run/redis.pid 6 daemonize yes 7 8 # redis启动的进程路径 9 pidfile /var/run/redis.pid 10 11 # 启动进程端口号,这里最好不要使用默认的6379,容易被攻击 12 port 7179 13 14 tcp-backlog 511 15 16 # 配置redis监听到的ip地址,能够是一个也能够多个 17 bind 127.0.0.1 10.254.3.42 18 19 # redis的sock路径 20 unixsocket/tmp/redis.sock 21 unixsocketperm 755 22 23 #当客户端闲置多长时间后关闭链接,若是指定为0,表示关闭该功能 24 timeout 0 25 26 #指定TCP链接是否为长链接,"侦探"信号有server端维护。默认为0.表示禁用 27 tcp-keepalive 0 28 29 # 日志级别,log 等级分为4 级,debug,verbose,notice, 和warning。生产环境下通常开启notice 30 loglevel notice 31 32 # 日志文件地址 33 logfile"/usr/local/redis/logs/redis.log" 34 35 36 # 设置数据库的个数,可使用SELECT 命令来切换数据库。默认使用的数据库是0号库。默认16个库 37 databases 16 38 39 #RDB方式的持久化是经过快照(snapshotting)完成的,当符合必定条件时Redis会自动将内存中的全部数据进行快照并存储在硬盘上。进行快照的条件能够由用户在配置文件中自定义,由两个参数构成:时间和改动的键的个数。当在指定的时间内被更改的键的个数大于指定的数值时就会进行快照。RDB是Redis默认采用的持久化方式,在配置文件中已经预置了3个条件: 40 save 900 1 # 900秒内有至少1个键被更改则进行快照 41 save 300 10 # 300秒内有至少10个键被更改则进行快照 42 save 60 10000 # 60秒内有至少10000个键被更改则进行快照 43 44 # 持久化数据存储目录 45 dir /usr/local/redis/data 46 47 48 #当持久化出现错误时,是否依然继续进行工做,是否终止全部的客户端write请求。默认设置"yes"表示终止,一旦snapshot数据保存故障,那么此server为只读服务。若是为"no",那么这次snapshot将失败,但下一次snapshot不会受到影响,不过若是出现故障,数据只能恢复到"最近一个成功点" 49 stop-writes-on-bgsave-errorno 50 51 #在进行数据镜像备份时,是否启用rdb文件压缩手段,默认为yes。压缩可能须要额外的cpu开支,不过这可以有效的减少rdb文件的大,有利于存储/备份/传输/数据恢复 52 rdbcompression yes 53 54 #checksum文件检测,读取写入的时候rdb文件checksum,会损失一些性能 55 rdbchecksum yes 56 57 #镜像备份文件的文件名,默认为dump.rdb 58 dbfilename dump.rdb 59 60 #当主master服务器挂机或主从复制在进行时,是否依然能够容许客户访问可能过时的数据。在"yes"状况下,slave继续向客户端提供只读服务,有可能此时的数据已通过期;在"no"状况下,任何向此server发送的数据请求服务(包括客户端和此server的slave)都将被告知"error" 61 slave-serve-stale-datayes 62 63 # 若是是slave库,只容许只读,不容许修改 64 slave-read-only yes 65 66 67 #slave与master的链接,是否禁用TCPnodelay选项。"yes"表示禁用,那么socket通信中数据将会以packet方式发送(packet大小受到socket buffer限制)。能够提升socket通信的效率(tcp交互次数),可是小数据将会被buffer,不会被当即发送,对于接受者可能存在延迟。"no"表示开启tcp nodelay选项,任何数据都会被当即发送,及时性较好,可是效率较低,建议设为no,在高并发或者主从有大量操做的状况下,设置为yes 68 repl-disable-tcp-nodelayno 69 70 71 #适用Sentinel模块(unstable,M-S集群管理和监控),须要额外的配置文件支持。slave的权重值,默认100.当master失效后,Sentinel将会从slave列表中找到权重值最低(>0)的slave,并提高为master。若是权重值为0,表示此slave为"观察者",不参与master选举 72 slave-priority 100 73 74 #限制同时链接的客户数量。当链接数超过这个值时,redis 将再也不接收其余链接请求,客户端尝试链接时将收到error 信息。默认为10000,要考虑系统文件描述符限制,不宜过大,浪费文件描述符,具体多少根据具体状况而定 75 maxclients 10000 76 77 #redis-cache所能使用的最大内存(bytes),默认为0,表示"无限制",最终由OS物理内存大小决定(若是物理内存不足,有可能会使用swap)。此值尽可能不要超过机器的物理内存尺寸,从性能和实施的角度考虑,能够为物理内存3/4。此配置须要和"maxmemory-policy"配合使用,当redis中内存数据达到maxmemory时,触发"清除策略"。在"内存不足"时,任何write操做(好比set,lpush等)都会触发"清除策略"的执行。在实际环境中,建议redis的全部物理机器的硬件配置保持一致(内存一致),同时确保master/slave中"maxmemory""policy"配置一致。 78 maxmemory 0 79 80 81 #内存过时策略,内存不足"时,数据清除策略,默认为"volatile-lru"。 82 #volatile-lru ->对"过时集合"中的数据采起LRU(近期最少使用)算法.若是对key使用"expire"指令指定了过时时间,那么此key将会被添加到"过时集合"中。将已通过期/LRU的数据优先移除.若是"过时集合"中所有移除仍不能知足内存需求,将OOM. 83 #allkeys-lru ->对全部的数据,采用LRU算法 84 #volatile-random ->对"过时集合"中的数据采起"随即选取"算法,并移除选中的K-V,直到"内存足够"为止. 若是若是"过时集合"中所有移除所有移除仍不能知足,将OOM 85 #allkeys-random ->对全部的数据,采起"随机选取"算法,并移除选中的K-V,直到"内存足够"为止 86 #volatile-ttl ->对"过时集合"中的数据采起TTL算法(最小存活时间),移除即将过时的数据. 87 #noeviction ->不作任何干扰操做,直接返回OOM异常 88 #另外,若是数据的过时不会对"应用系统"带来异常,且系统中write操做比较密集,建议采起"allkeys-lru" 89 maxmemory-policyvolatile-lru 90 91 # 默认值5,上面LRU和最小TTL策略并不是严谨的策略,而是大约估算的方式,所以能够选择取样值以便检查 92 maxmemory-samples 5 93 94 #默认状况下,redis 会在后台异步的把数据库镜像备份到磁盘,可是该备份是很是耗时的,并且备份也不能很频繁。因此redis 提供了另一种更加高效的数据库备份及灾难恢复方式。开启append only 模式以后,redis 会把所接收到的每一次写操做请求都追加到appendonly.aof 文件中,当redis 从新启动时,会从该文件恢复出以前的状态。可是这样会形成appendonly.aof 文件过大,因此redis 还支持了BGREWRITEAOF 指令,对appendonly.aof 进行从新整理。若是不常常进行数据迁移操做,推荐生产环境下的作法为关闭镜像,开启appendonly.aof,同时能够选择在访问较少的时间天天对appendonly.aof 进行重写一次。 95 #另外,对master机器,主要负责写,建议使用AOF,对于slave,主要负责读,挑选出1-2台开启AOF,其他的建议关闭 96 appendonly yes 97 98 #aof文件名字,默认为appendonly.aof 99 appendfilename"appendonly.aof" 100 101 # 设置对appendonly.aof 文件进行同步的频率。always表示每次有写操做都进行同步,everysec 表示对写操做进行累积,每秒同步一次。no不主动fsync,由OS本身来完成。这个须要根据实际业务场景进行配置 102 appendfsync everysec 103 104 # 在aof rewrite期间,是否对aof新记录的append暂缓使用文件同步策略,主要考虑磁盘IO开支和请求阻塞时间。默认为no,表示"不暂缓",新的aof记录仍然会被当即同步 105 no-appendfsync-on-rewriteno 106 107 #当Aof log增加超过指定比例时,重写logfile,设置为0表示不自动重写Aof 日志,重写是为了使aof体积保持最小,而确保保存最完整的数据。 108 auto-aof-rewrite-percentage100 109 #触发aof rewrite的最小文件尺寸 110 auto-aof-rewrite-min-size64mb 111 112 #lua脚本执行的最大时间,单位毫秒 113 lua-time-limit 5000 114 115 116 117 #慢日志记录,单位微妙,10000就是10毫秒值,若是操做时间超过此值,将会把command信息"记录"起来.(内存,非文件)。其中"操做时间"不包括网络IO开支,只包括请求达到server后进行"内存实施"的时间."0"表示记录所有操做 118 slowlog-log-slower-than10000 119 120 #"慢操做日志"保留的最大条数,"记录"将会被队列化,若是超过了此长度,旧记录将会被移除。能够经过"SLOWLOG<subcommand> args"查看慢记录的信息(SLOWLOG get 10,SLOWLOG reset) 121 slowlog-max-len 128 122 notify-keyspace-events"" 123 124 #hash类型的数据结构在编码上可使用ziplist和hashtable。ziplist的特色就是文件存储(以及内存存储)所需的空间较小,在内容较小时,性能和hashtable几乎同样.所以redis对hash类型默认采起ziplist。若是hash中条目的条目个数或者value长度达到阀值,将会被重构为hashtable。 125 #这个参数指的是ziplist中容许存储的最大条目个数,,默认为512,建议为128 126 hash-max-ziplist-entries 512 127 #ziplist中容许条目value值最大字节数,默认为64,建议为1024 128 hash-max-ziplist-value 64 129 130 #同上 131 list-max-ziplist-entries512 132 list-max-ziplist-value64 133 134 #intset中容许保存的最大条目个数,若是达到阀值,intset将会被重构为hashtable 135 set-max-intset-entries512 136 137 #zset为有序集合,有2中编码类型:ziplist,skiplist。由于"排序"将会消耗额外的性能,当zset中数据较多时,将会被重构为skiplist。 138 zset-max-ziplist-entries128 139 #zset中容许条目value值最大字节数,默认为64,建议为1024 140 zset-max-ziplist-value64 141 142 143 #是否开启顶层数据结构的rehash功能,若是内存容许,请开启。rehash可以很大程度上提升K-V存取的效率 144 activerehashing yes 145 146 #客户端buffer控制。在客户端与server进行的交互中,每一个链接都会与一个buffer关联,此buffer用来队列化等待被client接受的响应信息。若是client不能及时的消费响应信息,那么buffer将会被不断积压而给server带来内存压力.若是buffer中积压的数据达到阀值,将会致使链接被关闭,buffer被移除。 147 148 #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. 149 client-output-buffer-limitnormal 0 0 0 150 client-output-buffer-limitslave 256mb 64mb 60 151 client-output-buffer-limitpubsub 32mb 8mb 60 152 153 154 #Redis server执行后台任务的频率,默认为10,此值越大表示redis对"间歇性task"的执行次数越频繁(次数/秒)。"间歇性task"包括"过时集合"检测、关闭"空闲超时"的链接等,此值必须大于0且小于500。此值太小就意味着更多的cpu周期消耗,后台task被轮询的次数更频繁。此值过大意味着"内存敏感"性较差。建议采用默认值。 155 hz 10 156 157 #当一个child在重写AOF文件的时候,若是aof-rewrite-incremental-fsync值为yes生效,那么这个文件会以每次32M数据的来被同步,这大量新增提交到磁盘是有用的,而且能避免高峰延迟。 158 aof-rewrite-incremental-fsyncyes 159 160 ------------------------------------------------------------------------------- 161 可对以上配置按基本配置、主从配置、安全、限制、日志模式、慢查询等进行分类 162 ------------------------------------------------------------------------------- 163 164 服务端命令 165 time # 返回时间戳+微秒 166 dbsize #返回key的数量 167 bgrewriteaof #重写aof 168 bgsave #后台开启子进程dump数据 169 save #阻塞进程dump数据 170 lastsave 171 slaveof host port #作host port的从服务器(数据清空,复制新主内容) 172 slaveof no one #变成主服务器(原数据不丢失,通常用于主服失败后) 173 flushdb #清空当前数据库的全部数据 174 flushall #清空全部数据库的全部数据(误用了怎么办?) 175 shutdown [save/nosave] #关闭服务器,保存数据,修改AOF(若是设置) 176 slowlog get #获取慢查询日志 177 slowlog len #获取慢查询日志条数 178 slowlog reset #清空慢查询 179 info [] 180 config get #选项(支持*通配) 181 config set #选项 值 182 config rewrite #把值写到配置文件 183 config restart #更新info命令的信息 184 debug object key #调试选项,看一个key的状况 185 debug segfault #模拟段错误,让服务器崩溃 186 object key (refcount|encoding|idletime) 187 monitor #打开控制台,观察命令(调试用) 188 client list #列出全部链接 189 client kill #杀死某个链接 CLIENT KILL 127.0.0.1:43501 190 client getname #获取链接的名称 默认nil 191 client setname "名称" #设置链接名称,便于调试 192 链接命令 193 auth 密码 #密码登录(若是有密码) 194 ping #测试服务器是否可用 195 echo "some content" #测试服务器是否正常交互 196 select 0/1/2... #选择数据库 197 quit #退出链接