[redis] redis配置文件redis.conf的详细说明

  1 # Redis 配置文件

  2 

  3 # 当配置中需要配置内存大小时,可以使用 1k, 5GB, 4M 等类似的格式,其转换方式如下(不区分大小写)

  4 #

  5 # 1k => 

  6 1000 bytes

  7 # 1kb => 1024 bytes

  8 # 1m => 1000000 bytes

  9 # 1mb => 

 10 1024*1024 bytes

 11 # 1g => 1000000000 bytes

 12 # 1gb => 1024*1024*1024 

 13 bytes

 14 #

 15 # 内存配置大小写是一样的.比如 1gb 1Gb 1GB 1gB

 16 

 17 # daemonize no 默认情况下,redis不是在后台运行的,如果需要在后台运行,把该项的值更改为yes

 18 daemonize 

 19 yes

 20 

 21 # 当redis在后台运行的时候,Redis默认会把pid文件放在/var/run/redis.pid,你可以配置到其他地址。

 22 # 

 23 当运行多个redis服务时,需要指定不同的pid文件和端口

 24 pidfile /var/run/redis.pid

 25 

 26 # 指定redis运行的端口,默认是6379

 27 port 6379

 28 

 29 # 指定redis只接收来自于该IP地址的请求,如果不进行设置,那么将处理所有请求,

 30 # 在生产环境中最好设置该项

 31 # bind 

 32 127.0.0.1

 33 

 34 # Specify the path for the unix socket that will be used to listen for

 35 # 

 36 incoming connections. There is no default, so Redis will not listen

 37 # on a 

 38 unix socket when not specified.

 39 #

 40 # unixsocket /tmp/redis.sock

 41 # 

 42 unixsocketperm 755

 43 

 44 # 设置客户端连接时的超时时间,单位为秒。当客户端在这段时间内没有发出任何指令,那么关闭该连接

 45 # 0是关闭此设置

 46 timeout 

 47 0

 48 

 49 # 指定日志记录级别

 50 # Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose

 51 # 

 52 debug  记录很多信息,用于开发和测试

 53 # varbose 有用的信息,不像debug会记录那么多

 54 # 

 55 notice 普通的verbose,常用于生产环境

 56 # warning 只有非常重要或者严重的信息会记录到日志

 57 loglevel 

 58 debug

 59 

 60 # 配置log文件地址

 61 # 默认值为stdout,标准输出,若后台模式会输出到/dev/null

 62 #logfile 

 63 stdout

 64 logfile /var/log/redis/redis.log

 65 

 66 # To enable logging to the system logger, just set 'syslog-enabled' to 

 67 yes,

 68 # and optionally update the other syslog parameters to suit your 

 69 needs.

 70 # syslog-enabled no

 71 

 72 # Specify the syslog identity.

 73 # syslog-ident redis

 74 

 75 # Specify the syslog facility.  Must be USER or between LOCAL0-LOCAL7.

 76 # 

 77 syslog-facility local0

 78 

 79 # 可用数据库数

 80 # 默认值为16,默认数据库为0,数据库范围在0-(database-1)之间

 81 databases 16

 82 

 83 ################################ 快照  

 84 #################################

 85 #

 86 # 保存数据到磁盘,格式如下:

 87 #

 88 #   save 

 89 <seconds> <changes>

 90 #

 91 #   

 92 指出在多长时间内,有多少次更新操作,就将数据同步到数据文件rdb。

 93 #   相当于条件触发抓取快照,这个可以多个条件配合

 94 #   

 95 #   

 96 比如默认配置文件中的设置,就设置了三个条件

 97 #

 98 #   save 900 1  900秒内至少有1个key被改变

 99 #   save 300 

100 10  300秒内至少有300个key被改变

101 #   save 60 10000  60秒内至少有10000个key被改变

102 

103 save 900 1

104 save 300 10

105 save 60 10000

106 

107 # 存储至本地数据库时(持久化到rdb文件)是否压缩数据,默认为yes

