(1)redis.conf 配置文件
1.daemonize no
默认情况下,redis不是在后台运行的,如果需要在后台运行,把该项的值更改为yes;
2. pidfile /var/run/redis.pid
当redis在后台运行的时候,Redis默认会把pid文件放在/var/run/redis.pid,你可以配置到其他地址。当运行多个redis
服务时,需要指定不同的pid文件和端口。
3. port 6379
指定redis运行的端口
4. timeout 0
设置客户端连接时的超时时间,单位为秒。当客户端在这段时间内没有发出任何指令,那么server端关闭该连接。0为关
闭该设置。
5. loglevel notice
server日志级别,合法值:debug,verbose,notice,warning 默认为notice
debug适合开发环境,客户端操作信息都会输出日志
verbose输出一些相对有用的信息,目前效果不明
notice适合生产环境
warning异常信息
6.logfile
指定Redis日志记录方式,默认值为stdout,表示打印在命令行终端的窗口上,也可设为/dev/null屏蔽日志
7. maxclients 128
限制同时连接的客户数量。
当连接数超过这个值时,redis 将不再接收其他连接请求,客户端尝试连接时将收到 error 信息
8. maxmemory <bytes>
设置redis能够使用的最大内存。
达到最大内存设置后,Redis会先尝试清除已到期或即将到期的Key(设置过expire信息的key)
在删除时,按照过期时间进行删除,最早将要被过期的key将最先被删除
如果已到期或即将到期的key删光,仍进行set操作,那么将返回错误
此时redis将不再接收写请求,只接收get请求。
maxmemory的设置比较适合于把redis当作于类似memcached 的缓存来使用
9. maxmemory-policy
当内存达到最大值的时候Redis会选择删除哪些数据?有五种方式可供选择
##
volatile-lru -> 利用LRU算法移除设置过过期时间的key (LRU:最近使用 Least Recently Used )
# allkeys-lru -> 利用LRU算法移除任何key
# volatile-random -> 移除设置过过期时间的随机key
# allkeys->random -> remove a random key, any key
# volatile-ttl -> 移除即将过期的key(minor TTL)
# noeviction -> 不移除任何可以,只是返回一个写错误
##
注意:对于上面的策略,如果没有合适的key可以移除,当写的时候Redis会返回一个错误
##
写命令包括: 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
10. syslog-enabled no
'syslog-enabled'设置为yes会把日志输出到系统日志,默认是no
11. syslog-facility local0
指定syslog 设备(facility), 必须是USER或者LOCAL0到LOCAL7.
SLOWLOG (日志)
1. slowlog-log-slower-than 10000
Redis slow log用来记录超过指定执行时间的查询。执行时间不包括I/O计算比如连接客户端,返回结果等,只是命令执
行时间
可以通过两个参数设置slow log:一个是告诉Redis执行超过多少时间被记录的参数slowlog-log-slower-than(毫秒),另
一个是slow log 的长度。当一个新命令被记录的时候最早的命令将被从队列中移除
负数则关闭slow log,0则会导致每个命令都被记录
2. slowlog-max-len
对日志长度没有限制,只是要注意它会消耗内存
可以通过 SLOWLOG RESET 回收被慢日志消耗的内存
Snapshotting(快照)
1. save
save ,用来描述”在多少秒期间至少多少个变更操作”触发snapshot
snapshot最终将生成新的dump.rdb文件
save “”用来禁用snapshot功能
例如save 300 1表示5分钟内至少一个key变更,触发snapshot
2. rdbcompression yes
是否启用rdb文件压缩手段,默认为yes.
压缩可能需要额外的cpu开支,不过这能够有效的减小rdb文件的大小,有利于存储/备份/传输/数据恢复.
3. rdbchecksum yes
是否对rdb文件使用CRC64校验和,默认为”yes”,那么每个rdb文件内容的末尾都会追加CRC校验和.
对于其他第三方校验工具,可以很方便的检测文件的完整性
4. dbfilename dump.rdb
镜像备份文件的文件名
# The filename where to dump the DB dbfilename dump.rdb
5. dir ./
指定rdb/AOF文件的目录位置,只能为文件夹不能为文件
# Note that you must specify a directory here, not a file name. dir /var/lib/redis
AOF
1. appendonly no
#默认情况下,Redis会异步的把数据保存到硬盘。如果你的应用场景允许因为系统崩溃等极端情况而导致最新数据丢失#
的话,那这种做法已经很ok了。否则你应该打开‘append only’模式,开启这种模式后,Redis会在#appendonly.aof
文件中添加每一个写操作,这个文件会在Redis启动时被读取来在内存中重新构建数据集。
#注意:如果你需要,你可以同时开启‘append only’模式和异步dumps模式(你需要注释掉上面的‘save’表达式
来禁#止dumps),这种情况下,Redis重建数据集时会优先使用appendonly.aof而忽略dump.rdb
2. appendfilename appendonly.aof
AOF文件名称 (默认: "appendonly.aof")
3. appendfsync everysec
# 调用fsync()函数通知操作系统立刻向硬盘写数据
# Redis支持三种同步AOF文件的策略:
#
# no:不fsync, 只是通知OS可以flush数据了,具体是否flush取决于OS.性能更好.
# always: 每次写入append only 日志文件后都会fsync . 性能差,但很安全.
# everysec: 没间隔1秒进行一次fsync. 折中.
#
# 默认是"everysec",按照速度和安全折中这是最好的。
# 如果想让Redis能更高效的运行,你也可以设置为"no",让操作系统决定什么时候去执行
# 或者相反想让数据更安全你也可以设置为"always"
#
# 如果不确定就用 "everysec".
4. no-appendfsync-on-rewrite no
# AOF策略设置为always或者everysec时,后台处理进程(后台保存或者AOF日志重写)会执行大量的I/O操作
# 在某些Linux配置中会阻止过长的fsync()请求。注意现在没有任何修复,即使fsync在另外一个线程进行处理
#
# 为了减缓这个问题,可以设置下面这个参数no-appendfsync-on-rewrite
5. auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
# append only 文件的自动重写
# 当AOF 日志文件即将增长到指定百分比时,Redis可以通过调用BGREWRITEAOF 来自动重写append only文件。
# 它是这么干的:Redis会记住最近一次重写后的AOF 文件size。然后它会把这个size与当前size进行比较,如果当前size
比指定的百分比大,就会触发重写。同样,你需要指定AOF文件被重写的最小size,这对避免虽然百分比达到了, 但是实
际上文件size还是很小(这种情况没有必要重写)却导致AOF文件重写的情况很有用。
# auto-aof-rewrite-percentage 设置为 0 可以关闭AOF重写功能
高级配置
1. hash-max-zipmap-entries 512
hash-max-zipmap-value 64
redis 2.0后引入了 hash 数据结构。
当hash中包含超过指定元素个数并且最大的元素没有超过临界时,
# hash将以一种特殊的编码方式(大大减少内存使用)来存储,这里可以设置这两个临界值
# Redis Hash对应Value内部实际就是一个HashMap,实际这里会有2种不同实现,
# 这个Hash的成员比较少时Redis为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的HashMap结
构,对应的value redisObject的encoding为zipmap,
# 当成员数量增大时会自动转成真正的HashMap,此时encoding为ht。
2. activerehashing yes
是否重置Hash表
设置成yes后redis将每100毫秒使用1毫秒CPU时间来对redis的hash表重新hash,可降低内存的使用
当使用场景有较为严格的实时性需求,不能接受Redis时不时的对请求有2毫秒的延迟的话,把这项配置为no。
如果没有这么严格的实时性要求,可以设置为 yes,以便能够尽可能快的释放内存
3. list-max-ziplist-entries 512
list-max-ziplist-value 64
list 数据类型多少节点以下会采用去指针的紧凑存储格式。
list 数据类型节点值大小小于多少字节会采用紧凑存储格式。
4. set-max-intset-entries 512
set数据类型内部数据如果全部是数值型,且包含多少节点以下会采用紧凑格式存储。
5. zset-max-ziplist-entries 128
zset-max-ziplist-value 64
zsort 数据类型多少节点以下会采用去指针的紧凑存储格式。
zsort 数据类型节点值大小小于多少字节会采用紧凑存储格式。
Replication(复制)
1. slaveof
将当前server做为slave,并为其指定master信息.
slaveof <masterip> <masterport> 当本机为从服务时,设置主服务的IP及端口
# slaveof <masterip> <masterport> slaveof 11.41.8.209 63789
2. masterauth
以认证的方式连接到master。 如果master中使用了”密码保护”,slave必须交付正确的授权密码,才能连接成功。
“requirepass”配置项指定了当前server的密码。
此配置项中值需要和master机器的”requirepass”保持一致
masterauth tinywanredis
redis在真实环境中不可以谁想访问就访问,所以,必须要设置密码,修改redis.conf文件配置# requirepass foobared去掉注释,foobared改为自己的密码。
3. slave-serve-stale-data yes
如果当前server是slave,那么当slave与master失去通讯时,是否继续为客户端提供服务,”yes”表示继续,”no”表示终止.
在”yes”情况下,slave继续向客户端提供只读服务,有可能此时的数据已经过期.
在”no”情况下,任何向此server发送的数据请求服务(包括客户端和此server的slave)都将被告知”error”,但 INFO 和SLAVEOF
命令除外。
# When a slave loses its connection with the master, or when the replication # is still in progress, the slave can act in two different ways:slave-serve-stale-data yes
redis数据存储
redis的存储分为内存存储、磁盘存储和log文件三部分,配置文件中有三个参数对其进行配置。
- save seconds updates,save配置,指出在多长时间内,有多少次更新操作,就将数据同步到数据文件。可多个条件配合,默认配置了三个条件。
- appendonly yes/no ,appendonly配置,指出是否在每次更新操作后进行日志记录,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为redis本身同步数据文件是按上面的save条件来同步的,所以有的数据会在一段时间内只存在于内存中。
- appendfsync no/always/everysec ,appendfsync配置,no表示等操作系统进行数据缓存同步到磁盘,always表示每次更新操作后手动调用fsync()将数据写到磁盘,everysec表示每秒同步一次。