redis配置详解

 

# Redis configuration file example

 

 

# Note on units: when memory size is needed, it is possible to specify

 

# it in the usual form of 1k 5GB 4M and so forth:

 

#

 

# 1k => 1000 bytes

 

# 1kb => 1024 bytes

 

# 1m => 1000000 bytes

 

# 1mb => 1024*1024 bytes

 

# 1g => 1000000000 bytes

 

# 1gb => 1024*1024*1024 bytes

 

#

 

# units are case insensitive so 1GB 1Gb 1gB are all the same.

 

 

################################## INCLUDES:自定义配置文件 ###################################

 

 

# include和c里面的include概念类似,可以把redis的的参数分散到其他文件,

 

#当运行多个redis实例时,通过include一个common的配置文件让所有redis-server共享,简化redis.conf的内容。

 

# include /path/to/local.conf

 

# include /path/to/other.conf

 

 

################################ GENERAL:全局配置 #####################################

 

 

# 这个参数指定redis是否以后台进程方式启动默认不是,生产环境可以改成yes,另外,Redis是单线程的。

 

daemonize no

 

 

# 当daemonize参数为yes时,后台进程方式启动后,redis会创建进程文件,这个参数是指定此文件的路径。

 

pidfile /var/run/redis.pid

 

 

# redistcp 监听端口,客户端通过此端口与redis服务器交互。非集群模式下,redis只有这个监听端口

 

port 6379

 

 

# 客户端连接队列值,这个值是socket里面listen函数的参数。如果服务器caps很高,需要把这个参数改大些。

 

tcp-backlog 511

 

 

# 监听地址,默认是监听所有网卡,也可以指定监听一个或多个。多个的格式:bind 192.168.1.1 192.168.1.

 

# Examples: 

 

# bind 192.168.1.100 10.0.0.1

 

# bind 127.0.0.1

 

 

#指定用来监听Unix套接字的路径。没有默认值, 所以在没有指定的情况下Redis不会监听Unix套接字

 

# unixsocket /tmp/redis.sock

 

# unixsocketperm 700

 

 

# client空闲几秒后断开连接,0为将这个功能职位不可用

 

timeout 0

 

 

# TCP keepalive.

 

# 如果非零,则设置SO_KEEPALIVE选项来向空闲连接的客户端发送ACK,由于以下两个原因这是很有用的:

 

# 1)能够检测无响应的客户端

 

# 2)让该连接中间的网络设备知道这个连接还存活

 

# 在Linux上,这个指定的值(单位:秒)就是发送ACK的时间间隔。

 

# 注意:要关闭这个连接需要两倍的这个时间值。

 

# 在其他内核上这个时间间隔由内核配置决定

 

# 这个选项的一个合理值是60秒

 

tcp-keepalive 0

 

 

#指定log级别,默认是notice,包括debug,verbose ,notice, , warning.

 

#生产环境建议用notice,测试阶段可以用debug或者verbose,debug的log最多。 

 

# debug (大量信息,对开发/测试有用)

 

# verbose (很多精简的有用信息,但是不像debug等级那么多)

 

# notice (适量的信息,基本上是你生产环境中需要的)

 

# warning (只有很重要/严重的信息会记录下来)

 

loglevel notice

 

 

# log 文件指定,默认是空,打印到控制台,可指定路径,如/var/log/redis.log

 

logfile ""

 

 

# 要使用系统日志记录器,只要设置 "syslog-enabled" 为 "yes" 就可以了。

 

# 然后根据需要设置其他一些syslog参数就可以了。

 

# syslog-enabled no

 

 

# 指明syslog身份

 

# syslog-ident redis

 

 

# 指明syslog的设备。必须是user或LOCAL0 ~ LOCAL7之一。

 

# syslog-facility local0

 

 

# 设置数据库个数。默认数据库是 DB 0,

 

# 可以通过select <dbid> (0 <= dbid <= 'databases' - 1 )来为每个连接使用不同的数据库。

 

databases 16

 

 

################################ SNAPSHOTTING:持久化 ################################

 

