Redis配置文件相关内容讲解

42 阅读7分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 8 天,点击查看活动详情

redis.conf配置文件介绍在Redis的使用过程,除了知道对Redis五种数据类型的操作方法之外,最主要的就是对redis.conf进行配置。

Redis 的配置文件位于 Redis 安装目录下,

image.png

1、units

配置大小单位,开头定义了一些基本的度量单位,只支持bytes,不支持bit

表明unit的单位是不分大小写的。

# Note on units: when memory size is needed, it is possible to specify
# it in the usual form of 1k 5GB 4M and so forth:
#
# 1k => 1000 bytes
# 1kb => 1024 bytes
# 1m => 1000000 bytes
# 1mb => 1024*1024 bytes
# 1g => 1000000000 bytes
# 1gb => 1024*1024*1024 bytes
#
# units are case insensitive so 1GB 1Gb 1gB are all the same.

2、Include

表明我们可以通过命令将多个.conf文件进行合并,格式:include /path/to/other.conf

和Spring配置文件类似,可以通过includes包含,redis.conf 可以作为总文件,可以包含其他文件!

# Note that option "include" won't be rewritten by command "CONFIG REWRITE"
# from admin or Redis Sentinel. Since Redis always uses the last processed
# line as value of a configuration directive, you'd better put includes
# at the beginning of this file to avoid overwriting config change at runtime.
#
# If instead you are interested in using includes to override configuration
# options, it is better to use include as the last line.
#
# include /path/to/local.conf
# include /path/to/other.conf

3、loadmodule 加载模块

通过这里的 loadmodule 配置将引入自定义模块来新增一些功能。

# Load modules at startup. If the server is not able to load modules
# it will abort. It is possible to use multiple loadmodule directives.
#
# loadmodule /path/to/my_module.so
# loadmodule /path/to/other_module.so

4、NETWORK 网络设置

  ################################## NETWORK #####################################
  .......
  # IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES
  # JUST COMMENT OUT THE FOLLOWING LINE.
  # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # 默认只能本机访问,如果是远程调用或者虚拟机调用,需要将其注释掉
  bind 127.0.0.1 -::1 
  ......
  # By default protected mode is enabled. You should disable it only if
  # you are sure you want clients from other hosts to connect to Redis
  # even if no authentication is configured, nor a specific set of interfaces
  # are explicitly listed using the "bind" directive.
  # 如果你想要通过其他主机连接redis,那么你需要将protected-mode设为no
  protected-mode yes
  
  # Accept connections on the specified port, default is 6379 (IANA #815344).
  # If port 0 is specified Redis will not listen on a TCP socket.
  # 6379是redis的默认端口号,你可以在这里修改redis的端口号
  port 6379
  ......
  # Close the connection after a client is idle for N seconds (0 to disable)
  # 超时设置
  timeout 0

5、GENERAL 通用

# By default Redis does not run as a daemon. Use 'yes' if you need it.
# Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
# When Redis is supervised by upstart or systemd, this parameter has no impact.
daemonize yes # 默认情况下,Redis不作为守护进程运行。需要开启的话,改为 yes# Note: these supervision methods only signal "process is ready."
#       They do not enable continuous pings back to your supervisor.
#
# The default is "no". To run under upstart/systemd, you can simply uncomment
# the line below:
#
supervised no # 可通过upstart和systemd管理Redis守护进程# Note that on modern Linux systems "/run/redis.pid" is more conforming
# and should be used instead.
pidfile /var/run/redis_6379.pid # 以后台进程方式运行redis,则需要指定pid 文件
​
loglevel notice # 日志级别。可选项有:
# debug(记录大量日志信息,适用于开发、测试阶段);
# verbose(较多日志信息);
# notice(适量日志信息,使用于生产环境);
# warning(仅有部分重要、关键信息才会被记录)。
​
logfile "" # 日志文件的位置,当指定为空字符串时,为标准输出# Set the number of databases. The default database is DB 0, you can select
# a different one on a per-connection basis using SELECT <dbid> where
# dbid is a number between 0 and 'databases'-1
databases 16 # 设置数据库的数目。默认的数据库是DB 0# However it is possible to force the pre-4.0 behavior and always show a
# ASCII art logo in startup logs by setting the following option to yes.
always-show-logo yes # 是否总是显示logo

6、SNAPSHOPTING 快照

