【通知】Redis® 4.0兼容版服务生命周期结束(EOS)

为了聚焦资源以提供更先进、更安全的产品版本,云数据库 Tair(兼容 Redis)的兼容Redis® 4.0版本实例计划进入生命周期结束(EOS)阶段。服务终止日期为 北京时间20260925,请尽快升级实例至高版本。

关键时间线与影响

关键节点

日期( 北京时间)

影响说明

停止新购

20251025

停止新购服务及产品功能迭代(包括新功能和安全补丁)。

停止续费与变配

20260325

停止续费和升、降配服务。已生效的服务,继续服务至EOS计划的终止日期。

终止服务

20260925

不再提供该产品有关的文档、数据存储、以及技术支持服务。

行动建议

在升级大版本或者克隆至Redis 5.0前,需要确保数据库中没有Bloom类型数据,否则会报错。

如何排查并删除4.0实例中的Bloom类型数据?

由于早期的存量4.0版本实例中,布隆过滤器相关API处于未正式开放的状态,后续的大版本实例中已取消支持,因此在实例升级之前,建议先排查并删除Bloom类型数据。

Python3

  1. 复制代码至可连接实例的设备上,命名为bloom_find.py

    import sys
    
    import redis
    
    
    def main(argv):
        if len(argv) < 3:
            print("Usage: python bloom_find.py host port password")
            sys.exit(-1)
    
        host = argv[1]
        port = argv[2]
        password = argv[3]
        print("host: %s, port: %s, password: %s\n" % (host, port, password))
    
        for i in range(256):
            redis_cli = redis.StrictRedis(host=host, port=port, password=password, db=i)
            cursor = 0
            print("Start scanning db %d" % i)
            while True:
                cursor, keys = redis_cli.scan(cursor=cursor, count=1000)
                if keys:
                    for key in keys:
                        key_type = redis_cli.type(key).decode()
                        if key_type == "unknown":
                            print("Found unknown type key(maybe bloom): %s in db %d" % (key.decode(), i))
                if cursor == 0:
                    break
    
    if __name__ == '__main__':
        main(sys.argv)
    
  2. 执行命令安装redis-py:pip install redis

  3. 执行脚本检测是否存在Bloom类型数据:python bloom_find.py <host> <port> <password>

  4. 控制台日志若打印存在Bloom类型数据,可使用UNLINK命令删除。

Python2

  1. 复制代码至可连接实例的设备上,命名为bloom_find.py

    import sys
    
    import redis
    
    
    def main(argv):
        if len(argv) < 3:
            print("Usage: python bloom_find.py host port password")
            sys.exit(-1)
    
        host = argv[1]
        port = argv[2]
        password = argv[3]
        print("host: %s, port: %s, password: %s\n" % (host, port, password))
    
        for i in range(256):
            redis_cli = redis.StrictRedis(host=host, port=port, password=password, db=i)
            cursor = 0
            print("Start scanning db %d" % i)
            while True:
                cursor, keys = redis_cli.scan(cursor=cursor, count=1000)
                if keys:
                    for key in keys:
                        key_type = redis_cli.type(key)
                        if key_type == "unknown":
                            print("Found unknown type key(maybe bloom): %s in db %d" % (key, i))
                if cursor == 0:
                    break
    
    if __name__ == '__main__':
        main(sys.argv)
    
  2. 执行命令安装redis-py:pip2 install redis

  3. 执行脚本检测是否存在Bloom类型数据:python2 bloom_find.py <host> <port> <password>

  4. 控制台日志若打印存在Bloom类型数据,可使用UNLINK命令删除。

  • 升级大版本:建议您升级至5.0版本。5.0版本完全向下兼容4.0的命令,并在主备复制、持久化等方面均有大幅改进,同时支持了更多新特性。

    后台的升级任务执行流程:

    1. 先升级备库,此时主库仍可以正常读写。

    2. 备库升级完成后可进行主备切换。主备切换时间以您在升级操作时指定的为准(立即执行或在可维护时间内执行)。主备切换期间,实例将存在60秒以内的只读状态(等待数据完全同步),同时会发生秒级的连接闪断,请您确保业务具有重连机制。

      说明

      升级完成后:

      • 原实例的实例ID、连接地址、数据、白名单配置以及已创建的账号密码配置等均不会改变

      • 5.0版本剔除了主备同步的流量,仅计算实际业务流量,故实例监控信息中的出口流量使用率有所降低

      • 实例连接数总量由10,000提升至20,000,实例监控信息中的连接数使用率降低一半

      • 5.0版本因增强监控能力会带来轻微的CPU开销。同时,版本间的底层差异也可能导致CPU使用率小幅波动(或升或降),这属于正常现象。

  • 克隆至 Redis 5.0:若您希望基于当前业务在5.0中进行验证,可以先克隆一个新实例。

常见问题

  • Q:现有的兼容4.0版本实例是否会自动升级到新版本?

    不会自动升级。20260925日后,如果仍在使用4.0版本,实例将被关停,建议手动升级大版本

  • Q:高版本支持哪些命令?

    云数据库 Tair(兼容 Redis)对高版本的数据结构和API进行了充分的兼容性回归测试,更多信息请参见命令支持

  • Q:升级前,如何测试兼容性?

    您可以将兼容 Redis® 4.0 版本实例的备份数据克隆至新5.0实例中。

    新实例配置时,选择版本为5.0,同时您可以选择按量付费方式,以更低的成本进行测试与验证,验证后可释放实例以节约资源。

相关文档

Redis开源版大版本新特性与兼容性