如何在生产环境正确使用Redis

发布时间:2023年12月25日

一、在生产环境使用Redis

如果在生产环境使用Redis,需要遵守一定的使用规范,以保障服务稳定、高效。。

1.1、明确Redis集群的服务定位

1、仅适用于缓存场景Redis定位于高性能缓存服务,强调快速读写和低延迟的特性,主要用于数据的快速存取,提升系统的响应速度Redis本身不具备持久化能力,因此不建议用于大规模冷数据、持久化的存储场景。

2、避免共用Redis集群:为避免相互影响和增加问题排查成本,不同业务不能共用Redis集群,确保业务间的隔离性,以便更容易定位和解决潜在的问题,提高系统的稳定性和可维护性。

1.2、合理利用Redis容灾能力

1、多副本容灾Redis基于分片内多副本进行数据容灾。当分片内只包含一个副本,发生Failover时将自动拉起空分片,此时分片可用性得到恢复,但原有数据将会丢失。如果您希望在Failover场景下能够保留数据,需要在配置集群时在默认主副本的基础上添加至少一组从副本。

2、多机房容灾Redis支持同地域内的跨机房部署,以保障机房级别容灾;但是跨机房部署架构中,主实例故障Failover后,还需要多一次迁移恢复原来的部署拓扑(迁移的过程会有性能抖动)。因此,建议您根据业务需求选择合适的部署方式。此外,对于特别核心的业务建议申请两个不同机房的Redis集群,通过双写的形式满足更高的高可用需求。

1.3、正确设计和存储数据

1、规范对Key的命名:业务在设计Key的名称时,长度应控制在1024字节以内,过大的Key名称意味着更多的缓存空间占用。同时,禁止使用不可打印字符作为Key名称,避免会对后期缓存数据的维护、问题排查带来额外的负担。

2、避免存储大Value:为优化性能和避免数据倾斜问题,Redis应避免存储大Value(集合类型元素数量<5000,字符串类型<10KB)。大Value不仅导致分片数据量和流量不均衡,还直接影响访问性能,增加延迟和资源消耗,因此合理控制Value大小对于提升系统效率和稳定性至关重要。

3、设计业务逻辑避免引入热Key:热Key意味着业务流量会集中访问集群特定分片,导致单个分片压力过大,不能发挥集群多分片的优势。热key导致的单分片性能瓶颈,也无法通过扩容解决。(存在热Key风险的业务建议开启热Key缓存功能)。

4、合理设置Key过期时间:建议为每个Key设置适当的过期时间,以避免浪费缓存资源。同时,尽可能打散Key的过期时间,避免大量Key集中过期,从而降低对集群性能的影响。通过合理设置过期时间和分散过期时间,可以提高缓存的利用率,保持系统的性能和可用性。

5、选择合适的淘汰策略:创建JIMDB集群时结合业务场景选择合适的淘汰策略,如volatile-lru(设置了过期时间的Key按照lru进行逐出)、allkeys-lru(所有Key按照lru进行逐出)、noeviction(不淘汰数据,但写入会失败)等,确保高效利用有限资源,同时提高缓存命中率。

1.4、优化读写请求

1、避免过度复杂的命令:在执行复杂度为O(n)的命令(如HGETALL、SMEMBERS、LRANGE、DEL等)时,需要特别注意参数n的大小。如果n过大,将导致JIMDB服务阻塞,影响其他操作的执行和系统的性能。因此,合理控制n的大小,避免复杂度过高的操作,是保持JIMDB服务的稳定性和可用性的重要考虑因素。

2、合理使用异步/pipline:在异步操作或使用pipeline场景中,需要谨慎控制读操作的频率或单批次操作的Key数量。频繁的读操作、大批量操作可能导致缓存实例输出缓冲区的数据积压,进而触发OOM(Out of Memory)kill机制,造成数据丢失。

文章来源:https://blog.csdn.net/qq_37080455/article/details/135203154
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。