#这个参数是redis持久化的支持,基于snapshot机制定期执行持久化存储,生成rdb文件

 

#save 命令打开此配置,

 

#第一个参数指定多久(单位是秒)执行一次,第二个是在第一个参数指定的时间内执行多少次写操作才执行持久化操作。

 

#如果不想持久化到硬盘,可以修改为如下:

 

#save ""

 

save 900 1

 

save 300 10

 

save 60 10000

 

 

#保存失败,停止工作

 

# 默认如果开启持久化(至少一条save指令)并且最新的后台保存失败,Redis将会停止接受写操作

 

# 这将使用户知道数据没有正确的持久化到硬盘,否则可能没人注意到并且造成一些灾难。

 

#

 

# 如果后台保存进程能重新开始工作,Redis将自动允许写操作

 

#

 

# 然而如果你已经部署了适当的Redis服务器和持久化的监控,你可能想关掉这个功能以便于即使是

 

# 硬盘,权限等出问题了Redis也能够像平时一样正常工作

 

stop-writes-on-bgsave-error yes

 

 

# 当导出到 .rdb 数据库时是否用LZF压缩字符串对象?

 

# 默认设置为 "yes",因为几乎在任何情况下它都是不错的。

 

# 如果你想节省CPU的话你可以把这个设置为 "no",但是如果你有可压缩的key和value的话,

 

# 那数据文件就会更大了。

 

rdbcompression yes

 

 

# 因为版本5的RDB有一个CRC64算法的校验和放在了文件的最后这将使文件格式更加可靠但在

 

# 生产和加载RDB文件时,这有一个性能消耗(大约10%),所以你可以关掉它来获取最好的性能

 

# 生成的关闭校验的RDB文件有一个0的校验和,它将告诉加载代码跳过检查

 

rdbchecksum yes

 

 

# 持久化数据库的文件名

 

dbfilename dump.rdb

 

 

# 工作目录

 

# 数据库会写到这个目录下,文件名就是上面的 "dbfilename" 的值。

 

# 累加文件也放这里。

 

# 注意你这里指定的必须是目录,不是文件名。

 

dir ./

 

 

################################# REPLICATION:主从 #################################

 

 

 

#Redis 主从复制功能,通过这个参数可以让一个redis启动时作为某个master的slave

 

#Slaveof 第一个参数是master的ip,第二个参数是master的port.

 

#也可以通过redis-cli控制台执行slaveof命令动态把某个redis作为另一个master的slave

 

# slaveof <masterip> <masterport>

 

 

# If the master is password protected (using the "requirepass" configuration

 

# directive below) it is possible to tell the slave to authenticate before

 

# starting the replication synchronization process, otherwise the master will

 

# refuse the slave request.

 

#这个参数只有在当前redis作为slave时管用,用于slave和master之间的鉴权,如果master开启了鉴权功能,则masterauth的意思是此slave和master通信时用这个密码。

 

#另外,这个参数只有在master的redis.conf文件中开启reqireuth参数时才被使用。

 

# masterauth <master-password>

 

 

 

# 当一个slave失去和master的连接,或者同步正在进行中,slave的行为有两种可能:

 

# 1) 如果 slave-serve-stale-data 设置为 "yes" (默认值)slave会继续响应客户端请求

 

# 可能是正常数据,也可能是还没获得值的空数据。

 

# 2) 如果 slave-serve-stale-data 设置为 "no",slave会回复"正在从master同步  

 

# (SYNC with master in progress)"来处理各种请求,除了 INFO 和 SLAVEOF 命令。

 

slave-serve-stale-data yes

 

 

# 你可以配置salve实例是否接受写操作可写的slave实例可能对存储临时数据比较有用(因为写入salve

 

# 的数据在同master同步之后将很容被删除),但是如果客户端由于配置错误在写入时也可能产生一些问题。

 

# 从Redis2.6默认所有的slave为只读

 

# 注意:只读的slave不是为了暴露给互联网上不可信的客户端而设计的。它只是一个防止实例误用的保护层。

 

