Redis 配置文件

在启动Redis服务器时,我们需要为其指定一个配置文件,缺省情况下配置文件在Redis的源码目录下,文件名为redis.conf。

redis配置文件使用#######################被分成了几大块区域,

主要有:

  1. 通用(general)
  2. 快照(snapshotting)
  3. 复制(replication)
  4. 安全(security)
  5. 限制(limits)
  6. 追加模式(append only mode)
  7. LUA脚本(lua scripting)
  8. REDIS集群(REDIS CLUSTER)
  9. 慢日志(slow log)
  10. 事件通知(event notification)
  11. ADVANCED CONFIG

为了对Redis的系统实现有一个直接的认识,我们首先来看一下Redis的配置文件中定义了哪些主要参数以及这些参数的作用。


  • daemonize no

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


  • pidfile /var/run/redis_6379.pid

当Redis在后台运行的时候,Redis默认会把pid文件放在/var/run/redis.pid, 你可以配置到其他地址。当运行多个redis服务时,需要指定不同的pid文件和端口;


  • port 6379

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

作者在自己的一篇博文中解释了为什么选用6379作为默认端口,因为6379在手机按键上MERZ对应的号码,而MERZ取自意大利歌女Alessia Merz的名字


  • bind 127.0.0.1

指定redis只接收来自于该IP地址的请求,如果不进行设置,那么将处理所有请求。在生产环境中最好设置该项;


  • loglevel notice

指定日志记录级别,

其中Redis总共支持四个级别: debug 、verbose 、notice 、warning, 默认为 notice 。

  • debug表示记录很多信息,用于开发和测试。
  • verbose表示记录有用的信息, 但不像debug会记录那么多。
  • notice表示普通的verbose,常用于生产环境。
  • warning 表示只有非常重要或者严重的信息会记录到日志;

  • logfile ""

配置log文件地址,默认值为stdout。若后台模式会输出到/dev/null("黑洞"); (可以自定义配置:/var/log/redis/redis.log)


  • databases 16

可用数据库数,默认值为16,默认数据库为0,数据库范围在0­ 15之间切换,彼此隔离;


  • save

保存数据到磁盘,格式为 save <seconds> <changes>,指出在多长时间内,有多少次更新操作, 就将数据同步到数据文件rdb。相当于条件触发抓取快照,这个可以多个条件配合。

保存数据到磁盘:

  • save 900 1 #900秒(15分钟)内至少有1个key被改变
  • save 300 10 #300秒(5分钟)内至少有10个key被改变
  • save 60 10000 #60秒内至少有10000个key被改变

  • rdbcompression yes

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

如果为了节省CPU时间,可以关闭该选项,但会导致数据库文件变的巨大


  • dbfilename dump.rdb

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


  • dir ./

工作目录,数据库镜像备份的文件放置的路径。


  • slaveof

主从复制,设置该数据库为其他数据库的从数据库。设置当本机为slave服务时,设置master服务的IP地址及端口。 在Redis启动时,它会自动从master进行数据同步;


  • masterauth

当master服务设置了密码保护时(用requirepass制定的密码)slave服务连接master的密码;


  • slave-serve-stale-data yes

当一个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 命令。


  • repl-ping-slave-period 10

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


  • repl-timeout 60

设置主库批量数据传输时间或者ping回复时间间隔,默认值是60秒,一定要确保repl-timeout大于repl-ping-slave-period ;不然会经常检测到超时。

master检测到slave上次发送的时间超过repl-timeout,即认为slave离线,清除该slave信息。

slave检测到上次和master交互的时间超过repl-timeout,则认为master离线


  • requirepass foobared

设置客户端连接后进行任何其他指定前需要使用的密码。因为redis速度相当快,所以在一台比较好的服务器下, 一个外部的用户可以在一秒钟进行150K次的密码尝试,这意味着你需要指定非常强大的密码来防止暴力破解;


  • rename­command CONFIG ""

命令重命名,在一个共享环境下可以重命名相对危险的命令,比如把CONFIG重名为一个不容易猜测的字符: rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52。 如果想删除一个命令,直接把它重命名为一个空字符""即可:rename-command CONFIG "";


  • maxclients 128

设置最多同时连接客户端数量。

默认没有限制,这个关系到Redis进程能够打开的文件描述符数量。

特殊值"0"表示没有限制。

一旦达到这个限制,Redis会关闭所有新连接并发送错误"达到最大用户数上限(max number of clients reached)"


  • maxmemory