108 rdbcompression yes

109 

110 # 本地持久化数据库文件名,默认值为dump.rdb

111 dbfilename dump.rdb

112 

113 # 工作目录

114 #

115 # 数据库镜像备份的文件放置的路径。

116 # 

117 这里的路径跟文件名要分开配置是因为redis在进行备份时,先会将当前数据库的状态写入到一个临时文件中,等备份完成时,

118 # 

119 再把该该临时文件替换为上面所指定的文件,而这里的临时文件和上面所配置的备份文件都会放在这个指定的路径当中。

120 #

121 # 

122 AOF文件也会存放在这个目录下面

123 #

124 # 注意这里必须制定一个目录而不是文件

125 dir ./

126 

127 ################################# 复制 

128 #################################

129 

130 # 主从复制. 设置该数据库为其他数据库的从数据库.

131 # 

132 设置当本机为slav服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步

133 #

134 # slaveof 

135 <masterip> <masterport>

136 

137 # 当master服务设置了密码保护时(用requirepass制定的密码)

138 # slav服务连接master的密码

139 #

140 # 

141 masterauth <master-password>

142 

143 

144 # 当从库同主机失去连接或者复制正在进行,从机库有两种运行方式:

145 #

146 # 1) 

147 如果slave-serve-stale-data设置为yes(默认设置),从库会继续相应客户端的请求

148 #

149 # 2) 

150 如果slave-serve-stale-data是指为no,出去INFO和SLAVOF命令之外的任何请求都会返回一个

151 #    错误"SYNC with 

152 master in progress"

153 #

154 slave-serve-stale-data yes

155 

156 # 从库会按照一个时间间隔向主库发送PINGs.可以通过repl-ping-slave-period设置这个时间间隔,默认是10秒

157 #

158 # 

159 repl-ping-slave-period 10

160 

161 # repl-timeout 设置主库批量数据传输时间或者ping回复时间间隔,默认值是60秒

162 # 

163 一定要确保repl-timeout大于repl-ping-slave-period

164 # repl-timeout 60

165 

166 ################################## 安全 

167 ###################################

168 

169 # 设置客户端连接后进行任何其他指定前需要使用的密码。

170 # 

171 警告:因为redis速度相当快,所以在一台比较好的服务器下,一个外部的用户可以在一秒钟进行150K次的密码尝试,这意味着你需要指定非常非常强大的密码来防止暴力破解

172 #

173 # 

174 requirepass foobared

175 

176 # 命令重命名.

177 #

178 # 在一个共享环境下可以重命名相对危险的命令。比如把CONFIG重名为一个不容易猜测的字符。

179 #

180 # 

181 举例:

182 #

183 # rename-command CONFIG 

184 b840fc02d524045429941cc15f59e41cb7be6c52

185 #

186 # 

187 如果想删除一个命令,直接把它重命名为一个空字符""即可,如下:

188 #

189 # rename-command CONFIG ""

190 

191 ################################### 约束 

192 ####################################

193 

194 # 设置同一时间最大客户端连接数,默认无限制,Redis可以同时打开的客户端连接数为Redis进程可以打开的最大文件描述符数,

195 # 如果设置 

196 maxclients 0,表示不作限制。

197 # 当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clients 

198 reached错误信息

199 #

200 # maxclients 128

201 

202 # 指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key

203 # 

204 Redis同时也会移除空的list对象

205 #

206 # 

207 当此方法处理后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作

208 #

209 # 

210 注意:Redis新的vm机制,会把Key存放内存,Value会存放在swap区

211 #

212 # 

213 maxmemory的设置比较适合于把redis当作于类似memcached的缓存来使用,而不适合当做一个真实的DB。

214 # 

215 当把Redis当做一个真实的数据库使用的时候,内存使用将是一个很大的开销

216 # maxmemory <bytes>

217 

218 # 当内存达到最大值的时候Redis会选择删除哪些数据?有五种方式可供选择

219 #

