📜  Redis配置(1)

📅  最后修改于: 2023-12-03 15:04:52.602000             🧑  作者: Mango

Redis配置

Redis是一个高性能的键值存储系统,常用于缓存、消息队列等场景。在使用Redis时,了解如何进行配置非常重要,可以提高Redis的性能和安全性。

配置文件

Redis的所有配置都存储在一个配置文件中,配置文件的默认名称为redis.conf,可以通过--config选项指定不同的文件。

Redis的配置文件采用类似于ini文件的格式,其中每个配置项都以如下的样式出现:

name value

例如:

port 6379

以上配置项表示Redis服务器开放的端口号为6379。

常用配置项
绑定IP

默认情况下,Redis监听所有的网络接口。如果Redis暴露于公共网络中,则极易受到攻击。因此,建议将Redis服务器仅绑定到特定的IPv4或IPv6地址上。

bind 127.0.0.1

以上配置项表示Redis仅绑定到本地回环接口上,即仅可通过localhost访问。

认证密码

Redis支持简单的密码认证方式,可以防止未经授权的用户访问Redis。配置时需要为密码设置一个复杂的字符串,并确保redis用户账户拥有该密码在配置文件中的读权限。

requirepass mypassword

以上配置项表示Redis服务器的认证密码为mypassword

数据库数量

Redis默认只有一个数据库。如果需要划分多个独立的命名空间,可以通过databases配置选项来指定Redis服务器支持的数据库数量。

databases 16

以上配置项表示Redis服务器支持16个独立的数据库空间。

持久化

Redis支持数据的持久化,以避免数据丢失。

快照

Redis可以使用RDB持久化方式将内存中的数据快照写入磁盘,以便服务器崩溃时的数据恢复。可以通过savebgsave两个配置项来指定该功能的触发方式。

save 900 1
save 300 10
save 60 10000

以上配置项表示:

  • 每900秒钟,如果有至少一个键被修改,则执行一次快照操作(fork子进程,将内存中的数据写入磁盘)。
  • 每300秒钟,如果有至少10个键被修改,则执行一次快照操作。
  • 每60秒钟,如果有至少10000个键被修改,则执行一次快照操作。

AOF

Redis也可以使用AOF持久化方式,将所有对Redis状态的修改记录下来,以便服务器崩溃时的数据恢复。可以通过appendonlyappendfsync配置项来指定该功能的触发方式。

appendonly yes
appendfsync everysec

以上配置项表示:

  • 开启AOF持久化方式。
  • 每秒钟将AOF缓冲区中的数据写入磁盘。
内存限制

Redis使用最大内存限制来限制占用内存的大小。如果指定的内存大小超过物理内存,则Redis将开始使用交换机(swap),严重影响性能。可以通过maxmemory配置项来设置Redis最大使用内存大小。

maxmemory 2gb

以上配置项表示Redis最大可使用内存大小为2GB。

Lua脚本沙盒

Redis支持内置的Lua脚本,可以执行很多任务如验证,限速等。可以使用lua-time-limitlua-script-limit配置项来控制脚本的最大执行时间和Lua脚本数量。

lua-time-limit 5000
lua-script-limit 10000

以上配置项表示:

  • Lua脚本最大执行时间为5000ms。
  • 最多加载10000个Lua脚本。
高级配置项

除了常用配置项之外,Redis还包括一些高级配置项。这些可选的配置项通常是专门应对某些高负载场景中的问题,而不是常规情况下应该优化的问题。

大key处理

Redis每个值的大小限制为512MB。如果您有大量的大Key,那么Redis将开始使用交换空间,在内存不足时,效率可能显著降低。可以使用hash-max-zipmap-entrieshash-max-zipmap-value配置项来处理使用zipmap压缩算法的hash中的大keys。

hash-max-zipmap-entries 64
hash-max-zipmap-value 512

以上配置项表示:

  • 每个用zipmap压缩算法存储的键值对,最大可包含64个元素(即成员数量不超过64)。
  • 只有当zipmap压缩算法中的值的大小不超过512字节时,才应该将该值转换为zipmap压缩格式。
网络配置

Redis Server默认启用TCP/IP协议,但它也支持Unix Domain Socket。Unix Domain Socket是一种本地通信机制,无需TCP/IP协议栈的转换,因此是一种更加高效和安全的通信方式。可以通过unixsocketunixsocketperm配置项来启用Unix Domain Socket。

unixsocket /var/run/redis/redis.sock
unixsocketperm 700

以上配置项表示:

  • 开启Unix Domain Socket功能,将其绑定到/var/run/redis/redis.sock上。
  • 设置Redis服务器进程运行的用户和组权限为700。
分片

Redis提供一些分片算法,可以通过实例化多个Redis实例来扩展Redis内存容量。可以使用redis-sharding-policy配置项来指定Redis分片算法。此外,还可以使用redis-sharding-address配置项指定Redis分片服务器地址。

redis-sharding-policy crc16
redis-sharding-address localhost:7000 localhost:7001 localhost:7002

以上配置项表示:

  • Redis使用CRC16算法进行分片。
  • 该配置文件定义了3个Redis分片,其地址分别为localhost:7000localhost:7001localhost:7002
总结

Redis是一个非常灵活的键值存储系统,可以通过配置文件中的各种选项进行很好的控制。使用适当的配置选项可以使Redis更加稳定、安全和高效。