# 一个只读的slave支持所有的管理命令比如config,debug等。为了限制你可以用'rename-command'来

 

# 隐藏所有的管理和危险命令来增强只读slave的安全性

 

slave-read-only yes

 

 

# Replication SYNC strategy: disk or socket.

 

#

 

# -------------------------------------------------------

 

# WARNING: DISKLESS REPLICATION IS EXPERIMENTAL CURRENTLY

 

# -------------------------------------------------------

 

#

 

# New slaves and reconnecting slaves that are not able to continue the replication

 

# process just receiving differences, need to do what is called a "full

 

# synchronization". An RDB file is transmitted from the master to the slaves.

 

# The transmission can happen in two different ways:

 

#

 

# 1) Disk-backed: The Redis master creates a new process that writes the RDB

 

# file on disk. Later the file is transferred by the parent

 

# process to the slaves incrementally.

 

# 2) Diskless: The Redis master creates a new process that directly writes the

 

# RDB file to slave sockets, without touching the disk at all.

 

#

 

# With disk-backed replication, while the RDB file is generated, more slaves

 

# can be queued and served with the RDB file as soon as the current child producing

 

# the RDB file finishes its work. With diskless replication instead once

 

# the transfer starts, new slaves arriving will be queued and a new transfer

 

# will start when the current one terminates.

 

#

 

# When diskless replication is used, the master waits a configurable amount of

 

# time (in seconds) before starting the transfer in the hope that multiple slaves

 

# will arrive and the transfer can be parallelized.

 

#

 

# With slow disks and fast (large bandwidth) networks, diskless replication 

 

# works better.

 

repl-diskless-sync no

 

 

# When diskless replication is enabled, it is possible to configure the delay 

 

# the server waits in order to spawn the child that trnasfers the RDB via socket

 

# to the slaves.

 

#

 

# This is important since once the transfer starts, it is not possible to serve

 

# new slaves arriving, that will be queued for the next RDB transfer, so the server

 

# waits a delay in order to let more slaves arrive.

 

#

 

# The delay is specified in seconds, and by default is 5 seconds. To disable

 

# it entirely just set it to 0 seconds and the transfer will start ASAP.

 

repl-diskless-sync-delay 5

 

 

# slave根据指定的时间间隔向master发送ping请求。

 

# 时间间隔可以通过 repl_ping_slave_period 来设置。

 

# 默认10秒。

 

# repl-ping-slave-period 10

 

 

# 以下选项设置同步的超时时间

 

# 1)slave在与master SYNC期间有大量数据传输,造成超时

 

# 2)在slave角度,master超时,包括数据、ping等

 

# 3)在master角度,slave超时,当master发送REPLCONF ACK pings

 

# 确保这个值大于指定的repl-ping-slave-period,否则在主从间流量不高时每次都会检测到超时

 

# repl-timeout 60

 

 

# 是否在slave套接字发送SYNC之后禁用 TCP_NODELAY ?

 

# 如果你选择“yes”Redis将使用更少的TCP包和带宽来向slaves发送数据。但是这将使数据传输到slave

 

# 上有延迟,Linux内核的默认配置会达到40毫秒

 

# 如果你选择了 "no" 数据传输到salve的延迟将会减少但要使用更多的带宽

 

# 默认我们会为低延迟做优化,但高流量情况或主从之间的跳数过多时,把这个选项设置为“yes”

 

# 是个不错的选择。

 

repl-disable-tcp-nodelay no

 

 

# 设置数据备份的backlog大小backlog是一个slave在一段时间内断开连接时记录salve数据的缓冲,

 

# 所以一个slave在重新连接时,不必要全量的同步,而是一个增量同步就足够了,将在断开连接的这段

 

# 时间内slave丢失的部分数据传送给它。

 

# 同步的backlog越大,slave能够进行增量同步并且允许断开连接的时间就越长。

 

# backlog只分配一次并且至少需要一个slave连接

 

# repl-backlog-size 1mb

 

 