220 # volatile-lru -> 

221 利用LRU算法移除设置过过期时间的key (LRU:最近使用 Least Recently Used )

222 # allkeys-lru -> 

223 利用LRU算法移除任何key

224 # volatile-random -> 移除设置过过期时间的随机key

225 # 

226 allkeys->random -> remove a random key, any key

227 # volatile-ttl -> 

228 移除即将过期的key(minor TTL)

229 # noeviction -> 不移除任何可以,只是返回一个写错误

230 #

231 # 

232 注意:对于上面的策略,如果没有合适的key可以移除,当写的时候Redis会返回一个错误

233 #

234 #       写命令包括: set setnx 

235 setex append

236 #       incr decr rpush lpush rpushx lpushx linsert lset 

237 rpoplpush sadd

238 #       sinter sinterstore sunion sunionstore sdiff sdiffstore 

239 zadd zincrby

240 #       zunionstore zinterstore hset hsetnx hmset hincrby incrby 

241 decrby

242 #       getset mset msetnx exec sort

243 #

244 # 默认是:

245 #

246 # 

247 maxmemory-policy volatile-lru

248 

249 # LRU 和 minimal TTL 算法都不是精准的算法,但是相对精确的算法(为了节省内存),随意你可以选择样本大小进行检测。

250 # 

251 Redis默认的灰选择3个样本进行检测,你可以通过maxmemory-samples进行设置

252 #

253 # maxmemory-samples 

254 3

255 

256 ############################## AOF ###############################

257 

258 

259 # 

260 默认情况下,redis会在后台异步的把数据库镜像备份到磁盘,但是该备份是非常耗时的,而且备份也不能很频繁,如果发生诸如拉闸限电、拔插头等状况,那么将造成比较大范围的数据丢失。

261 # 

262 所以redis提供了另外一种更加高效的数据库备份及灾难恢复方式。

263 # 开启append 

264 only模式之后,redis会把所接收到的每一次写操作请求都追加到appendonly.aof文件中,当redis重新启动时,会从该文件恢复出之前的状态。

265 # 

266 但是这样会造成appendonly.aof文件过大,所以redis还支持了BGREWRITEAOF指令,对appendonly.aof 进行重新整理。

267 # 

268 你可以同时开启asynchronous dumps 和 AOF

269 

270 appendonly no

271 

272 # AOF文件名称 (默认: "appendonly.aof")

273 # appendfilename appendonly.aof

274 

275 # Redis支持三种同步AOF文件的策略:

276 #

277 # no: 不进行同步,系统去操作 . Faster.

278 # always: 

279 always表示每次有写操作都进行同步. Slow, Safest.

280 # everysec: 表示对写操作进行累积,每秒同步一次. 

281 Compromise.

282 #

283 # 默认是"everysec",按照速度和安全折中这是最好的。

284 # 

285 如果想让Redis能更高效的运行,你也可以设置为"no",让操作系统决定什么时候去执行

286 # 

287 或者相反想让数据更安全你也可以设置为"always"

288 #

289 # 如果不确定就用 "everysec".

290 

291 # appendfsync always

292 appendfsync everysec

293 # appendfsync no

294 

295 # AOF策略设置为always或者everysec时,后台处理进程(后台保存或者AOF日志重写)会执行大量的I/O操作

296 # 

297 在某些Linux配置中会阻止过长的fsync()请求。注意现在没有任何修复,即使fsync在另外一个线程进行处理

298 #

299 # 

300 为了减缓这个问题,可以设置下面这个参数no-appendfsync-on-rewrite

301 #

302 # This means that while 

303 another child is saving the durability of Redis is

304 # the same as "appendfsync 

305 none", that in pratical terms means that it is

306 # possible to lost up to 30 

307 seconds of log in the worst scenario (with the

308 # default Linux 

309 settings).

310 #

311 # If you have latency problems turn this to "yes". Otherwise 

312 leave it as

313 # "no" that is the safest pick from the point of view of 

