如何使用OBKV-Redis替换原生Redis?

【 使用环境 】测试环境
【 OB or 其他组件 】All in One
【 使用版本 】4.3.5.0
【问题描述】如何使用OBKV-Redis替换原生Redis?目前环境是4.3.5.0版本。
问题一:OBKV-Redis在国产化信创目录里吗?
问题二:看文档说目前只有4.2.5支持OBKV-Redis,是4.2.5下所有小版本都支持吗?
问题三:如何在尽可能不修改代码的前提下使用OBKV-Redis替换原生Redis?
33e8e0a4dc0918f16c90d2662b3f6deb

OBKV-Redis 是从4.2.5.0开始支持, 4.3.x不建议用这个特性,目前OBKV-Redis并没有完全兼容原生Redis指令,并不能保证平迁,建议优先使用OBKV TableAPI

我的目的就是要在尽可能少的修改代码的基础上替换掉Redis,OBKV TableAPI可以吗?

TableAPI 与 OBKV-Redis 是2个不同的东西,可以先了解下是否满足需求
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002022322

@论坛小助手

根据您的问题,以下是针对每个问题的详细解答:

问题一:OBKV-Redis在国产化信创目录里吗?

根据文档库中的信息,并未明确提到 OBKV-Redis 是否被列入国产化信创目录。因此,无法从检索到的文档中找到解决此问题的信息。建议您查阅 OceanBase 官方发布的最新信创兼容性列表,或者联系 OceanBase 的技术支持团队以获取准确答案。

基于我的内在知识,OBKV 是 OceanBase 提供的一种 Key-Value 存储解决方案,其 Redis 兼容接口旨在替代原生 Redis。虽然 OceanBase 社区版本身支持多种国产化环境(如 Anolis OS、openEuler 等),但具体是否列入信创目录需要官方确认。


问题二:看文档说目前只有4.2.5支持OBKV-Redis,是4.2.5下所有小版本都支持吗?

根据文档库中的信息,确实有提到 OBKV-Redis 接口主要在 OceanBase 数据库 4.2.5 版本中提供支持。然而,关于是否涵盖 4.2.5 的所有小版本(如 BP1、BP2 等),文档并未明确说明。

基于内在知识,通常情况下,功能的支持范围会随着补丁版本(BP)的发布而逐步完善。如果某个功能在 4.2.5 的基线版本中被引入,则后续的小版本(BP)大概率会继续支持该功能,除非官方文档明确指出某些 BP 停用了该功能。

建议:如果您使用的是 4.2.5 的某个小版本(如 BP2 或 BP3),可以尝试启用 OBKV-Redis 功能。如果遇到问题,建议参考官方发布的更新日志或联系技术支持团队确认具体支持范围。


问题三:如何在尽可能不修改代码的前提下使用 OBKV-Redis 替换原生 Redis?

为了在尽可能少修改代码的基础上替换掉原生 Redis,您可以按照以下步骤操作:

1. 确认 OceanBase 集群已启用 OBKV-Redis 模式

  • 确保您的 OceanBase 集群版本为 4.2.5 或更高版本。
  • 启用 OBKV-Redis 模式时,需要配置租户的 obkv 参数。例如:
    ALTER TENANT your_tenant SET VARIABLES obkv_mode='on';
    

2. 调整客户端连接方式

  • OBKV-Redis 提供了与原生 Redis 协议兼容的接口,因此大多数 Redis 客户端可以直接连接到 OBKV-Redis。
  • 确保客户端使用的驱动程序支持 Redis 协议(如 Jedis、lettuce 等)。
  • 修改客户端配置,将 Redis 地址替换为 OBKV-Redis 的地址和端口。例如:
    redis.host=your_obkv_redis_host
    redis.port=6379
    

3. 验证功能兼容性

  • OBKV-Redis 支持 Redis 的大部分常用命令(如 SETGETHSETHGET 等),但可能不完全支持一些高级特性(如 Lua 脚本)。请根据您的业务需求测试相关功能。
  • 如果发现某些命令不兼容,可以考虑通过 OBKV Table API 实现类似功能。

4. 使用 OBKV Table API(可选)

  • 如果您的业务逻辑对 Redis 的依赖较深,且需要更高的灵活性,可以考虑使用 OBKV Table API。Table API 提供了更丰富的数据结构支持(如 Hash、List、Set 等),并且可以通过 SQL 或 API 方式访问。
  • 示例代码(Python SDK):
    from oceanbase.obkv import OBKVClient
    
    client = OBKVClient("your_obkv_host", "your_obkv_port")
    client.set("key", "value")
    result = client.get("key")
    print(result)
    

5. 性能调优

  • 在替换完成后,建议对 OBKV-Redis 进行性能测试,确保其满足业务需求。
  • 可以通过调整 OceanBase 集群的资源配置(如内存、CPU)来优化性能。

关于 OBKV Table API 是否可以实现目标

OBKV Table API 是一种更通用的 Key-Value 存储接口,支持更复杂的数据结构和操作。如果您希望在不修改代码的情况下直接替换 Redis,建议优先使用 OBKV-Redis 模式。但如果业务逻辑对 Redis 的依赖较深,或者需要更高的灵活性,可以结合 OBKV Table API 使用。


总结

  1. OBKV-Redis 是否在信创目录:无法从文档中确认,建议查阅官方信创兼容性列表。
  2. 4.2.5 所有小版本是否支持 OBKV-Redis:通常情况下,功能会在基线版本引入后延续到后续的小版本,但需参考官方更新日志。
  3. 如何替换 Redis:通过启用 OBKV-Redis 模式并调整客户端连接方式,可以在较少修改代码的基础上完成替换。如果需要更高灵活性,可以结合 OBKV Table API 使用。

如有进一步疑问,请随时联系 OceanBase 的技术支持团队!

具体信息可参考以下文档:

  1. 通过 Liquibase 管理 OcenBase 数据库版本
  2. ob_compatibility_version
  3. 快速体验 OceanBase 社区版
  4. Linkis 集成 OceanBase 数据库
  5. ob_security_version
  6. 使用 obd 升级 OceanBase 数据库
  7. 通过 OCP 部署 OceanBase 集群
  8. Redo 日志
  9. 进行 Sysbench 测试

学习了