# 当master在一段时间内不再与任何slave连接,backlog将会释放。以下选项配置了从最后一个

 

# slave断开开始计时多少秒后,backlog缓冲将会释放。

 

# 0表示永不释放backlog

 

# repl-backlog-ttl 3600

 

 

# slave的优先级是一个整数展示在Redis的Info输出中。如果master不再正常工作了,哨兵将用它来

 

# 选择一个slave提升=升为master。

 

# 优先级数字小的salve会优先考虑提升为master,所以例如有三个slave优先级分别为10,100,25,

 

# 哨兵将挑选优先级最小数字为10的slave。

 

# 0作为一个特殊的优先级,标识这个slave不能作为master,所以一个优先级为0的slave永远不会被

 

# 哨兵挑选提升为master

 

# 默认优先级为100

 

slave-priority 100

 

 

# 如果master少于N个延时小于等于M秒的已连接slave,就可以停止接收写操作。

 

# N个slave需要是“oneline”状态

 

# 延时是以秒为单位,并且必须小于等于指定值,是从最后一个从slave接收到的ping(通常每秒发送)

 

# 开始计数。

 

# This option does not GUARANTEES that N replicas will accept the write, but

 

# will limit the window of exposure for lost writes in case not enough slaves

 

# are available, to the specified number of seconds.

 

# 例如至少需要3个延时小于等于10秒的slave用下面的指令:

 

# min-slaves-to-write 3

 

# min-slaves-max-lag 10

 

# 两者之一设置为0将禁用这个功能。

 

# 默认 min-slaves-to-write 值是0(该功能禁用)并且 min-slaves-max-lag 值是10。

 

################################## SECURITY:安全机制 ###################################

 

 

 

#此redis的密码,如果开启,客户端连接时需要设置密码,另外一个作用是redis作为slave时,

 

#如果master开启了此参数,slave需要设置masterauth参数的值为此参数(requirepass)的值,

 

# requirepass foobared

 

 

# 命令重命名

 

# 在共享环境下,可以为危险命令改变名字。比如,你可以为 CONFIG 改个其他不太容易猜到的名字,

 

# 这样内部的工具仍然可以使用,而普通的客户端将不行。

 

# 例如:

 

# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52

 

# 也可以通过改名为空字符串来完全禁用一个命令

 

# rename-command CONFIG ""

 

# 请注意:改变命令名字被记录到AOF文件或被传送到从服务器可能产生问题。

 

 

################################### LIMITS:资源限制 ####################################

 

 

# 设置最多同时连接的客户端数量。默认这个限制是10000个客户端,然而如果Redis服务器不能配置

 

# 处理文件的限制数来满足指定的值,那么最大的客户端连接数就被设置成当前文件限制数减32(因

 

# 为Redis服务器保留了一些文件描述符作为内部使用)

 

# 一旦达到这个限制,Redis会关闭所有新连接并发送错误'max number of clients reached'

 

# maxclients 10000

 

 

#redis申请的最大内存,字节为单位,默认不限制。

 

# 一旦内存使用达到上限,Redis会根据选定的回收策略(参见: maxmemmory-policy)删除key

 

# 如果因为删除策略Redis无法删除key,或者策略设置为 "noeviction",Redis会回复需要更

 

# 多内存的错误信息给命令。例如,SET,LPUSH等等,但是会继续响应像Get这样的只读命令。

 

# 在使用Redis作为LRU缓存,或者为实例设置了硬性内存限制的时候(使用 "noeviction" 策略)

 

# 的时候,这个选项通常事很有用的。

 

# 警告:当有多个slave连上达到内存上限的实例时,master为同步slave的输出缓冲区所需

 

# 内存不计算在使用内存中。这样当驱逐key时,就不会因网络问题 / 重新同步事件触发驱逐key

 

# 的循环,反过来slaves的输出缓冲区充满了key被驱逐的DEL命令,这将触发删除更多的key,

 

# 直到这个数据库完全被清空为止

 

# 总之...如果你需要附加多个slave,建议你设置一个稍小maxmemory限制,这样系统就会有空闲

 

