当前位置:首页 > 问答 > 正文

Redis配置怎么快速搞定又不复杂,优化设置那些事儿分享

说到Redis配置,很多人一打开那个叫 redis.conf 的文件就头疼,里面选项密密麻麻,跟看天书似的,其实吧,对于咱们大部分日常使用场景,你根本不需要把每个选项都搞懂,今天咱们就捞干的说,怎么用最省事的方法,把这个配置搞定,并且让它跑得又快又稳。

Redis配置怎么快速搞定又不复杂,优化设置那些事儿分享

咱们得找个“家”给Redis。 这个“家”就是数据存放的地方,也就是配置里的 dirdbfilename。(来源:Redis官方配置文档)默认情况下,Redis会把数据存到一个叫 dump.rdb 的文件里,就放在你启动Redis的那个目录下,这有个问题,万一这个目录空间不够了,或者你一不小心把文件删了,数据就没了,第一件要快速搞定的事就是:给它指定一个专门的、空间足够的文件夹,你在配置里写上一行 dir /var/lib/redis,这样就稳妥多了,这个目录的权限要设置好,得让运行Redis的那个用户有读写权限。

Redis配置怎么快速搞定又不复杂,优化设置那些事儿分享

得说说怎么“招待客人”,也就是网络连接。 bind 这个参数很重要。(来源:Redis官方配置文档)默认是 bind 127.0.0.1,意思是只允许本机自己连接Redis,如果你的应用和Redis装在同一台机器上,那没问题,但要是你的应用在另一台服务器上,这么设置它就连不上了,这时候,你可能会想,那我直接改成 bind 0.0.0.0 吧,让所有人都能连。快住手! 这相当于把你家大门完全敞开,谁都能进来,太危险了,正确的做法是:如果你确定需要从外部连接,就把 bind 设置成你服务器内网的IP地址,bind 192.168.1.100,一定要把 requirepass 密码给设上!这就好比虽然告诉了客人地址,但进门还得输密码,设一个强密码,能挡掉绝大部分瞎试探的手。

Redis配置怎么快速搞定又不复杂,优化设置那些事儿分享

接下来是内存管理,这是优化的重头戏。 Redis是内存数据库,最怕的就是内存不够用,配置里的 maxmemory 这个值你一定要设!(来源:Redis官方配置文档)你不能让它把服务器内存全部吃光,那样整个系统都可能崩溃,比如你服务器有8G内存,你打算分4G给Redis,那就设 maxmemory 4gb,光设了上限还不够,内存用完了怎么办?这就涉及到 maxmemory-policy 这个策略。(来源:Redis官方配置文档)默认策略是 noeviction,意思是内存满了就直接报错,拒绝写入,这在很多场景下其实不太好,我建议你根据情况选一个,

  • allkeys-lru:尝试淘汰掉最近最少使用的键,不管这个键有没有设置过期时间,这是比较通用的一种策略。
  • volatile-lru:只从那些设置了过期时间的键里,淘汰最近最少使用的。 如果你的数据都很重要,不能丢,那可能还得坚持用 noeviction,但同时你得确保有监控,在内存快满的时候及时扩容或者清理数据。

再说说持久化,就是怎么把内存里的数据存到硬盘上,防止重启后数据丢失。 Redis主要有两种方式:RDB和AOF。(来源:Redis官方配置文档)

  • RDB 像是拍快照,隔一段时间把整个数据库存成一个文件,优点是文件小,恢复快,缺点是有可能丢失最后一次快照之后的数据,配置里 save 900 1 这种规则就是控制什么时候拍快照的,如果你能容忍几分钟的数据丢失,用RDB就挺省心。
  • AOF 像是写日记,把每一个写命令都记录下来,优点是数据安全,最多丢一秒的数据(如果配置为 appendfsync everysec),缺点是文件会越来越大,恢复起来慢。 那怎么选呢?对于要求不高的场景,用RDB就够了,如果想要更高的安全性,可以同时开启AOF(把 appendonly 改成 yes),Redis官方也推荐同时使用两种方式,不用担心,当AOF文件太大时,Redis会自动在后台重写,相当于压缩一下。

是一些能让Redis“跑得更溜”的零散但实用的设置。

  • daemonize 改成 yes。(来源:Redis官方配置文档)这能让Redis在后台运行,而不是霸占着你的命令行窗口。
  • 适当调整 timeout。(来源:Redis官方配置文档)比如设成 timeout 300,意思是如果一个客户端连接空闲300秒(5分钟)没动静,就把它关掉,免得闲置连接占着资源。
  • 关注 tcp-keepalive。(来源:Redis官方配置文档)这个值设成60或300,可以帮助检测死掉的客户端连接,及时清理。

快速搞定Redis配置不复杂,你就记住这几步:1)指定好数据目录;2)绑对IP、设上密码,保证安全;3)一定要设置内存上限和淘汰策略,别让它撑死;4)根据你对数据安全的要求,选好RDB或AOF持久化,先把这些核心的配置项弄对了,Redis基本就能稳定跑了,以后有更深入的需求,再慢慢研究其他高级选项也不迟,千万别想着一口吃成胖子,那样反而会把自己绕晕。