听闻少年二字,当与平庸相斥。这篇文章主要讲述Redis(开发与运维):04---Redis的启动连接/外网连接关闭可执行文件与配置参数大全相关的知识,希望能为你提供帮助。
一、Redis的可执行文件
- 当我们安装完Redis之后,src和/usr/local/bin目录下提供了下面这些可执行程序,我们称之为Redis Shell:
redis-server | Redis服务器 |
redis-cli | Redis命令行客户端 |
redis-benchmark | Redis性能测试工具 |
redis-check-aof | Redis AOF持久化文件检测和AOF文件修复工具 |
redis-check-dump | Redis RDB持久化文件检测和文件检查工具 |
redis-sentinel | Sentinel服务器(Redis2.8版本之后) |
二、Redis配置文件
- Redis的默认配置文件:
- 在下载的redis源码包根目录下有一个名为redis.conf的配置文件,这个配置文件中的参数是redis服务器启动的默认参数(备注:但是redis-server启动不是使用这个配置文件)
- 如果你想自己设置配置参数,可以拷贝这个配置文件然后修改,在redis-server启动时指定配置文件的路径
- 相对于很多大型存储系统,Redis的配置不是很多,到了Redis3.0之后有60多个
三、Redis服务端的启动
①单机模式下的配置参数
- 总体配置:下图是Redis的一些总体配置,例如端口、日志、数据库等
- 最大内存及策略:下图是Redis内存相关配置
- AOF相关配置:下图是AOF方式持久化相关配置
- RDB相关配置:下图是RDB方式持久化相关配置
- 慢查询配置:下图是Redis慢查询相关配置,在中有详细介绍
- 数据结构优化配置:下图是Redis数据结构优化的相关配置,在前面“内存”的相关文章有详细介绍
- 复制相关配置:下图是Redis复制相关的配置
- 客户端相关配置:下图是Redis客户端的相关配置
- 安全相关配置:下图是Redis安全的相关配置
②Sentinel配置说明和分析
- Sentinel节点是特殊的Redis节点,有几个特殊的配置,如下图所示
③Cluster配置说明和分析
- Cluster节点是特殊的Redis节点,有几个特殊的配置,如下图所示
CONFIG SET、CONFIG GET命令
- 我们可以在不重新启动Redis的情况下动态修改部分Redis配置(注:并不是所有的配置都支持CONFIG SET命令,具体见上图)
CONFIG SET loglevel warning
- 我们也可以通过CONFIG GET来获取一个配置的值:1)是配置选项名称,2)是选项值
requirepass配置参数
- 该参数用于权限控制。当设置了这个参数之后,客户端连接时就需要输入密码才可以连接到服务器
- 下面进行一个演示案例。例如在配置文件中加入该参数,密码为“dongshao”
requirepass dongshao
- 重启redis服务器,然后再使用上面的配置文件启动redis(此处我们的redis以守护进程运行的)
- 此时我们使用redis-cli虽然可以连接上服务端,但是输入命令都无权限,需要认证
- 此时我们需要输入auth命令和密码进行认证,认证完之后就可以进行操作了
- 当然,我们也可以通过redis-cli的“-a”参数指定连接时的密码,这样就不需要输入auth命令进行认证了。备注:不建议这样做,因为密码可能会外漏
redis-cli -a dongshao
多线程相关的配置参数
- 在redis 6.0之后支持多线程了
- io-threads-do-reads配置参数:要开启多线程,那么需要在配置文件中将该参数设置为yes
io-threads-do-reads on;
- io-threads配置参数:该参数用来设置线程的数量
io-threads 4;
- 线程数的设置建议:官方有一个建议,4 核的机器建议设置为2或3个线程,8核的建议设置为6个线程,线程数一定要小于机器核数
bind配置参数
- 该参数代表redis服务端接受从哪些网络通道传来的网络流量
- 例如,下面服务端只接受127.0.0.1和172.17.0.14网段的网络流量
bind 127.0.0.1 172.17.0.14
- 备注:Redis3.0中bind默认值为””,也就是不限制网卡的访问,但是在Redis3.2 中必须显示的配置bind 0.0.0.0才可以达到这种效果
protected-mode配置参数
- Redis3.2提供了protected-mode配置(默认开启)
- 功能:如果当前Redis没有配置密码,没有配置bind,那么只允许来自本机的访问,也就是相当于配置了bind 127.0.0.1
- 演示案例:下面redis服务端开启了该配置参数,且配置文件中没有配置密码,也没有配置bind,当外网访问时显示不能访问
- 有三种方法启动Redis:默认配置启动、运行配置启动、配置文件启动
①默认配置启动
- 直接运行redis-server即可启动Redis:
sudo redis-server
- 这种方法会使用Redis的默认配置文件来启动Redis,例如Redis默认配置文件中指定Redis的端口号为6379、当前版本为6.0.1
- 实际生产环境中一般不使用这种方法来启动Redis,因为无法自定义配置
②运行配置启动
- 我们在运行时可以指定配置名和值(可以是多对),没有配置的将仍然使用默认配置
- 例如,下面以6380端口启动Redis,其他参数仍使用默认值
sudo redis-server --port 6380
- 这种方法也不建议使用,因为如果修改的配置较多的话那么比较麻烦,并且这种参数不能保存到文件中
③指定配置文件启动
- 将配置写到指定文件里,例如我们将配置写到了/opt/redis/redis.conf,那么可以执行下面的命令启动redis:
sudo redis-server /opt/redis/redis.conf
- 比较建议使用这种方式启动Redis
- redis有60多个配置参数,在上面介绍了一些,后面文章还会介绍更多。下面列出了一些重要配置参数:
参数
说明
daemonize
是否以守护进程模式运行Redis
pidfile
设置Redis的PID文件位置
logfile
日志文件位置
port
设置Redis监听的端口号
dir
Redis工作目录(存放持久化文件和日志文件)
- 我们也可以在启动时同时指定配合文件和配置选项,那么命令行的配置选项就会覆盖配置文件中的参数。例如:
redis-server配置文件名.conf--loglevel warning
四、Redis服务端的关闭
shutdown命令
- 正确停止Redis的方式应该是向Redis发送SHUTDOWN命令,方法为:
- 当Redis收到SHUTDOWN命令后,会先断开所有客户端连接,然后根据配置执行持久化,最后完成退出
- Redis可以妥善处理SIGTERM信号,所以使用kill Redis进程的PID也可以正常结束Redis,效果与发送SHUTDOWN命令一样
- ①如果客户端还没有与服务端进行连接,那么可以执行在命令行输入下面的命令来关闭服务端:
redis-cli SHUTDOWN
- ②如果客户端工具已经连接入服务端,那么直接输入SHUTDOWN即可:
【Redis(开发与运维):04---Redis的启动连接/外网连接关闭可执行文件与配置参数大全】
- shutdown还有nosave和save参数,代表是否在关闭Redis前,生成持久化文件
redis-cli shutdown nosave|save
- 考虑到Redis有可能正在将内存中的数据同步到硬盘中,强行终止Redis进程可能会导致数据丢失,因此不建议使用kill-9强制杀死Redis服务,不但不会做持久化操作,还会造成缓冲区等资源不能被优雅关闭,极端情况会造 成AOF和复制丢失数据的情况
- 使用软件包编译安装的redis不支持重启操作,只能通过redis-cli进行SHUTDOWN关机然后再重新开启服务端
- 但是如果使用apt-get或yum形式安装的redis支持重启(见文章最后)
- 使用redis-cli可以连接到redis服务端,有两种连接方式
①交互式连接
- 第一种是交互式方式,连接之后不会退出redis-cli命令行
- 例如,下面连接到IP为127.0.0.1、端口为6379的redis服务端
redis-cli -h 127.0.0.1 -p 6379
- 可以不写-h和-p参数,它们的默认值分别为127.0.0.1和6379
②命令方式连接
- 第二种是命令方式连接,只连接一次就断开
- 例如,下面连接的时候获取一次hello的值就退出
- 关于redis-cli在后面会详细介绍,????
- 设置方法如下:
- 第一步:注释掉配置文件中的bind参数
- 第二步:如果你的bind参数被注释了,那么还要分为以下两种情况:
- 如果没有为redis设置密码(也就是没有设置requirepass配置参数),那么需要将protected-mode配置参数更改为no
- 如果你的redis设置了密码(也就是设置了requirepass配置参数),那么不需要更改protected-mode配置参数
八、软件包安装的redis的开机、关闭、重启
演示案例
- 机器A(公网111.229.177.161):其启动的redis服务器的配置文件中含有bind参数,且protected-mode为yes
- 当机器B(一个局域网的机器)去连接时,显示无法连接
- 现在我们将机器A配置文件中的bind注释掉,又因为配置文件中没有设置密码(requirepass配置参数),那么同时需要将protected-mode设置为no
- 此时机器B再去连接,就可以连接成功了
- 如果是使用apt-get或yum形式安装的redis,那么支持下面的几种方式
sudo /etc/init.d/redis-server stop#关机
sudo /etc/init.d/redis-server start#启动
sudo /etc/init.d/redis-server restart #重启
推荐阅读
- Linux 内核 内存管理虚拟地址空间布局架构 ④ ( 内存描述符 mm_struct 结构体成员分析 | hiwater_rss | start_code | start_brk )
- 推荐--国内常用镜像站
- 十六进制转十进制C++算法示例
- 使用git和github上传本地项目的方法
- jquery data方法取值与js attr取值的区别
- 迷宫问题 bfs
- 北卡密信,互联网通信安全专家
- Android之各个版本之间的变化
- 高并发下的批量处理与单个处理(利用jdk8新特性处理,提高性能)