# 的内存作为slave的输出缓存区(但是如果最大内存策略设置为"noeviction"的话就没必要了)

 

# maxmemory <bytes>

 

 

# 最大内存策略:如果达到内存限制了,Redis如何选择删除key。你可以在下面五个行为里选:

 

# volatile-lru -> 根据LRU算法生成的过期时间来删除。

 

# allkeys-lru -> 根据LRU算法删除任何key。

 

# volatile-random -> 根据过期设置来随机删除key。

 

# allkeys->random -> 无差别随机删。

 

# volatile-ttl -> 根据最近过期时间来删除(辅以TTL)

 

# noeviction -> 谁也不删,直接在写操作时返回错误。

 

# 注意:对所有策略来说,如果Redis找不到合适的可以删除的key都会在写操作时返回一个错误。

 

# 目前为止涉及的命令:set setnx setex append

 

# incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd

 

# sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby

 

# zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby

 

# getset mset msetnx exec sort

 

# 默认值如下:

 

# maxmemory-policy volatile-lru

 

# LRU和最小TTL算法的实现都不是很精确,但是很接近(为了省内存),所以你可以用样本量做检测。

 

# 例如:默认Redis会检查3个key然后取最旧的那个,你可以通过下面的配置指令来设置样本的个数。

 

# maxmemory-samples 3

 

############################## APPEND ONLY MODE:仅追加模式 ###############################

 

 

#Redis持久化第二种方式,AOF,默认开启,默认每秒执行一次持久化保存,也可以设置成实时保持,这个比save更安全。

 

# 默认情况下,Redis是异步的把数据导出到磁盘上。这种模式在很多应用里已经足够好,但Redis进程

 

# 出问题或断电时可能造成一段时间的写操作丢失(这取决于配置的save指令)。

 

# AOF是一种提供了更可靠的替代持久化模式,例如使用默认的数据写入文件策略(参见后面的配置)

 

# 在遇到像服务器断电或单写情况下Redis自身进程出问题但操作系统仍正常运行等突发事件时,Redis

 

# 能只丢失1秒的写操作。

 

# AOF和RDB持久化能同时启动并且不会有问题。

 

# 如果AOF开启,那么在启动时Redis将加载AOF文件,它更能保证数据的可靠性。

 

# 请查看 http://redis.io/topics/persistence 来获取更多信息.

 

appendonly no

 

 

#AOF方式下,保持的数据文件名字(default: "appendonly.aof")

 

appendfilename "appendonly.aof"

 

 

# fsync() 系统调用告诉操作系统把数据写到磁盘上,而不是等更多的数据进入输出缓冲区。

 

# 有些操作系统会真的把数据马上刷到磁盘上;有些则会尽快去尝试这么做。

 

# Redis支持三种不同的模式:

 

# no:不要立刻刷,只有在操作系统需要刷的时候再刷。比较快。

 

# always:每次写操作都立刻写入到aof文件。慢,但是最安全。

 

# everysec:每秒写一次。折中方案

 

# 默认的 "everysec" 通常来说能在速度和数据安全性之间取得比较好的平衡。根据你的理解来

 

# 决定,如果你能放宽该配置为"no" 来获取更好的性能(但如果你能忍受一些数据丢失,可以考虑使用

 

# 默认的快照持久化模式),或者相反,用“always”会比较慢但比everysec要更安全。

 

# 请查看下面的文章来获取更多的细节

 

http://antirez.com/post/redis-persistence-demystified.html

 

# 如果不能确定,就用 "everysec"

 

# appendfsync always

 

appendfsync everysec

 

# appendfsync no

 

 

# 如果AOF的同步策略设置成 "always" 或者 "everysec",并且后台的存储进程(后台存储或写入AOF

 

# 日志)会产生很多磁盘I/O开销。某些Linux的配置下会使Redis因为 fsync()系统调用而阻塞很久。

 

# 注意,目前对这个情况还没有完美修正,甚至不同线程的 fsync() 会阻塞我们同步的write(2)调用。

 

