Redis 配置文件

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

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

主要有:

  • 通用(general)
  • 快照(snapshotting)
  • 复制(replication)
  • 安全(security)
  • 限制(limits)
  • 追加模式(append only mode)
  • LUA脚本(lua scripting)
  • REDIS集群(REDIS CLUSTER)
  • 慢日志(slow log)
  • 事件通知(event notification)
  • 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. 1秒=1000毫秒
  2. 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 作为起始索引值。

  1. python@ubuntu:/dev$ redis-cli
  2. 127.0.0.1:6379> select 1
  3. OK
  4. 127.0.0.1:6379[1]> set name 'itcast.cn'
  5. OK
  6. 127.0.0.1:6379[1]> select 2
  7. OK
  8. 127.0.0.1:6379[2]> set web 'itcast.com'
  9. OK
  10. 127.0.0.1:6379[2]> get web
  11. "itcast.com"
  12. 127.0.0.1:6379[2]> select 1
  13. OK
  14. 127.0.0.1:6379[1]> get name
  15. "itcast.cn"
  16. 127.0.0.1:6379[1]>

Shutdown 命令

Redis Shutdown 命令执行以下操作:

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

Redis 认证

  1. redis-cli
  2. AUTH "password"

或者

  1. 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 命令基本语法如下:

  1. redis 127.0.0.1:6379> SLOWLOG subcommand [argument]

查看日志信息:

  1. redis 127.0.0.1:6379> slowlog get 2
  2. 1) 1) (integer) 14
  3. 2) (integer) 1309448221
  4. 3) (integer) 15
  5. 4) 1) "ping"
  6. 2) 1) (integer) 13
  7. 2) (integer) 1309448128
  8. 3) (integer) 30
  9. 4) 1) "slowlog"
  10. 2) "get"
  11. 3) "100"
每一个Showlog都是由四个字段组成的慢日志标识符记录的命令进行处理的Unix时间戳执行所需的时间,以微秒命令、参数。

查看当前日志的数量:

  1. redis 127.0.0.1:6379> SLOWLOG LEN
  2. (integer) 14
  3. 使用命令 SLOWLOG RESET 可以清空 slow log
  4. redis 127.0.0.1:6379> SLOWLOG LEN
  5. (integer) 14
  6. redis 127.0.0.1:6379> SLOWLOG RESET
  7. OK
  8. redis 127.0.0.1:6379> SLOWLOG LEN
  9. (integer) 0

原文: https://piaosanlang.gitbooks.io/redis/content/08_redispei_zhi_wen_jian.html