# 配置

# 配置文件

  • 启动 Redis 服务器时,默认不会读取配置文件,而是会采用默认配置。
    • 可以将配置文件放在任意目录下,采用配置文件启动 Redis ,如下。Redis 会读取该配置文件的内容,决定运行时的配置。
      redis-server  /opt/redis/redis.conf
      
    • 每次修改配置文件之后,要重启 Redis 才会生效。
  • Redis 服务器启动之后,可以修改运行时的配置项。
    • 在客户端中,执行 config get/set <name> 可以查看、修改一个配置项。如下:
      127.0.0.1:6379> config get requirepass         # 查看密码
      1) "requirepass"
      2) ""                                          # 默认没有密码
      127.0.0.1:6379> config set requirepass 123456  # 设置密码
      OK
      
    • 执行 config get * 会显示所有配置项。
    • 执行 config rewrite 会将运行时的配置项保存到配置文件中,否则当 Redis 服务器终止时就会丢失被修改的配置。

# 示例

bind 0.0.0.0
port 6379
requirepass ******            # Redis 的密码
# protected-mode yes          # 是否开启保护模式。如果开启了,但没设置 requirepass ,则会强制设置 bind 127.0.0.1

dir /opt/redis/               # 工作目录,默认是 /var/lib/redis/
# daemonize no                # 是否以 daemon 方式运行,默认为 no
# pidfile /var/run/redis.pid
# logfile ''                  # 日志文件的保存路径,默认是输出到 stdout
# dbfilename dump.rdb         # 保存备份数据的文件名

# databases 16                # 设置数据库的数量
# maxclients 10000            # 限制客户端的连接数
timeout 60                    # 当客户端连接的空闲时长超过 n 秒时,让 redis 断开该连接。默认禁用 timeout ,因此连接数会越来越多

# 禁用掉一些不安全的命令
rename-command FLUSHDB ""
rename-command FLUSHALL ""
rename-command KEYS ""
  • 以 daemon 方式启动时,出现报错也不会在终端显示。
  • Redis 服务器默认没有设置密码,不安全。
    • Redis 只存在 root 权限,没有细致的权限划分。用户要么无法进行任何操作,要么可以进行任何操作。因此,如果要让多个用户使用的 Redis 相互隔离,应该分别运行一个 Redis 实例。

# 内存

  • 相关配置:
    maxmemory 1048576             # 限制 Redis 使用的最大内存,单位 bytes 。默认不限制
    # maxmemory-policy noeviction # 接近 maxmemory 时的删 key 策略
    
  • maxmemory 如果不设置,或设置成 0 ,当 Redis 占用的内存过多时可能被 OOM 杀死。
    • 建议设置成实际物理内存的 80% 左右,留有一定冗余。
  • maxmemory-policy 有以下几种:
    volatile-lru      # 根据 LRU 算法删除任意一个设置了过期时间的 key
    allkeys-lru       # 根据 LRU 算法删除任意一个 key
    volatile-random   # 随机删除一个设置了过期时间的 key
    allkeys-random    # 随机删除任意一个 key
    volatile-ttl      # 删除 TTL 最短的 key
    noeviction        # 默认策略。不删除 key ,而是在写操作时报错
    

# 慢日志

  • Redis 默认启用了慢日志。如果一个命令的执行耗时超过指定时长,则记录到慢日志。

    • 超过一定长度的命令会被截断。
  • 相关配置:

    # slowlog-log-slower-than 10000   # 将超过指定耗时的命令记录到慢日志,单位为微秒 μs
    # slowlog-max-len 128             # 最多记录多少条慢查询日志。达到限制时,删除最旧一条记录,写入新的记录
    
  • 相关命令:

    SLOWLOG GET [count]     # 查看最近的 count 条记录,默认为 10 条
    SLOWLOG RESET           # 清空所有记录
    
    • 例:
      127.0.0.1:6379> SLOWLOG GET 1
      1)  1) (integer) 1099           # 这条慢日志的序号
          2) (integer) 1657077816     # 这条慢日志的记录时刻,表示为 Unix 时间戳
          3) (integer) 29212          # 命令的执行耗时,单位为微秒 μs
          4) 1) "KEYS"                # 命令的内容
            2) "hello*"
          5) "10.0.0.1:26869"         # 客户端地址
          6) ""                       # 客户端名称