# 为了缓解这个问题,可以用下面这个选项。它可以在 BGSAVE 或 BGREWRITEAOF 处理时阻止fsync()。

 

# 这就意味着如果有子进程在进行保存操作,那么Redis就处于"不可同步"的状态。

 

# 这实际上是说,在最差的情况下可能会丢掉30秒钟的日志数据。(默认Linux设定)

 

# 如果把这个设置成"yes"带来了延迟问题,就保持"no",这是保存持久数据的最安全的方式。

 

no-appendfsync-on-rewrite no

 

 

# 自动重写AOF文件

 

# 如果AOF日志文件增大到指定百分比,Redis能够通过 BGREWRITEAOF 自动重写AOF日志文件。

 

# 工作原理:Redis记住上次重写时AOF文件的大小(如果重启后还没有写操作,就直接用启动时的AOF大小)

 

# 这个基准大小和当前大小做比较。如果当前大小超过指定比例,就会触发重写操作。你还需要指定被重写

 

# 日志的最小尺寸,这样避免了达到指定百分比但尺寸仍然很小的情况还要重写。

 

# 指定百分比为0会禁用AOF自动重写特性。

 

auto-aof-rewrite-percentage 100

 

auto-aof-rewrite-min-size 64mb

 

 

# An AOF file may be found to be truncated at the end during the Redis

 

# startup process, when the AOF data gets loaded back into memory.

 

# This may happen when the system where Redis is running

 

# crashes, especially when an ext4 filesystem is mounted without the

 

# data=ordered option (however this can't happen when Redis itself

 

# crashes or aborts but the operating system still works correctly).

 

#

 

# Redis can either exit with an error when this happens, or load as much

 

# data as possible (the default now) and start if the AOF file is found

 

# to be truncated at the end. The following option controls this behavior.

 

#

 

# If aof-load-truncated is set to yes, a truncated AOF file is loaded and

 

# the Redis server starts emitting a log to inform the user of the event.

 

# Otherwise if the option is set to no, the server aborts with an error

 

# and refuses to start. When the option is set to no, the user requires

 

# to fix the AOF file using the "redis-check-aof" utility before to restart

 

# the server.

 

#

 

# Note that if the AOF file will be found to be corrupted in the middle

 

# the server will still exit with an error. This option only applies when

 

# Redis will try to read more data from the AOF file but not enough bytes

 

# will be found.

 

aof-load-truncated yes

 

 

################################ LUA SCRIPTING :脚本 ###############################

 

 

# Lua 脚本的最大执行时间,毫秒为单位

 

# 如果达到了最大的执行时间,Redis将要记录在达到最大允许时间之后一个脚本仍然在执行,并且将

 

# 开始对查询进行错误响应。

 

# 当一个长时间运行的脚本超过了最大执行时间,只有 SCRIPT KILL 和 SHUTDOWN NOSAVE 两个

 

# 命令可用。第一个可以用于停止一个还没有调用写命名的脚本。第二个是关闭服务器唯一方式,当

 

# 写命令已经通过脚本开始执行,并且用户不想等到脚本的自然终止。

 

# 设置成0或者负值表示不限制执行时间并且没有任何警告

 

lua-time-limit 5000

 

 

################################## SLOW LOG:慢日志 ###################################

 

 

# Redis慢查询日志可以记录超过指定时间的查询。运行时间不包括各种I/O时间,例如:连接客户端,

 

# 发送响应数据等,而只计算命令执行的实际时间(这只是线程阻塞而无法同时为其他请求服务的命令执

 

# 行阶段)

 

#

 

# 你可以为慢查询日志配置两个参数:一个指明Redis的超时时间(单位为微秒)来记录超过这个时间的命令

 

# 另一个是慢查询日志长度。当一个新的命令被写进日志的时候,最老的那个记录从队列中移除。

 

#

 

# 下面的时间单位是微秒,所以1000000就是1秒。注意,负数时间会禁用慢查询日志,而0则会强制记录

 

# 所有命令。

 