314 durability.

315 no-appendfsync-on-rewrite no

316 

317 # Automatic rewrite of the append only file.

318 # AOF 自动重写

319 # 

320 当AOF文件增长到一定大小的时候Redis能够调用 BGREWRITEAOF 对日志文件进行重写

321 #

322 # 

323 它是这样工作的:Redis会记住上次进行些日志后文件的大小(如果从开机以来还没进行过重写,那日子大小在开机的时候确定)

324 #

325 # 

326 基础大小会同现在的大小进行比较。如果现在的大小比基础大小大制定的百分比,重写功能将启动

327 # 

328 同时需要指定一个最小大小用于AOF重写,这个用于阻止即使文件很小但是增长幅度很大也去重写AOF文件的情况

329 # 设置 percentage 

330 为0就关闭这个特性

331 

332 auto-aof-rewrite-percentage 100

333 auto-aof-rewrite-min-size 64mb

334 

335 ################################## SLOW LOG 

336 ###################################

337 

338 # Redis Slow Log 记录超过特定执行时间的命令。执行时间不包括I/O计算比如连接客户端,返回结果等,只是命令执行时间

339 #

340 # 

341 可以通过两个参数设置slow log:一个是告诉Redis执行超过多少时间被记录的参数slowlog-log-slower-than(微妙),

342 # 

343 另一个是slow log 的长度。当一个新命令被记录的时候最早的命令将被从队列中移除

344 

345 # 下面的时间以微妙微单位,因此1000000代表一分钟。

346 # 

347 注意制定一个负数将关闭慢日志,而设置为0将强制每个命令都会记录

348 slowlog-log-slower-than 10000

349 

350 # 对日志长度没有限制,只是要注意它会消耗内存

351 # 可以通过 SLOWLOG RESET 

352 回收被慢日志消耗的内存

353 slowlog-max-len 1024

354 

355 ################################ VM ###############################

356 

357 ### WARNING! Virtual Memory is deprecated in Redis 2.4

358 ### The use of 

359 Virtual Memory is strongly discouraged.

360 

361 # Virtual Memory allows Redis to work with datasets bigger than the 

362 actual

363 # amount of RAM needed to hold the whole dataset in memory.

364 # In 

365 order to do so very used keys are taken in memory while the other keys

366 # are 

367 swapped into a swap file, similarly to what operating systems do

368 # with 

369 memory pages.

370 #

371 # To enable VM just set 'vm-enabled' to yes, and set the 

372 following three

373 # VM parameters accordingly to your needs.

374 

375 vm-enabled no

376 # vm-enabled yes

377 

378 # This is the path of the Redis swap file. As you can guess, swap 

379 files

380 # can't be shared by different Redis instances, so make sure to use a 

381 swap

382 # file for every redis process you are running. Redis will complain if 

383 the

384 # swap file is already in use.

385 #

386 # The best kind of storage for the 

387 Redis swap file (that's accessed at random)

388 # is a Solid State Disk 

389 (SSD).

390 #

391 # *** WARNING *** if you are using a shared hosting the default 

392 of putting

393 # the swap file under /tmp is not secure. Create a dir with access 

394 granted

395 # only to Redis user and configure Redis to create the swap file 

396 there.

397 vm-swap-file /tmp/redis.swap

398 

399 # vm-max-memory configures the VM to use at max the specified amount 

400 of

401 # RAM. Everything that deos not fit will be swapped on disk *if* possible, 

402 that

403 # is, if there is still enough contiguous space in the swap 

404 file.

405 #

406 # With vm-max-memory 0 the system will swap everything it can. Not 

407 a good

408 # default, just specify the max amount of RAM you can in bytes, but 

409 it's

410 # better to leave some margin. For instance specify an amount of 

411 RAM

412 # that's more or less between 60 and 80% of your free 

413 RAM.

414 vm-max-memory 0

415 

416 # Redis swap files is split into pages. An object can be saved using 

417 multiple

418 # contiguous pages, but pages can't be shared between different 

419 objects.

420 # So if your page is too big, small objects swapped out on disk will 

421 waste

422 # a lot of space. If you page is too small, there is less space in the 

423 swap

424 # file (assuming you configured the same number of total swap file 

425 pages).

