五. Redis 配置内容(详细配置说明)

五. Redis 配置内容(详细配置说明)

文章目录

  • [五. Redis 配置内容(详细配置说明)](#五. Redis 配置内容(详细配置说明))
  • [1. Units 单位配置](#1. Units 单位配置)
  • [2. INCLUDES (包含)配置](#2. INCLUDES (包含)配置)
  • [3. NETWORK (网络)配置](#3. NETWORK (网络)配置)
    • [3.1 bind(配置访问内容)](#3.1 bind(配置访问内容))
    • [3.2 protected-mode (保护模式)](#3.2 protected-mode (保护模式))
    • [3.3 port(端口)配置](#3.3 port(端口)配置)
    • [3.4 timeout(客户端超时时间)配置](#3.4 timeout(客户端超时时间)配置)
    • [3.5 tcp-keepalive()配置](#3.5 tcp-keepalive()配置)
  • [4. GENERAL 通用配置](#4. GENERAL 通用配置)
    • [4.1 daemonize(后台启动)配置](#4.1 daemonize(后台启动)配置)
    • [4.2 pidfile(pid 文件存在路径)配置](#4.2 pidfile(pid 文件存在路径)配置)
    • [4.3 loglevel(日志级别)配置](#4.3 loglevel(日志级别)配置)
    • [4.4 logfile(日志文件)配置](#4.4 logfile(日志文件)配置)
    • [4.5 databases 16(仓库数量)配置](#4.5 databases 16(仓库数量)配置)
  • [5. SECURITY 安全配置](#5. SECURITY 安全配置)
    • [5.1 在 redis.conf 配置文件当中设置密码(永久)](#5.1 在 redis.conf 配置文件当中设置密码(永久))
    • [5.3 在 命令行设置密码](#5.3 在 命令行设置密码)
  • [6. LIMITS 限制配置](#6. LIMITS 限制配置)
    • [6.1 maxclients(客户端连接数)配置](#6.1 maxclients(客户端连接数)配置)
    • [6.2 maxmemory(Redis 最大占用内存)配置](#6.2 maxmemory(Redis 最大占用内存)配置)
    • [6.3 maxmemory-policy(Redis内存不够的算法配置处理)配置](#6.3 maxmemory-policy(Redis内存不够的算法配置处理)配置)
    • [6.4 maxmemory-samples(内存算法处理的比较样本) 配置](#6.4 maxmemory-samples(内存算法处理的比较样本) 配置)
  • [7. 总结:](#7. 总结:)
  • [8. 最后:](#8. 最后:)

关于 Redis 配置文件的文档说明:https://www.cnblogs.com/nhdlb/p/14048083.html

Redis 的配置的内容,都是在 /etc/redis.conf 这个文件当中进行配置设置的。


redis.conf 配置内容有很多很多,这里我们讲解一些比较常用的一些配置信息。

1. Units 单位配置

sh 复制代码
:set number   # 在 vim 工具当中 ,表示显示行号
  1. 配置大小单位,开头定义了一些基本的度量单位,只支持 bytes(字节) ,不支持 bit(比特),这是默认的,大家可以更加需要自行修改。
  2. 默认是不区分大小写的,对于命令来说,这个也是大家可以自行修改配置的。

2. INCLUDES (包含)配置

该配置信息表示:多实例的情况可以把公用的配置文件提取出来,然后 include 导入

3. NETWORK (网络)配置

3.1 bind(配置访问内容)

properties 复制代码
 bind 127.0.0.1 -::1
  1. 默认情况 bind 127.0.0.1 表示只能接收本地(本机)的访问请求,其它的主机是无法访问的。
  2. 如果服务器是需要远程访问的,需要将其注释掉。
  3. 这里,我们可以启动 redis ,查看当前允许连接的情况。

注销 bind , 重新启动 redis, 再查看当前允许连接的情况。


注意: 需要将 Redis 服务器,关闭了,再重启后,配置才能生效。

sh 复制代码
[root@localhost ~]# redis-cli  -p 6379 shutdown


3.2 protected-mode (保护模式)

默认是保护模式,也就是 protected-mode no

如果服务器是需要远程访问的, 需要将 yes 设置为 no

3.3 port(端口)配置

Redis 服务默认端口 6379,可以自行修改,但是注意要在 655535 的范围。

3.4 timeout(客户端超时时间)配置

如图默认配置:

properties 复制代码
 timeout 0

一个空闲的客户端维持多少秒会关闭,0 表示关闭该功能, 即永不超时 。大家可以根据需要自行修改。

3.5 tcp-keepalive()配置

properties 复制代码
tcp-keepalive 300
  1. tcp-keepalive 是对访问客户端的一种心跳检测,每隔 n 秒检测一次,单位为秒。
  2. 如果设置为 0 ,则不会进行 keepalive 检测,建议设置成 60

为什么需要心跳检测机制:

  1. TCP 协议中有长连接短连接 之分。短连接 环境下,数据交互完毕后,主动释放连接。
  2. 长连接 的环境下,进行一次数据交互后,很长一段时间内无数据交互时,客户端可能意外断开,这些 TCP 连接并未来得及正常释放 ,那么,连接的另一方并不知道对端的情况。就会一直维护这个连接,长时间的积累会导致非常多的半打开连接,造成端系统资源的消耗和浪费,且有可能导致在一个无效的数据链路层面发送业务数据,结果就是发送失败。所以服务端要做到快速感知失败,减少无效链接操作,这就有了 TCPKeepalive(保活探测) 机制
properties 复制代码
tcp-keepalive 10

配置成功后,需要重启 Redis 服务才会生效。

sh 复制代码
[root@localhost etc]# redis-cli -p 6379 shutdown

4. GENERAL 通用配置

4.1 daemonize(后台启动)配置

properties 复制代码
daemonize yes
  1. 是否为后台进程,设置为 yes
  2. 设置为 yes 后, 表示守护进程, 后台启动

4.2 pidfile(pid 文件存在路径)配置

properties 复制代码
 pidfile /var/run/redis_6379.pid

存放 pid 文件的位置,每个实例会产生一个不同的 pid 文件, 记录 redis 的进程号

sh 复制代码
[root@localhost run]# ps -ef | grep redis
sh 复制代码
[root@localhost run]# cat redis_6379.pid 
sh 复制代码
[root@localhost run]# ps -aux | grep sshd

4.3 loglevel(日志级别)配置

properties 复制代码
loglevel notice

Redis 日志分为 4 个级别,默认的设置为 notice,开发测试阶段可以用 debug(日志内容较多,不建议生产环境使用),生产模式一般选用 notice

Redis 日志级别为如下 4 种

  1. debug :会打印很多信息,适用于开发和测试阶段。
  2. verbose(冗长的) :包含很多不太有用的信息,但比 debug 要清爽一些。
  3. notice :适用于生产模式。
  4. warning :警告信息。
sh 复制代码
127.0.0.1:6379> config get loglevel

4.4 logfile(日志文件)配置

properties 复制代码
logfile ""
  1. logfile "" 就是说,默认为控制台打印,并没有日志文件生成
  2. 可以为 redis.conf 的 logfile 指定配置项。如下:
properties 复制代码
 logfile "/var/log/redis/redis.log"

修改了配置文件,需要重启 redis 才会生成。

sh 复制代码
127.0.0.1:6379> config get logfile

4.5 databases 16(仓库数量)配置

properties 复制代码
databases 16
  1. 设定库的数量,默认是16个,默认数据库为 0 号,数据库索引是从 0 开始的
  2. 可以适用 select<dbid> 命令在连接上指定数据库 id

5. SECURITY 安全配置

SECURITY 安全配置,就是为 Redis 客户端登录的时候,设置密码。

在 Redis 当中,设置密码有两种方式:

5.1 在 redis.conf 配置文件当中设置密码(永久)

properties 复制代码
# requirepass foobared

这里我们测试,将注释去掉,适用这个 foobared 作为密码。

properties 复制代码
 requirepass foobared

修改了配置,需要重启 Redis 服务,才会生效。

sh 复制代码
127.0.0.1:6379> auth foobared 
127.0.0.1:6379> auth 密码   # 登录 redis 客户端,使用密码
sh 复制代码
127.0.0.1:6379> acl list
# 注意:需要进入到 Redis 客户端
sh 复制代码
127.0.0.1:6379> acl whoami 
# 注意:需要进入到 Redis 客户端

5.3 在 命令行设置密码

sh 复制代码
127.0.0.1:6379> config get requirepass
sh 复制代码
127.0.0.1:6379> config set requirepass rainbowsea

6. LIMITS 限制配置

6.1 maxclients(客户端连接数)配置

  1. 设置 Redis 同时可以与多少个客户端进行连接(包括远程连接)

  2. 默认情况下为 10000 个客户端。

  3. 如果达到了此限制,redis 会拒绝新的连接请求,并且向这些连接请求方发出 "max number of clients reached"

  4. 注意一点的是:当超过连接数目了,你可以进入到 Redis 客户端,但是的命令是不会被 Redis 执行的,并提示 "max number of clients reached"

6.2 maxmemory(Redis 最大占用内存)配置

properties 复制代码
# maxmemory <bytes>
  1. 在默认情况下, 对 32 位 实例会限制在 3 GB, 因为 32 位的机器最大只支持 4GB 的 内存,而系统本身就需要一定的内存资源来支持运行,所以 32 位机器限制最大 3 GB 的 可用内存是非常合理的,这样可以避免因为内存不足而导致 Redis 实例崩溃
  2. 在默认情况下, 对于 64 位实例是没有限制
  3. 当用户开启了 redis.conf 配置文件的 maxmemory 选项,那么 Redis 将限制选项的值 不能小于 1 MB

maxmemory 设置的建议:

  1. Redis 的 maxmemory 设置取决于使用情况, 有些网站只需要 32MB,有些可能需要 12GB
  2. maxmemory 只能根据具体的生产环境来调试,不要预设一个定值,从小到大测试, 基本标准是不干扰正常程序的运行。
  3. Redis 的最大使用内存跟搭配方式有关,如果只是用 Redis 做纯缓存, 64-128M 对一般小 型网站就足够了
  4. 如果使用 Redis 做数据库的话,设置到物理内存的 1/2 到 3/4 左右都可以
  5. 如果使用了快照功能的话,最好用到 50%以下,因为快照复制更新需要双倍内存空间, 如果没有使用快照而设置 redis 缓存数据库,可以用到内存的 80%左右,只要能保证 Java、 NGINX 等其它程序可以正常运行就行了

6.3 maxmemory-policy(Redis内存不够的算法配置处理)配置

properteis 复制代码
 # maxmemory-policy noevictio

policy 可以配置如下选项:

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

无论是选择那种配置,都会丢失数据,所以,尽量还是设置好合适的 Redis 内存,方式内存不够用

6.4 maxmemory-samples(内存算法处理的比较样本) 配置

properties 复制代码
# maxmemory-samples 5
  1. 设置样本数量,LRU 算法和最小 TTL 算法都并非是精确的算法,而是估算值,所以你可 以设置样本的大小,redis 默认会检查这么多个 key 并选择其中 LRU 的那个。
  2. 一般设置 3 到 7 的数字,数值越小样本越不准确,但性能消耗越小。

举例理解:

简单的比较就是:当你在 8W 个人当中,找到身高 180 的人,很费时间和精力。但是当让你从 10,100个人当中找 身高 180的人,那就更简单了。简单的理解就是一个参考的样本。参考的数量越多精确度越高,但是成本也就越高。参考的数量少的,精确的就越低,但是消耗的成本却更低。

7. 总结:

  1. 注意: 上述的所有配置都需要将 Redis 服务器,关闭了,再重启后,配置才能生效。
  2. 查看 redis.conf 配置文件的信息,可以进入到 Redis 客户端后,使用 config get 配置属性/信息 命令。注意: 需要先进入到 Redis 客户端才行。
sh 复制代码
127.0.0.1:6379> config get loglevel
1) "loglevel"
2) "notice"
127.0.0.1:6379> config get logfile
1) "logfile"
2) ""
  1. 在命令行当中设置 redis.conf 配置文件的信息,可以进入到 Redis 客户端后,使用 config set 配置属性/信息 命令。注意: 需要先进入到 Redis 客户端才行。同时因为是在 客户端命令设置的配置信息,那么退出了客户端,该命令行配置的信息就都失效了。
sh 复制代码
127.0.0.1:6379> config set requirepass rainbowsea
sh 复制代码
127.0.0.1:6379> auth rainbowsea
sh 复制代码
127.0.0.1:6379> config get requirepass

8. 最后:

"在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。感谢你们,我们总会在某个时刻再次相遇。"

相关推荐
hef288几秒前
Go语言如何刷LeetCode_Go语言LeetCode刷题教程【速学】
jvm·数据库·python
渡我白衣几秒前
【MySQL基础】(4):MySQL 数据类型
数据库·人工智能·深度学习·神经网络·mysql·机器学习·自然语言处理
huanmieyaoseng10031 分钟前
Mybatis常见面试题
java·开发语言·mybatis
u0107475463 分钟前
HTML5中SVG描边虚线Stroke-dasharray的配置技巧
jvm·数据库·python
Dontla7 分钟前
JWT认证流程(JSON Web Token)
前端·数据库·json
無限進步D5 小时前
Java 运行原理
java·开发语言·入门
難釋懷5 小时前
安装Canal
java
是苏浙5 小时前
JDK17新增特性
java·开发语言
Mike117.5 小时前
GBase 8a 日期边界写法和时间窗口取数偏差
数据库
SPC的存折7 小时前
1、Redis数据库基础
linux·运维·服务器·数据库·redis·缓存