slowlog-log-slower-than 10000

 

 

# 这个长度没有限制。只是要主要会消耗内存。你可以通过 SLOWLOG RESET 来回收内存。

 

slowlog-max-len 128

 

 

################################ LATENCY MONITOR:监控 ##############################

 

 

# The Redis latency monitoring subsystem samples different operations

 

# at runtime in order to collect data related to possible sources of

 

# latency of a Redis instance.

 

#

 

# Via the LATENCY command this information is available to the user that can

 

# print graphs and obtain reports.

 

#

 

# The system only logs operations that were performed in a time equal or

 

# greater than the amount of milliseconds specified via the

 

# latency-monitor-threshold configuration directive. When its value is set

 

# to zero, the latency monitor is turned off.

 

#

 

# By default latency monitoring is disabled since it is mostly not needed

 

# if you don't have latency issues, and collecting data has a performance

 

# impact, that while very small, can be measured under big load. Latency

 

# monitoring can easily be enalbed at runtime using the command

 

# "CONFIG SET latency-monitor-threshold <milliseconds>" if needed.

 

latency-monitor-threshold 0

 

 

############################# Event notification ##############################

 

 

# Redis 能通知 Pub/Sub 客户端关于键空间发生的事件

 

# 这个功能文档位于http://redis.io/topics/keyspace-events

 

# 例如:如果键空间事件通知被开启,并且客户端对 0 号数据库的键 foo 执行 DEL 命令时,将通过

 

# Pub/Sub发布两条消息:

 

# PUBLISH __keyspace@0__:foo del

 

# PUBLISH __keyevent@0__:del foo

 

# 可以在下表中选择Redis要通知的事件类型。事件类型由单个字符来标识:

 

# K 键空间通知,以__keyspace@<db>__为前缀

 

# E 键事件通知,以__keysevent@<db>__为前缀

 

# g DEL , EXPIRE , RENAME 等类型无关的通用命令的通知, ...

 

# $ String命令

 

# l List命令

 

# s Set命令

 

# h Hash命令

 

# z 有序集合命令

 

# x 过期事件(每次key过期时生成)

 

# e 驱逐事件(当key在内存满了被清除时生成)

 

# A g$lshzxe的别名,因此”AKE”意味着所有的事件

 

# notify-keyspace-events 带一个由0到多个字符组成的字符串参数。空字符串意思是通知被禁用。

 

# 例子:启用List和通用事件通知:

 

# notify-keyspace-events Elg

 

# 例子2:为了获取过期key的通知订阅名字为 __keyevent@__:expired 的频道,用以下配置

 

# notify-keyspace-events Ex

 

# 默认所用的通知被禁用,因为用户通常不需要该特性,并且该特性会有性能损耗。

 

# 注意如果你不指定至少K或E之一,不会发送任何事件。

 

notify-keyspace-events ""

 

 

############################### ADVANCED CONFIG:高级配置 ###############################

 

 

# 当hash只有少量的entry时,并且最大的entry所占空间没有超过指定的限制时,会用一种节省内存的

 

# 数据结构来编码。可以通过下面的指令来设定限制

 

hash-max-ziplist-entries 512

 

hash-max-ziplist-value 64

 

 

# 与hash似,数据元素较少的list,可以用另一种方式来编码从而节省大量空间。  

 

# 这种特殊的方式只有在符合下面限制时才可以用:

 

list-max-ziplist-entries 512

 

list-max-ziplist-value 64

 

 

# set有一种特殊编码的情况:当set数据全是十进制64位有符号整型数字构成的字符串时。

 

# 下面这个配置项就是用来设置set使用这种编码来节省内存的最大长度。

 

set-max-intset-entries 512

 

 

# 与hash和list相似,有序集合也可以用一种特别的编码方式来节省大量空间。

 

# 这种编码只适合长度和元素都小于下面限制的有序集合:

 

zset-max-ziplist-entries 128

 

zset-max-ziplist-value 64

 

 

# HyperLogLog sparse representation bytes limit. The limit includes the

 