426 #

427 # If you use a lot of small objects, use a page size of 64 or 32 

428 bytes.

429 # If you use a lot of big objects, use a bigger page size.

430 # If 

431 unsure, use the default :)

432 vm-page-size 32

433 

434 # Number of total memory pages in the swap file.

435 # Given that the page 

436 table (a bitmap of free/used pages) is taken in memory,

437 # every 8 pages on 

438 disk will consume 1 byte of RAM.

439 #

440 # The total swap size is vm-page-size * 

441 vm-pages

442 #

443 # With the default of 32-bytes memory pages and 134217728 pages 

444 Redis will

445 # use a 4 GB swap file, that will use 16 MB of RAM for the page 

446 table.

447 #

448 # It's better to use the smallest acceptable value for your 

449 application,

450 # but the default is large in order to work in most 

451 conditions.

452 vm-pages 134217728

453 

454 # Max number of VM I/O threads running at the same time.

455 # This threads 

456 are used to read/write data from/to swap file, since they

457 # also encode and 

458 decode objects from disk to memory or the reverse, a bigger

459 # number of 

460 threads can help with big objects even if they can't help with

461 # I/O itself 

462 as the physical device may not be able to couple with many

463 # reads/writes 

464 operations at the same time.

465 #

466 # The special value of 0 turn off threaded 

467 I/O and enables the blocking

468 # Virtual Memory 

469 implementation.

470 vm-max-threads 4

471 

472 ############################### ADVANCED CONFIG 

473 ###############################

474 

475 # 当hash中包含超过指定元素个数并且最大的元素没有超过临界时,

476 # 

477 hash将以一种特殊的编码方式(大大减少内存使用)来存储,这里可以设置这两个临界值

478 # Redis 

479 Hash对应Value内部实际就是一个HashMap,实际这里会有2种不同实现,

480 # 

481 这个Hash的成员比较少时Redis为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的HashMap结构,对应的value 

482 redisObject的encoding为zipmap,

483 # 

484 当成员数量增大时会自动转成真正的HashMap,此时encoding为ht。

485 hash-max-zipmap-entries 

486 512

487 hash-max-zipmap-value 64

488 

489 # list数据类型多少节点以下会采用去指针的紧凑存储格式。

490 # 

491 list数据类型节点值大小小于多少字节会采用紧凑存储格式。

492 list-max-ziplist-entries 

493 512

494 list-max-ziplist-value 64

495 

496 # set数据类型内部数据如果全部是数值型,且包含多少节点以下会采用紧凑格式存储。

497 set-max-intset-entries 

498 512

499 

500 # zsort数据类型多少节点以下会采用去指针的紧凑存储格式。

501 # 

502 zsort数据类型节点值大小小于多少字节会采用紧凑存储格式。

503 zset-max-ziplist-entries 

504 128

505 zset-max-ziplist-value 64

506 

507 # Redis将在每100毫秒时使用1毫秒的CPU时间来对redis的hash表进行重新hash,可以降低内存的使用

508 #

509 # 

510 当你的使用场景中,有非常严格的实时性需要,不能够接受Redis时不时的对请求有2毫秒的延迟的话,把这项配置为no。

511 #

512 # 

513 如果没有这么严格的实时性要求,可以设置为yes,以便能够尽可能快的释放内存

514 activerehashing yes

515 

516 ################################## INCLUDES 

517 ###################################

518 

519 # 指定包含其它的配置文件,可以在同一主机上多个Redis实例之间使用同一份配置文件,而同时各个实例又拥有自己的特定配置文件

520 # 

521 include /path/to/local.conf

522 # include /path/to/other.conf

 

你可能感兴趣的:(redis.conf)