51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

redis常用配置项

我们启动redis服务器的时候,经常要指定配置文件以便加载文件中的配置项,这个配置文件叫做redis.conf,如果是源码安装,配置文件被存放在源码安装包目录里边,如下图:

在这个配置文件redis.conf中有很多的配置项,并且redis配置文件中对内存大小单位不区分大小写,并且使用的时候要注意:k != kbm!=mbg!=gb,区别如下:

|---------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 1 2 3 4 5 6 7 8 9 10 11 | # 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. |

下面介绍一些项目开发过程中常用的一些配置项:

  1. include 包含 {#1-include-包含} =============================

指定包含其它的配置文件,可以在同一主机上多个Redis实例之间使用同一份配置文件,而同时各个实例又拥有自己的特定配置文件,总结一句话:多实例的情况可以把公用的配置提取出来,作为公共配置文件来使用。

|-----------|-------------------------------------| | 1 | include /path/to/local.conf |

  1. 网络配置 - NETWORK {#2-网络配置-NETWORK} ===================================

2.1 bind {#2-1-bind}

绑定本机的IP地址,默认情况bind 127.0.0.1只能接受本机的访问请求。

  • 如果当前计算机有多块网卡,可以指定某一块网卡的IP地址,也可以指定127.0.0.1
  • 如果没有绑定(该配置项被注释了,或者 bind 0.0.0.0),可以接受来自任意一个网卡的Redis请求,如果非本机客户端想要访问redis服务器,需要解除IP的绑定。

生产环境需要指定应用服务器的地址;如果服务器是需要远程访问的,需要将其注释掉或者指定为0.0.0.0

|-----------|------------------------| | 1 | bind 127.0.0.1 |

如果开启了protected-mode,那么在没有绑定ip且没有设密码的情况下,Redis还是只允许接受本机的访问。

2.2 protected-mode {#2-2-protected-mode}

设置保护模式,如果保护模式为yes,非本机客户端无法连接到redis服务器,如需连接需要设置为no

|-----------|----------------------------| | 1 | protected-mode yes |

2.3 port {#2-3-port}

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

|-----------|-------------------| | 1 | port 6379 |

2.4 tcp-backlog {#2-4-tcp-backlog}

设置tcp的backlog,backlog其实是一个连接队列,backlog队列总和=未完成三次握手队列 + 已经完成三次握手队列。在高并发环境下需要一个高 backlog 值来避免慢客户端连接问题。

|-----------|-------------------------| | 1 | tcp-backlog 511 |

注意,Linux内核会将这个值减小到 /proc/sys/net/core/somaxconn 文件中存储的值(128),所以需要确认增大/proc/sys/net/core/somaxconn/proc/sys/net/ipv4/tcp_max_syn_backlog(128)两个文件中存储的值来达到想要的效果。

2.5 timeout {#2-5-timeout}

指定当客户端闲置多长时间后(单位:秒)断开连接,如果指定为0,表示关闭该功能,不自动断开连接

|-----------|-------------------| | 1 | timeout 0 |

2.6 tcp-keepalive {#2-6-tcp-keepalive}

对已经连接的客户端进行心跳检测,每隔N秒检测一次,如果设置为0,则不会进行Keepalive检测,建议设置成60

|-----------|--------------------------| | 1 | tcp-keepalive 60 |

  1. 通用配置 - GENERAL {#3-通用配置-GENERAL} ===================================

3.1 daemonize {#3-1-daemonize}

Redis默认不是以守护进程的方式运行,可以通过该配置项修改,设置为yes以守护进程方式后台启动

|-----------|----------------------| | 1 | daemonize no |

3.2 pidfile {#3-2-pidfile}

当Redis以守护进程方式运行时,Redis默认会把进程ID写入/var/run/redis.pid文件,也可以自定义路径和名字

|-----------|------------------------------------| | 1 | pidfile /var/run/redis.pid |

3.3 loglevel {#3-3-loglevel}

设置redis服务器的日志级别,一共有四个,由低到高分别为:debugverbosenoticewarning,级别越高写到文件中的日志信息越少。

|-----------|-------------------------| | 1 | loglevel notice |

3.4 logfile {#3-4-logfile}

设置日志的处理方式:打印到当前终端或者写入到磁盘文件,或者直接丢弃,如果需要经日志信息写入到磁盘可以指定文件的存储路径和名字。

|-------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 1 2 3 4 5 | # 服务器为非守护进程, 日志直接打印到终端 # 服务器为守护进程, 而这里又配置为日志记录方式为标准输出,则日志将会发送给/dev/null == 数据被丢弃 logfile stdout logfile "/home/robin/redis.log" # 服务器为守护进程,日志信息被写入到指定的磁盘文件中 logfile "/dev/null" # 服务器为守护进程,日志信息被写入到空设备中 == 数据被丢弃 |

3.5 databases {#3-5-databases}

设置数据库的数量,默认redis自带16个数据库,数据库的ID分别为【0,1,2,3,...,15】默认使用的数据库为0,可以在客户端使用SELECT <dbid>命令切换当前使用的数据库。

|-----------|----------------------| | 1 | databases 16 |

  1. 安全配置 - SECURITY {#4-安全配置-SECURITY} =====================================

设置Redis连接密码,如果配置了连接密码,客户端在连接Redis时需要通过AUTH 命令提供该密码,默认是关闭的,客户端可以直接连接redis服务器。

|-----------|----------------------------------| | 1 | requirepass hello-dabing |

  1. 限制配置 - LIMITS {#5-限制配置-LIMITS} =================================

5.1 maxclients {#5-1-maxclients}

设置同一时间最大客户端连接数,默认无限制,Redis可以同时打开的客户端连接数为Redis进程可以打开的最大文件描述符数,如果设置 maxclients 0,表示不作限制。客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回 max number of clients reached 错误信息。

|-----------|------------------------| | 1 | maxclients 128 |

5.2 maxmemory {#5-2-maxmemory}

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

  • 建议必须设置,否则,将内存占满,造成服务器宕机。
  • 如果设置redis可以使用的内存量,一旦到达内存使用上限,redis将会试图移除内部数据,移除规则可以通过maxmemory-policy来指定。
  • 如果redis无法根据移除规则来移除内存中的数据,或者设置了"不允许移除",那么redis则会针对那些需要申请内存的指令返回错误信息,比如SET、LPUSH等。对于无内存申请的指令,仍然会正常响应,比如GET等。
  • 如果你的redis是主redis(说明你的redis有从redis),那么在设置内存使用上限时,需要在系统中留出一些内存空间给同步队列缓存,只有在你设置的是 "不移除" 的情况下,才不用考虑这个因素。

|-----------|---------------------------| | 1 | maxmemory <bytes> |

5.3 maxmemory-policy {#5-3-maxmemory-policy}

当设置的redis内存被写满之后,指定内存数据的移除策略,处理方式有一下六种:

  • volatile-lru:使用LRU(least recently used 最近最少使用)算法移除key,只对设置了过期时间的键;
  • allkeys-lru:在所有集合key中,使用LRU算法移除key
  • volatile-random:在过期集合中移除随机的key,只对设置了过期时间的键
  • allkeys-random:在所有集合key中,移除随机的key
  • volatile-ttl:移除那些TTL值最小的key,即那些最近要过期的key
  • noeviction:不进行移除。针对写操作,只是返回错误信息

|-----------|-------------------------------------| | 1 | maxmemory-policy noeviction |

5.4 maxmemory-samples {#5-4-maxmemory-samples}

设置样本数量,LRU算法和最小TTL算法都并非是精确的算法,而是估算值,所以我们可以设置样本的大小,redis默认会检查设置的N个key,并选择其中最近最少使用(LRU - Least Recently Used)的那个。一般设置3到7的数字,数值越小样本越不准确,但性能消耗越小。

|-----------|-----------------------------| | 1 | maxmemory-samples 5 |

  1. 持久化设置 {#6-持久化设置} ===================

6.1 save {#6-1-save}

设置以rdb方式进行数据持久化的频率(可以设置多个,为互补关系

|-------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------| | 1 2 3 4 5 6 7 8 | # 表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改,满足其中 # 任意一个条件就将内存数据同步到磁盘文件中 save 900 1 save 300 10 save 60 10000 # 关闭 rdb 这种持久化方式 save "" |

6.2 rdbcompression {#6-2-rdbcompression}

指定存储至本地数据库时是否压缩数据,默认为yes,Redis采用LZF压缩,如果为了节省CPU时间,可以关闭该选项,但会导致数据库文件变的巨大

|-----------|----------------------------| | 1 | rdbcompression yes |

6.3 dbfilename {#6-3-dbfilename}

如果使用rdb方式进行数据持久化,指定存储数据的磁盘文件名字,默认值为 dump.rdb

|-----------|-----------------------------| | 1 | dbfilename dump.rdb |

6.4 dir {#6-4-dir}

指定持久化过程中存储数据的磁盘文件(rdb and aof)的路径(可以是相对路径也可以是绝对路径),

|-----------|----------------| | 1 | dir ./ |

6.5 appendonly {#6-5-appendonly}

开启aof模式进行数据的持久化,默认是关闭的,如需开启,需要将值修改为yes

|-----------|-----------------------| | 1 | appendonly no |

6.6 appendfilename {#6-6-appendfilename}

指定aof模式下,用于存储持久化数据的磁盘文件的名字,默认文件名为 appendonly.aof,存储路径通过dir控制

|-----------|---------------------------------------| | 1 | appendfilename appendonly.aof |

6.7 appendfsync {#6-7-appendfsync}

指定aof模式下,数据持久化的方式,有三种模式:

  • no:redis不主动进行同步,把同步时机交给操作系统,由系统将数据同步到磁盘
  • always:表示每次更新操作后手动调用fsync()将数据写到磁盘
  • everysec:表示每秒同步一次

|-----------|------------------------------| | 1 | appendfsync everysec |

赞(0)
未经允许不得转载:工具盒子 » redis常用配置项