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

Redis配置那些实用又有效的小技巧,教你怎么一步步设置更靠谱

咱们得明确一点,Redis虽然快,但也不是开箱即用就万事大吉的,不恰当的配置,轻则性能不达标,重则可能导致数据丢失或者服务直接挂掉,下面这些技巧,都是实战中总结出来的,咱们一步步把它设置得更靠谱。

第一件大事:把“裸奔”的Redis保护起来。

你刚装好的Redis,默认是没有密码的,而且默认只允许本地连接(bind 127.0.0.1),这在你自己的开发机上没问题,但只要你的服务器有外网IP,这就非常危险了,相当于把你的数据库大门敞开着,谁都能进来看看,首要任务就是设置密码。

找到配置文件里的 requirepass 这一行,默认是注释掉的,你把它前面的注释符号去掉,然后等号后面跟上你自己设定的一个足够复杂的密码。requirepass MySuperStrongPassword123!,设置之后,任何客户端连接时都必须提供这个密码才能操作,这是最基本的安全防线,千万不能省,参考来源:Redis官方安全文档。

光有密码还不够,最好把 bind 指令也修改一下,如果你确定只有本机的应用程序会连接Redis,那么保持 bind 127.0.0.1 就好,这样最安全,但如果你的应用和Redis不在同一台机器上,你就需要绑定服务器的内网IP地址,bind 192.168.1.100 127.0.0.1绝对不要简单地注释掉bind行或者绑定到 0.0.0,那意味着允许所有IP连接,即便有密码,也会让你的服务暴露在端口扫描风险之下。

第二,根据你的数据重要性,选对持久化策略。

Redis是内存数据库,数据都在内存里,万一服务器重启或者宕机,内存里的数据就全没了,所以需要把数据持久化到硬盘上,Redis主要提供两种方式:RDB和AOF。

Redis配置那些实用又有效的小技巧,教你怎么一步步设置更靠谱

RDB就像是给数据库拍快照,隔一段时间,把整个数据库生成一个压缩的二进制文件(dump.rdb),优点是文件小,恢复速度快,缺点是如果两次快照之间服务器宕机,会丢失最后一次快照之后的数据,默认配置是900秒内至少1个键被改变、300秒内至少10个键被改变、60秒内至少10000个键被改变,这三种条件满足一个就会触发快照,你可以根据你对数据丢失的容忍度来调整,如果你觉得丢失1分钟的数据没问题,可以设置成 save 60 1,意思是60秒内至少有1个键改动就快照。

AOF更像是写日记,它会把每一个写命令都记录在一个日志文件里,当Redis重启时,会重新执行一遍AOF文件里的所有命令,从而恢复数据,这样数据丢失的风险极低(最多丢失一秒的数据,取决于配置),你可以通过 appendonly yes 开启AOF,开启后,建议设置 appendfsync everysec,这是性能和安全性的一个良好折衷,表示每秒同步一次日志到硬盘,如果对数据安全要求极高,可以设为 appendfsync always,但这会严重影响性能。

小技巧来了: 对于大多数需要持久化的场景,建议同时开启RDB和AOF,这样你可以利用RDB做快速恢复,同时利用AOF保证更高的数据安全性,两者互补,参考来源:Redis持久化官方文档。

第三,给内存上个“保险丝”,防止撑爆。

Redis配置那些实用又有效的小技巧,教你怎么一步步设置更靠谱

内存是有限的,如果一直往Redis里写数据,迟早会把内存用完,内存用完后,新的写请求就会失败,这显然不是我们想看到的,所以必须设置内存上限和淘汰策略。

通过 maxmemory 参数来设置Redis能使用的最大内存,maxmemory 2gb,关键是设置了上限之后,还要设置 maxmemory-policy,也就是当内存满了之后怎么办,有几种策略可选:

  • volatile-lru:只从设置了过期时间的键中,淘汰最近最少使用的,这是比较常用的策略。
  • allkeys-lru:从所有键中淘汰最近最少使用的,如果你的数据重要程度都差不多,可以用这个。
  • volatile-ttl:淘汰即将过期的键。
  • noeviction:不淘汰,新写入会报错,这是默认策略,但生产环境一般不用,除非你的数据绝对不能丢。

根据你的业务特点选一个,如果你的Redis主要做缓存,allkeys-lru 就很合适,参考来源:Redis内存管理官方文档。

第四,一些让运维更轻松的小细节。

  • 给实例起个名:requirepass 设置了密码,但如果你管理多个Redis实例,在连接的时候可能会混淆,可以在配置文件里设置 instanceid 或者通过客户端输入 CLIENT SETNAME 命令给连接设置一个名字,这样在查看客户端列表时就能清晰分辨。
  • 慢查询日志: Redis可以记录执行时间过长的命令,通过 slowlog-log-slower-than 设置阈值(单位微秒,1000000微秒=1秒),比如设置为5000,表示超过5毫秒的命令会被记录,再通过 slowlog-max-len 设置最多记录多少条慢日志,这个功能对排查性能瓶颈非常有用。
  • 避免使用KEYS命令: 在配置文件里没直接开关,但一定要知道。KEYS * 这个命令在生产环境是绝对禁止的,因为它会遍历所有键,如果键很多,会导致Redis暂时卡死,替代方案是使用 SCAN 命令,它是以游标方式分批遍历,不会阻塞服务。

把这些技巧用上,你的Redis就已经比默认配置要可靠得多了,配置不是一劳永逸的,要根据你的业务量和发展不断进行调整和优化。