Redis性能最佳实践指南
从第一天开始锁定Redis安全
我们经常看到的一个错误是:即使是专业人士有时也会因为Redis启动太快而跳过安全设置。默认情况下,旧版Redis是对全世界开放的。虽然现代Redis有一个"保护模式",限制只能从本地机器访问,但对于生产环境来说,开箱即用仍然不够安全。
几个快速修复方法:
- 限制访问:只允许来自你的网络或本地主机的连接。永远不要将Redis暴露在公共互联网上。
- 设置真实密码:使其随机且复杂。Password123无法阻止有决心的攻击者。
- 保持保护模式开启:这增加了一个安全网,防止外部人员窥探。
- 禁用危险命令:关闭像FLUSHALL和CONFIG这样的命令。这里的一个错误可能会清除你的数据。
首先设置这些基础内容。这样,你就可以专注于性能而不用担心漏洞。
设置智能内存限制
Redis之所以快速是因为它将所有内容都保存在内存中,但这意味着它可能会在没有任何警告的情况下填满你的RAM。如果你不设置限制,某天醒来会发现服务器内存不足,应用程序崩溃。
以下是如何提前预防:
- 设置maxmemory限制:通常,系统RAM的50-75%是一个安全的选择。
- 选择你的驱逐策略:大多数团队使用allkeys-lru效果很好,它会在数据增长时悄悄移除最少使用的键。
- 密切关注内存:Redis不是"设置后就忘记"的。随着工作负载的增长检查内存使用情况。
如果你跳过这一步,你会希望自己早点做了。花几分钟设置它;将来你会感谢自己。
不要跳过持久化和备份
Redis默认很快,但也可能有点鲁莽。重启服务器,噗,所有数据都消失了。如果你关心数据保留,持久化是必须的。
以下是一个对大多数情况都很有效的设置:
- 同时启用AOF和RDB:
- AOF(仅追加文件)记录每个写入操作,因此如果发生崩溃,你可能只会丢失最后一两秒的数据。
- RDB(快照)定期为你的数据拍摄快照。非常适合快速恢复或为新副本提供种子。
为什么两者都要?AOF提供详细的恢复日志,而RDB快照支持快速恢复和服务器克隆。你获得了全面的备份覆盖。
现在花十分钟做这件事,这样以后就不必花几个小时修复问题。
规划高可用性:不要让一台服务器毁了你的一天
运行单个Redis服务器对于测试来说没问题,但生产工作负载需要备份。否则,一次崩溃就会导致大问题。
建立冗余:
- 添加至少一个副本:这保持一个实时数据副本准备就绪,以防万一。
- 使用Redis Sentinel:Sentinel监视你的服务器。如果主服务器失败,Sentinel会自动提升一个副本。
我们见过团队等到第一次中断后才设置这个,所以为了避免痛苦,从一开始就建立它。
常见的Redis性能杀手错误
Redis是为速度而构建的,但很容易在不知不觉中减慢速度。以下是一些要避免的陷阱:
- 阻塞命令:在大型数据集上使用KEYS或SMEMBERS可能会冻结Redis。对于大型集合,坚持使用像SCAN、SSCAN和HSCAN这样的命令。
- 低效的数据结构:将相关数据存储在哈希中,而不是大量单个键中,可以节省内存并保持快速查找。
- 批处理命令:如果需要一次发送许多命令,请使用流水线操作,并设置连接池以保持低响应时间。
将这些视为小调整大回报。
定期监控和调优
没有服务器设置能永远有效,Redis也不例外。随着流量的增长,今天有效的东西下周可能会变慢。
一些有帮助的习惯:
- 启用SLOWLOG:在慢命令变成真正问题之前找到它们。
- 检查日志:查找警告、错误或任何异常情况。
- 监视内存和驱逐率:如果你看到键一直被驱逐,是时候检查你的内存限制了。
保持主动,你将避免大多数生产问题。
何时请专家帮忙
即使有最佳实践,Redis也可能会给你带来一些意外,特别是当你的环境增长或需求变化时。如果你遇到无法快速解决的挑战,或者正在计划大规模扩展或迁移,有经验的帮助可以节省大量时间和挫败感。
我们的团队为Redis和Valkey提供24/7支持和咨询。无论你需要关于调优、高可用性还是故障排除的建议,我们都可以帮助你充分利用内存数据存储,这样你就可以专注于应用程序,而不是基础设施。