指定Redis最大内存限制。Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key, Redis同时也会移除空的list对象。当此方法处理后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。

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


  • maxmemory-policy volatile-lru

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

  • volatile-lru 代表利用LRU算法移除设置过期时间的key(LRU:最近使用 LeastRecentlyUsed)
  • allkeys-lru 代表利用LRU算法移除任何key
  • volatile-random 代表移除设置过过期时间的随机key
  • allkeys_random 代表移除一个随机的key,
  • volatile-ttl 代表移除即将过期的key(minor TTL)
  • noeviction 代表不移除任何key,只是返回一个写错误。

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


  • appendonly no

是否开启aof功能

默认情况下,redis会在后台异步的把数据库镜像备份到磁盘,但是该备份是非常耗时的,而且备份也不能很频繁。 如果发生诸如拉闸限电、拔插头等状况,那么将造成比较大范围的数据丢失,所以redis提供了另外一种更加高效的数据库备份及灾难恢复方式。

开启appendonly模式之后,redis会把所接收到的每一次写操作请求都追加到appendonly.aof文件中。

当redis重新启动时,会从该文件恢复出之前的状态


  • appendfilename appendonly.aof

AOF文件名称,默认为"appendonly.aof";


  • appendfsync everysec

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

  • no 代表不进行同步,系统去操作,
  • always 代表每次有写操作都进行同步,
  • everysec 代表对写操作进行累积,每秒同步一次

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


  • slowlog-log-slower-than 10000

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

可以通过两个参数设置slow log:一个是告诉Redis执行超过多少时间被记录的参数slowlog-log-slower-than(微妙), 另一个是slow log 的长度。当一个新命令被记录的时候最早的命令将被从队列中移除,

下面的时间以微秒(百万分之一秒,1000 * 1000)单位, 因此1000000代表一分钟。

1秒=1000毫秒
1秒=1000000微秒

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


  • slowlog-max-len 128

慢操作日志"保留的最大条数

"记录"将会被队列化,如果超过了此长度,旧记录将会被移除。可以通过SLOWLOG <subcommand> args查看慢记录的信息(SLOWLOG get 10,SLOWLOG reset),通过"SLOWLOG get num"指令可以查看最近num条慢速记录,其中包括"记录"操作的时间/指令/K-V等信息。


参考:https://github.com/linli8/cnblogs/blob/master/redis%E5%89%AF%E6%9C%AC.conf

总结

Select 命令

Redis Select 命令用于切换到指定的数据库,数据库索引号 index 用数字值指定,以 0 作为起始索引值。

python@ubuntu:/dev$ redis-cli
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> set name 'itcast.cn'
OK
127.0.0.1:6379[1]> select 2
OK
127.0.0.1:6379[2]> set web 'itcast.com'
OK
127.0.0.1:6379[2]> get web
"itcast.com"
127.0.0.1:6379[2]> select 1
OK
127.0.0.1:6379[1]> get name
"itcast.cn"
127.0.0.1:6379[1]>

Shutdown 命令

Redis Shutdown 命令执行以下操作:

  • 停止所有客户端
  • 如果有至少一个保存点在等待,执行 SAVE 命令
  • 如果 AOF 选项被打开,更新 AOF 文件
  • 关闭 redis 服务器(server)
redis 127.0.0.1:6379> PING
PONG
redis 127.0.0.1:6379> SHUTDOWN
$ redis

Redis 认证

redis-cli
AUTH "password"

或者

redis-cli -h 127.0.0.1 -p 6379 -a myPassword

Redis Showlog

Redis Showlog 是 Redis 用来记录查询执行时间的日志系统。

查询执行时间指的是不包括像客户端响应(talking)、发送回复等 IO 操作,而单单是执行一个查询命令所耗费的时间。

另外,slow log 保存在内存里面,读写速度非常快,因此你可以放心地使用它,不必担心因为开启 slow log 而损害 Redis 的速度。

语法 redis Showlog 命令基本语法如下:

redis 127.0.0.1:6379> SLOWLOG subcommand [argument]

查看日志信息:

redis 127.0.0.1:6379> slowlog get 2
1) 1) (integer) 14
   2) (integer) 1309448221
   3) (integer) 15
   4) 1) "ping"
2) 1) (integer) 13
   2) (integer) 1309448128
   3) (integer) 30
   4) 1) "slowlog"
      2) "get"
      3) "100"

每一个Showlog都是由四个字段组成的

慢日志标识符

记录的命令进行处理的Unix时间戳

执行所需的时间,以微秒

命令、参数。

查看当前日志的数量:

redis 127.0.0.1:6379> SLOWLOG LEN
(integer) 14
使用命令 SLOWLOG RESET 可以清空 slow log 。

redis 127.0.0.1:6379> SLOWLOG LEN
(integer) 14

redis 127.0.0.1:6379> SLOWLOG RESET
OK

redis 127.0.0.1:6379> SLOWLOG LEN
(integer) 0