redis常用配置项

redis常用配置项
苏丙榅我们启动redis服务器的时候,经常要指定配置文件以便加载文件中的配置项,这个配置文件叫做redis.conf
,如果是源码安装,配置文件被存放在源码安装包目录里边,如下图:
在这个配置文件redis.conf
中有很多的配置项,并且redis配置文件中对内存大小单位不区分大小写
,并且使用的时候要注意:k != kb
,m!=mb
,g!=gb
,区别如下:
1 | Note on units: when memory size is needed, it is possible to specify |
下面介绍一些项目开发过程中常用的一些配置项:
1. include 包含
指定包含其它的配置文件,可以在同一主机上多个Redis实例之间使用同一份配置文件,而同时各个实例又拥有自己的特定配置文件,总结一句话:多实例的情况可以把公用的配置提取出来,作为公共配置文件来使用。
1 | include /path/to/local.conf |
2. 网络配置 - NETWORK
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
设置保护模式,如果保护模式为yes
,非本机客户端无法连接到redis服务器,如需连接需要设置为no
1 | protected-mode yes |
2.3 port
指定Redis监听端口,默认端口为6379
(作者在自己的一篇博文中解释了为什么选用6379作为默认端口,因为在手机按键上6379对应的字母为MERZ,而MERZ取自意大利女歌手Alessia Merz的名字)
1 | port 6379 |
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
指定当客户端闲置多长时间后(单位:秒)断开连接,如果指定为0,表示关闭该功能,不自动断开连接
1 | timeout 0 |
2.6 tcp-keepalive
对已经连接的客户端进行心跳检测,每隔N秒检测一次,如果设置为0,则不会进行Keepalive检测,建议设置成60
1 | tcp-keepalive 60 |
3. 通用配置 - GENERAL
3.1 daemonize
Redis默认不是以守护进程的方式运行,可以通过该配置项修改,设置为yes
以守护进程方式后台启动
1 | daemonize no |
3.2 pidfile
当Redis以守护进程方式运行时,Redis默认会把进程ID写入/var/run/redis.pid
文件,也可以自定义路径和名字
1 | pidfile /var/run/redis.pid |
3.3 loglevel
设置redis服务器的日志级别,一共有四个,由低到高分别为:debug
、verbose
、notice
、warning
,级别越高写到文件中的日志信息越少。
1 | loglevel notice |
3.4 logfile
设置日志的处理方式:打印到当前终端或者写入到磁盘文件,或者直接丢弃,如果需要经日志信息写入到磁盘可以指定文件的存储路径和名字。
1 | 服务器为非守护进程, 日志直接打印到终端 |
3.5 databases
设置数据库的数量,默认redis自带16个数据库,数据库的ID分别为【0,1,2,3,…,15】默认使用的数据库为0,可以在客户端使用SELECT <dbid>
命令切换当前使用的数据库。
1 | databases 16 |
4. 安全配置 - SECURITY
设置Redis连接密码,如果配置了连接密码,客户端在连接Redis时需要通过AUTH
1 | requirepass hello-dabing |
5. 限制配置 - LIMITS
5.1 maxclients
设置同一时间最大客户端连接数,默认无限制,Redis可以同时打开的客户端连接数为Redis进程可以打开的最大文件描述符数,如果设置 maxclients 0,表示不作限制。
当客户端连接数到达限制时
,Redis会关闭新的连接并向客户端返回 max number of clients reached
错误信息。
1 | maxclients 128 |
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
当设置的redis内存被写满之后,指定内存数据的移除策略,处理方式有一下六种:
volatile-lru
:使用LRU(least recently used 最近最少使用
)算法移除key,只对设置了过期时间的键;allkeys-lru
:在所有集合key中,使用LRU算法移除keyvolatile-random
:在过期集合中移除随机的key,只对设置了过期时间的键allkeys-random
:在所有集合key中,移除随机的keyvolatile-ttl
:移除那些TTL值最小的key,即那些最近要过期的keynoeviction
:不进行移除。针对写操作,只是返回错误信息
1 | maxmemory-policy noeviction |
5.4 maxmemory-samples
设置样本数量,LRU算法和最小TTL算法都并非是精确的算法,而是估算值,所以我们可以设置样本的大小,redis默认会检查设置的N个key,并选择其中最近最少使用(LRU - Least Recently Used)的那个。一般设置3到7的数字,数值越小样本越不准确,但性能消耗越小。
1 | maxmemory-samples 5 |
6. 持久化设置
6.1 save
设置以rdb
方式进行数据持久化的频率(可以设置多个,为互补关系
)
1 | 表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改,满足其中 |
6.2 rdbcompression
指定存储至本地数据库时是否压缩数据,默认为yes,Redis采用LZF压缩,如果为了节省CPU时间,可以关闭该选项,但会导致数据库文件变的巨大
1 | rdbcompression yes |
6.3 dbfilename
如果使用rdb方式进行数据持久化,指定存储数据的磁盘文件名字,默认值为 dump.rdb
1 | dbfilename dump.rdb |
6.4 dir
指定持久化过程中存储数据的磁盘文件(rdb and aof)的路径(可以是相对路径
也可以是绝对路径
),
1 | dir ./ |
6.5 appendonly
开启aof
模式进行数据的持久化,默认是关闭的,如需开启,需要将值修改为yes
1 | appendonly no |
6.6 appendfilename
指定aof
模式下,用于存储持久化数据的磁盘文件的名字,默认文件名为 appendonly.aof
,存储路径通过dir
控制
1 | appendfilename appendonly.aof |
6.7 appendfsync
指定aof
模式下,数据持久化的方式,有三种模式:
no
:redis不主动进行同步,把同步时机交给操作系统,由系统将数据同步到磁盘always
:表示每次更新操作后手动调用fsync()将数据写到磁盘everysec
:表示每秒同步一次
1 | appendfsync everysec |