# 900秒(15分钟)内至少1个key值改变,才会进行保存(则进行数据库保存--持久化)
save 900 1
​
# 300秒(5分钟)内至少10个key值改变,才会进行保存(则进行数据库保存--持久化)
save 300 10
​
# 60秒(1分钟)内至少10000个key值改变,才会进行保存(则进行数据库保存--持久化)
save 60 10000
​
stop-writes-on-bgsave-error yes # 持久化出现错误后,是否依然进行继续进行工作
​
rdbcompression yes # 使用压缩rdb文件 yes:压缩,但是需要一些cpu的消耗。no:不压缩,需要更多的磁盘空间
​
rdbchecksum yes # 是否校验rdb文件,更有利于文件的容错性,但是在保存rdb文件的时候,会有大概10%的性能损耗
​
dbfilename dump.rdb # dbfilenamerdb文件名称dir ./ # dir 数据目录,数据库的写入会在这个目录。rdb、aof文件也会写在这个目录(默认为当前目录)

7、REPLICATION 主从复制

# When a replica loses its connection with the master, or when the replication
# is still in progress, the replica can act in two different ways:
#
# 1) if replica-serve-stale-data is set to 'yes' (the default) the replica will
#    still reply to client requests, possibly with out of date data, or the
#    data set may just be empty if this is the first synchronization.
#
# 2) If replica-serve-stale-data is set to 'no' the replica will reply with
#    an error "SYNC with master in progress" to all commands except:
#    INFO, REPLICAOF, AUTH, PING, SHUTDOWN, REPLCONF, ROLE, CONFIG, SUBSCRIBE,
#    UNSUBSCRIBE, PSUBSCRIBE, PUNSUBSCRIBE, PUBLISH, PUBSUB, COMMAND, POST,
#    HOST and LATENCY.
#
replica-serve-stale-data yes

# Note: read only replicas are not designed to be exposed to untrusted clients
# on the internet. It's just a protection layer against misuse of the instance.
# Still a read only replica exports by default all the administrative commands
# such as CONFIG, DEBUG, and so forth. To a limited extent you can improve
# security of read only replicas using 'rename-command' to shadow all the
# administrative / dangerous commands.
replica-read-only yes

# With slow disks and fast (large bandwidth) networks, diskless replication
# works better.
repl-diskless-sync no

# The delay is specified in seconds, and by default is 5 seconds. To disable
# it entirely just set it to 0 seconds and the transfer will start ASAP.
repl-diskless-sync-delay 5
......

8、SECURITY 安全

# ACL LOG
#
# The ACL Log tracks failed commands and authentication events associated
# with ACLs. The ACL Log is useful to troubleshoot failed commands blocked 
# by ACLs. The ACL Log is stored in memory. You can reclaim memory with 
# ACL LOG RESET. Define the maximum entry length of the ACL Log below.
acllog-max-len 128

9、CLIENTS 限制

# IMPORTANT: When Redis Cluster is used, the max number of connections is also
# shared with the cluster bus: every node in the cluster will use two
# connections, one incoming and another outgoing. It is important to size the
# limit accordingly in case of very large clusters.
#
# 设置客户端的最大连接数
# maxclients 10000 

10、MEMORY MANAGEMENT内存管理

# In short... if you have replicas attached it is suggested that you set a lower
# limit for maxmemory so that there is some free RAM on the system for replica
# output buffers (but this is not needed if the policy is 'noeviction').
#
# 你可以设置redis的最大内存(redis在未进行持久化之前,数据是存在内存中的,断电即失)
# maxmemory <bytes># Note: with any of the above policies, when there are no suitable keys for
# eviction, Redis will return an error on write operations that require
# more memory. These are usually commands that create new keys, add data or
# modify existing keys. A few examples are: SET, INCR, HSET, LPUSH, SUNIONSTORE,
# SORT (due to the STORE argument), and EXEC (if the transaction includes any
# command that requires memory).
#
# The default is:
#
# 设置key过期的策略
# maxmemory-policy noeviction

maxmemory-policy 六种策略

  1. volatile-lru:只最近最少使用算法,从设置了过期时间的键中选择空转时间最长的键值对清除掉;
  2. allkeys-lru : 最近最少使用算法,从所有的键中选择空转时间最长的键值对清除;
  3. volatile-random:从设置了过期时间的键中,随机选择键进行清除;
  4. allkeys-random:所有的键中,随机选择键进行删除;
  5. volatile-ttl : 从设置了过期时间的键中选择过期时间最早的键值对清除;
  6. noeviction : 不做任何的清理工作,在redis的内存超过限制之后,所有的写入操作都会返回错误;但是读操作都能正常的进行;