Redis服务之常用配置(一)
上一篇博客聊了下redis的简介以及redis的yum安装和源码编译安装需要注意到问题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13378138.html;今天我们来对redis的配置文件相关资料和配置的使用和说明;
yum安装的redis默认版本是3.2.12,默认配置文件就是/etc/redis.conf;默认配置文件大概可以分如下段配置
[root@node1 ~]# grep "^###" /etc/redis.conf ################################## INCLUDES ################################### ################################## NETWORK ##################################### ################################# GENERAL ##################################### ################################ SNAPSHOTTING ################################ ################################# REPLICATION ################################# ################################## SECURITY ################################### ################################### LIMITS #################################### ############################## APPEND ONLY MODE ############################### ################################ LUA SCRIPTING ############################### ################################ REDIS CLUSTER ############################### ################################## SLOW LOG ################################### ################################ LATENCY MONITOR ############################## ############################# EVENT NOTIFICATION ############################## ############################### ADVANCED CONFIG ############################### [root@node1 ~]#
提示:默认配置文件分了14个配置段,每个配置段都有相应的指令;
INCLUDE相关配置指令
提示:很多开源软件都支持include这个指令,把某个目录下的文件导入到指定位置做配置文件的方式(最常见的就是把某个目录下的以点conf结尾的文件导入到当前位置);以上红框中的内容表示把/usrlocal/reds/conf.d/test.conf文件都导入到此处;这里需要注意一点redis好像不支持以模式匹配的方式导入多个文件,必须单个导入,除此之外导入的文件必须得存在可访问;对于include指令放在哪个位置,需要自行定义,因为include以下的配置文件如果和include指定的文件配置有重复,以include之下的内容为准;也就说导入配置会覆盖导入配置之前的配置;
NETWORK相关配置指令
bind:该指令用于指定redis监听的ip地址,默认情况redis监听在本机的127.0.0.1这个回环地址上;
提示:bind支持绑定多个ip地址,绑定多个ip地址,每个ip地址分别用空格隔开即可;如果想要监听在本机所有地址,可以写成bind 0.0.0.0或者注释bind指令,但是主注释bind指令对于开启了保护模式,虽然监听在本机所有地址,也能够连接redis,但是没法做任何操作;以上配置表示让redis监听在本机的127.0.0.1 和192.168.0.41这两个ip地址上;
验证:重启reids看看我们配置的地址是否处于监听状态?
protected-mode:该指令用于指定是否开启保护模式;所谓保护模式就是如果redis在没有配置密码,也没有配置bind地址,即便监听在本机的所有地址,远程客户端是可以连接到redis,但是没法正常使用;yes表示开启保护功能;no表示不开启此功能;
提示:以上配合表示开启保护模式,这也就意味着,如果我们在配置文件中如果没有配置bind监听地址和设置密码,那么redis是不能被远程连接够使用的;
验证:把redis的bind指令注释掉,然后重启服务,使用另一台客户段连接192.168.0.41,看看是否可以用?
提示:注释掉bind指令,重启redis后,默认后监听在本机所有地址上;
测试:本机是否可连接使用redis?
提示:本机上可以正常连接和使用redis
非本机客户端是否可以连接使用呢?
提示:可以看到用非本机客户端是可以正常连接到redis,但是没有办法执行命令,它告诉我们redis开启了保护模式,解决上面的报错,可以把保护模式关闭了(关闭保护模式可以使用CONFIG SET protected-mode no 这种就是在终端直接使用命令关闭(非当前终端,可以使用本机连接的终端上使用);第二中方式就是在配置文件中把protected-mode 配置成no,然后重启redis;第三种是停掉当前redis,启动时加上--protected-mode no选项启动;),其次就是给redis设置一个密码或者启动bind指令监听一个可用地址即可;
测试:在本机上使用连接redis-server的方式在终端命令行中使用CONFIG SET protected-mode no命令关闭保护模式
提示:可以看到在本机连接终端上执行CONFIG SET protected-mode no 命令后,在非本机连接的客户端终端就可以操作red
port:该指令用于指定redis TCP套接字监听端口,默认是6379;如果使用0 表示不监听tcp套接字
提示:以上配置表示redis使用TCP套接字的6380端口对外提供服务;
验证:重启redis服务,看看对应6380端口是否处于监听状态,redis-cli 是否可以连接6380使用redis?
提示:重启服务6380端口正常监听,用redis-cli也是可以正常连接访问redis;这里需要注意用-p指定端口需要有空格;
tcp-backlog:该指令用于指定TCP三次握手的时候 server 端收到 client ack 确认号之后的队列值默认是511;通常会这个选项不需要我们去额外的更改,用默认的511是可以的;
unixsocket:该指令用于指定本地使用unix socket 方式连接时监听的UNIX SOCKET文件路径;
unixsocketperm:该指令用于指定UNIX SOCKET文件的权限;
示例:启用UNIX SOCKET
验证:重启redis服务,然后使用unix socket方式连接本机redis
提示:redis-cli命令 -s选项用于指定socket文件路径;从上面的测试可以看到,重启redis后,在对应目录下就生成了在配置文件中我们指定的名称的sock文件;用redis-cli客户端软件使用/tmp/redis.sock文件连接redis也是可以正常操作redis;
timeout:该指令用于指定客户端和 Redis 服务端的连接超时时间,默认是 0,表示永不超时。
tcp-keepalive:该指令用于指定tcp连接的会话保持时间,默认配置是300秒。
GENERAL相关配置指令
daemonize:该指令用于指定是否让redis运行为后台守护进程运行,默认是no;如果你想让它在后台运行,你就把它改成yes,当 redis 作为守护进程运行的时候,它会写一个 pid 到 /var/run/redis.pid 文件里面;
示例:配置redis运行为后台守护进程
验证:重启redis,看看是否能够运行为后台守护进程?
提示:可以看到我们不用systemctl 去运行redis也可以让redis运行为后台,并且使用redis-cli工具也可以正常连接redis对它进行操作;
supervised:该指令用于指定redis操作系统相关参数,默认是no;可以设置通过 upstart 和 systemd 管理 Redis 守护进程,centos 7以后都使用 systemd;
pidfile:该指令用于指定redis pid文件;默认是/var/run/redis_6379.pid;
提示:我这边测试不管是编译还是yum安装,它默认能够启动起来,但是在/var/run/目录下就找不到对应redis的pid文件;后续看了下目录的权限,发现用root启动redis在对应目录下就能创建pid文件,普通用户就不行;
验证:启动reids,在/var/run/目录下看看是否有redis_6379.pid文件?
提示:可以看到redis启动了,但是没有找到pid文件;大概是权限的问题吧;
验证:把/var/run/目录添加一个redis用户可以写的权限,然后重启redis,看看对应目录下是否可生成pid文件?
提示:可以看到,当我们给对应目录增加了acl权限以后,重启redis,pid文件就生成了;对于这种,建议还是单独建立一个目录,把权限都给redis用户,然后配置pidfile 指向新建的目录;
loglevel:该指令用于指定redis日志的级别,默认是notice级别;
logfile:该指令用于指定redis日志文件路径;默认是/var/log/redis/redis.log;
syslog-enabled:该指令用于指定是否启用syslog记录redis日志;默认是no,不启用;
syslog-ident:该指令用于指定syslog的标识,默认是redis
syslog-facility:该指令用于指定使用syslog的那个设施来记录redis日志;默认是local0
示例:开启rsyslog记录redis日志
提示:以上配置是在redis上开启了让rsyslog记录日志,把redis的日志发送到local0这个设施上;
在rsyslog中定义local0把日志记录到某个文件中
提示:以上配置是表示把local0这个设施上的任何级别日志都记录到/tmp/test.log中;
验证:重启rsyslog和redis 看看/tmp/test.log中是否记录redis的日志?
提示:可以看到重启了rsyslog和redis后在/tmp/test.log中就记录了redis的启动日志信息;
提示:其实默认情况redis rsyslog会把系统上的info级别以上的日志都记录到/var/log/messages这个文件中,所以我们启动redis可以在/var/log/messages这个文件中看到redis的日志,也可以在/var/log/redis/redis.log中看到redis的日志;通常情况不建议让redis的日志写多份,建议还是用logfile指定日志文件,然后不启用rsyslog;
databases:该指令用于指定redis的数据库数量;默认人库是0;就是说这个指令指定的值可以限定redis最大能有多少个数据库,默认情况redis最大支持16个库;当然如果16个库少了,我们可以通过调整databases的值,来调大支持的数据库数量;
示例:默认不更改databases的值,连接数据库,用select命令看看最大能够切换到那个库?
提示:redis里的数据库都是以数字命名的,不像mysql里的可以用字符串命名;select命令是用于切换数据库,类似mysql里的use命令;从上面的信息可以看到,我们在配置文件中指定databases为16,客户端连接redis最大也只能切换到15号库,这是因为redis数据库是从0号库开始的;