# 16 bytes header. When an HyperLogLog using the sparse representation crosses

 

# this limit, it is converted into the dense representation.

 

# A value greater than 16000 is totally useless, since at that point the

 

# dense representation is more memory efficient.

 

# The suggested value is ~ 3000 in order to have the benefits of

 

# the space efficient encoding without slowing down too much PFADD,

 

# which is O(N) with the sparse encoding. The value can be raised to

 

# ~ 10000 when CPU is not a concern, but space is, and the data set is

 

# composed of many HyperLogLogs with cardinality in the 0 - 15000 range.

 

hll-sparse-max-bytes 3000

 

 

# 启用哈希刷新,每100个CPU毫秒会拿出1个毫秒来刷新Redis的主哈希表(顶级键值映射表)。

 

# redis所用的哈希表实现(见dict.c)采用延迟哈希刷新机制你对一个哈希表操作越多,哈希刷新

 

# 操作就越频繁;反之,如果服务器是空闲的,那么哈希刷新就不会完成,哈希表就会占用更多的一些

 

# 内存而已。

 

# 默认是每秒钟进行10次哈希表刷新,用来刷新字典,然后尽快释放内存。

 

# 建议:

 

# 如果你对延迟比较在意,不能够接受Redis时不时的对请求有2毫秒的延迟的话,就用

 

# "activerehashing no",如果不太在意延迟而希望尽快释放内存就设置"activerehashing yes"

 

activerehashing yes

 

 

# 客户端的输出缓冲区的限制,可用于强制断开那些因为某种原因从服务器读取数据的速度不够快的客户端,

 

# (一个常见的原因是一个发布/订阅客户端消费消息的速度无法赶上生产它们的速度)

 

# 可以对三种不同的客户端设置不同的限制:

 

# normal -> 正常客户端

 

# slave -> slave和 MONITOR 客户端

 

# pubsub -> 至少订阅了一个pubsub channel或pattern的客户端

 

# 下面是每个client-output-buffer-limit语法:

 

# client-output-buffer-limit <class><hard limit> <soft limit> <soft seconds>

 

 

# 一旦达到硬限制客户端会立即被断开,或者达到软限制并持续达到指定的秒数(连续的)。

 

# 例如,如果硬限制为32兆字节和软限制为16兆字节/10秒,客户端将会立即断开

 

# 如果输出缓冲区的大小达到32兆字节,或客户端达到16兆字节并连续超过了限制10秒,就将断开连接。

 

# 默认normal客户端不做限制,因为他们在不主动请求时不接收数据(以推的方式),只有异步客户端

 

# 可能会出现请求数据的速度比它可以读取的速度快的场景。

 

# pubsub和slave客户端会有一个默认值,因为订阅者和slaves以推的方式来接收数据

 

# 把硬限制和软限制都设置为0来禁用该功能

 

client-output-buffer-limit normal 0 0 0

 

client-output-buffer-limit slave 256mb 64mb 60

 

client-output-buffer-limit pubsub 32mb 8mb 60

 

 

# Redis调用内部函数来执行许多后台任务,如关闭客户端超时的连接,清除未被请求过的过期Key等等。

 

# 不是所有的任务都以相同的频率执行,但Redis依照指定的“hz”值来执行检查任务。

 

# 默认情况下,“hz”的被设定为10。提高该值将在Redis空闲时使用更多的CPU时,但同时当有多个key

 

# 同时到期会使Redis的反应更灵敏,以及超时可以更精确地处理。

 

# 范围是1到500之间,但是值超过100通常不是一个好主意。

 

# 大多数用户应该使用10这个默认值,只有在非常低的延迟要求时有必要提高到100。

 

hz 10

 

 

# 当一个子进程重写AOF文件时,如果启用下面的选项,则文件每生成32M数据会被同步。为了增量式的

 

# 写入硬盘并且避免大的延迟高峰这个指令是非常有用的

 

aof-rewrite-incremental-fsync yes 

原文地址:https://www.cnblogs.com/shan13936/p/13784883.html