---
title: "ODP 支持 OBKV-Redis 协议能力 - 数据库代理  V4.3.3 | OceanBase 文档中心"
description: ODP 支持 OBKV-Redis 协议能力 背景介绍 OBKV-Redis 是 OceanBase 数据库自 4.2.5 版本开始支持的能力，它是基于 OceanBase 数据库开发的完全兼容 Redis 协议的持久化缓存数据库。OBKV-Redis 旨在解决传统 Redis + RDS 成本高昂、可伸缩性差、运维…
image: https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*OSPzQ6GUQF4AAAAAQHAAAAgAeiGDAQ/original
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*nSAhQbrBXKwAAAAAAAAAAAAADiGDAQ/original) 数据库代理 V 4.3.3

# ODP 支持 OBKV-Redis 协议能力

更新时间：2026-04-14 09:41:03

[编辑](https://github.com/oceanbase/oceanbase-proxy-doc/edit/V4.3.3/zh-CN/750.obkv/300.obkv-redis.md)  

## 背景介绍

OBKV-Redis 是 OceanBase 数据库自 4.2.5 版本开始支持的能力，它是基于 OceanBase 数据库开发的完全兼容 Redis 协议的持久化缓存数据库。OBKV-Redis 旨在解决传统 Redis + RDS 成本高昂、可伸缩性差、运维和管理复杂、数据一致性和安全性难以保证等痛点。OBKV-Redis 的 P99 在 10 ms 以内，满足 80% 场景的时延以及吞吐。OBKV-Redis 的详细介绍可参见官网《OceanBase 数据库》文档 [OBKV-Redis](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001516160) 章节。

ODP 自 V4.3.0 起增加了 RPC 服务端口（默认为 `2885`）来提供 no-SQL 请求的代理服务，自 V4.3.2 BP1 起支持 OBKV-Redis 的服务能力，正式提供 RESP 服务能力（复用当前的 RPC 服务端口），并且当前已经完整支持 RESP 协议兼容处理，支持用户使用原生的 RESP 协议访问 OBKV-Redis 持久化能力（业务不需要替换 SDK）。

## 主要特点

ODP 支持 OBKV-Redis 协议能力主要有如下特点：

- RPC 服务端口：在支持 OBKV 请求的基础上，也支持 RESP 连接进行访问。
 - 协议命令支持：当前支持 OBKV-Redis 绝大部分的协议命令的处理。
 - 原生兼容性：支持使用原生的 RESP 客户端或驱动进行访问。

## 使用场景

目前 ODP 中该功能主要有如下两类使用场景：

- 公有云未来持久化 Redis 服务能力的场景。
 - 私有云、开源用户 RESP 协议业务场景。

## 操作示例

#### 说明

本节仅简单给几个操作示例，具体连接介绍可参见官网《OceanBase 数据库》中 [连接 OBKV-Redis 并鉴权](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001850968)。

本节以 OBKV-Redis 用户为 `obcluster` 集群 `test` 租户下的 `root` 用户，且 ODP 的 IP 为 `10.10.10.1`，RPC 端口为 `2885` 为例，介绍如何通过 ODP 连接 OBKV-Redis。

#### 注意

您需注意实际环境中 redis-cli 版本，redis-cli 版本小于 V6.0.0 时，仅可执行连接默认用户的连接串。redis-cli 版本为 V6.0 或之后版本时，您可使用如下任一连接串。

- 连接默认用户

  ```shell
  redis-cli -h <ODP_IP> -p <RPC_PORT> -a <user_password>
  # example
  redis-cli -h 10.10.10.1 -p 2885 -a ********

  ```

  `-a` 用于指定用户密码，默认用户由 ODP 配置项 [rpc_redis_default_user_name](https://www.oceanbase.com/docs/common-odp-doc-cn-1000000002024145) 设置。
 - 通过 `--user` 选项指定用户

  ```shell
  redis-cli -h <ODP_IP> -p <RPC_PORT> --user <user_name>@<tenant_name>#<cluster_name> -a <user_password>
  # example
  redis-cli -h 10.10.10.1 -p 2885 --user root@test#obcluster -a ********

  ```

  `--user` 用于指定用户，`-a` 用于指定用户密码，您需根据实际情况将 `--user` 和 `-a` 配置为对应的用户名和密码。
 - 通过 `-a` 选项指定用户

  ODP 自 V4.3.3 起支持在 `-a` 选项中配置租户名和集群名，格式为 `tenant_name#cluster_name#user_password`，当 `user_password` 为空时，`-a` 选项的配置格式为`tenant_name#cluster_name`。

  ```shell
  redis-cli -h <ODP_IP> -p <RPC_PORT> --user <user_name> -a <tenant_name>#<cluster_name>#<user_password>
  # example
  redis-cli -h 10.10.10.1 -p 2885 --user root -a test#obcluster#<user_password>

  ```

  #### 注意

  通过 `-a` 选项配置租户名和集群名时，`--user` 选项中不能包含租户名和集群名，即仅可在 `--user` 选项和 `-a` 选项中选择一个来配置租户名和集群名。

  您可通过 `--user` 配置连接的用户，若未配置 `--user` 选项，用户默认为 ODP 配置项 [rpc_redis_default_user_name](https://www.oceanbase.com/docs/common-odp-doc-cn-1000000002024145) 的值。

  若 `-a` 选项配置中不包含 `#` 字符，此时 ODP 会尝试从 `--user` 选项或 ODP 配置项 `rpc_redis_default_user_name` 中解析租户名和集群名，解析失败则登录失败。

## 支持的命令

ODP 支持如下 Redis 命令。

### 字符串相关命令

| 命令 | 功能 | 格式 |
| --- | --- | --- |
| APPEND | 在指定键的值后面追加一个字符串。 | APPEND key value |
| BITCOUNT | 统计字符串值中二进制位为 1 的个数。 | BITCOUNT key [start end] |
| DECR | 将键的值减去 1。 | DECR key |
| DECRBY | 将键的值减去指定的整数。 | DECRBY key decrement |
| GET | 获取指定键的值。 | GET key |
| GETBIT | 获取指定键的值中指定偏移位置的位值。 | GETBIT key offset |
| GETRANGE | 获取指定键的值的子字符串。 | GETRANGE key start end |
| GETSET | 设置指定键的新值，并返回旧值。 | GETSET key value |
| INCR | 将键的值加上 1。 | INCR key |
| INCRBY | 将键的值加上指定的整数。 | INCRBY key increment |
| INCRBYFLOAT | 将键的值加上指定的浮点数。 | INCRBYFLOAT key increment |
| MGET | 获取一个或多个指定键的值。 | MGET key [key ...] |
| MSET | 设置多个键值对。 | MSET key value [key value ...] |
| PSETEX | 设置指定键的值和过期时间（以毫秒为单位）。 | PSETEX key milliseconds value |
| SET | 设置指定键的值。 | SET key value（不支持 EX、PX、NX、XX） |
| SETBIT | 设置指定键的值中指定偏移位置的位值。 | SETBIT key offset value |
| SETEX | 设置指定键的值和过期时间（以秒为单位）。 | SETEX key seconds value |
| SETNX | 当键不存在时，设置指定键的值。 | SETNX key value |
| SETRANGE | 更新指定键的值，从指定偏移位置开始。 | SETRANGE key offset value |
| STRLEN | 获取指定键的值的长度。 | STRLEN key |

### 哈希相关命令

| 命令 | 功能 | 格式 |
| --- | --- | --- |
| HDEL | 删除哈希表中一个或多个字段。 | HDEL key field [field ...] |
| HEXISTS | 检查哈希表中指定字段是否存在。 | HEXISTS key field |
| HGET | 获取哈希表中指定字段的值。 | HGET key field |
| HGETALL | 获取哈希表中所有字段和对应的值。 | HGETALL key |
| HINCRBY | 将哈希表中指定字段的值增加指定的整数。 | HINCRBY key field increment |
| HINCRBYFLOAT | 将哈希表中指定字段的值增加指定的浮点数。 | HINCRBYFLOAT key field increment |
| HKEYS | 获取哈希表中所有字段的名称。 | HKEYS key |
| HLEN | 获取哈希表中字段的数量。 | HLEN key |
| HMGET | 获取哈希表中一个或多个指定字段的值。 | HMGET key field [field ...] |
| HMSET | 设置哈希表中多个字段的值。 | HMSET key field value [field value ...] |
| HSET | 设置哈希表中指定字段的值。 | HSET key field value |
| HSETNX | 当哈希表中指定字段不存在时，设置指定字段的值。 | HSETNX key field value |
| HVALS | 获取哈希表中所有字段的值。 | HVALS key |

### 集合相关命令

| 命令 | 功能 | 格式 |
| --- | --- | --- |
| SADD | 向集合中添加一个或多个成员。 | SADD key member [member ...] |
| SCARD | 获取集合中成员的数量。 | SCARD key |
| SDIFF | 返回给定集合之间的差集。 | SDIFF key [key ...] |
| SDIFFSTORE | 将给定集合之间的差集存储到一个新的集合中。 | SDIFFSTORE destination key [key ...] |
| SINTER | 返回给定集合之间的交集。 | SINTER key [key ...] |
| SINTERSTORE | 将给定集合之间的交集存储到一个新的集合中。 | SINTERSTORE destination key [key ...] |
| SISMEMBER | 检查指定成员是否存在于集合中。 | SISMEMBER key member |
| SMEMBERS | 获取集合中的所有成员。 | SMEMBERS key |
| SMOVE | 将指定成员从一个集合移动到另一个集合。 | SMOVE source destination member |
| SPOP | 随机移除并返回集合中的一个或多个成员。 | SPOP key |
| SRANDMEMBER | 从集合中随机获取一个或多个成员。 | SRANDMEMBER key [count] |
| SREM | 从集合中移除一个或多个成员。 | SREM key member [member ...] |
| SUNION | 返回给定集合之间的并集。 | SUNION key [key ...] |
| SUNIONSTORE | 将给定集合之间的并集存储到一个新的集合中。 | SUNIONSTORE destination key [key ...] |

### 有序集合相关命令

| 命令 | 功能 | 格式 |
| --- | --- | --- |
| ZADD | 添加一个或多个有序集合成员，并指定其分数。 | ZADD key score member [score] [member] |
| ZCARD | 获取有序集合中成员的数量。 | ZCARD key |
| ZCOUNT | 获取有序集合中处于指定分数范围内的成员数量。 | ZCOUNT key min max |
| ZINCRBY | 将有序集合中指定成员的分数增加指定的浮点数。 | ZINCRBY key increment member |
| ZINTERSTORE | 计算多个有序集合的交集，并将结果存储在一个新的有序集合中。 | ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM,MIN,MAX] |
| ZRANGE | 获取有序集合中指定索引范围内的成员。 | ZRANGE key start stop [WITHSCORES] |
| ZRANGEBYSCORE | 获取有序集合中指定分数范围内的成员。 | ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] |
| ZRANK | 获取有序集合中指定成员的排名。 | ZRANK key member |
| ZREM | 从有序集合中移除一个或多个成员。 | ZREM key member [member ...] |
| ZREMRANGEBYRANK | 根据排名范围从有序集合中移除成员。 | ZREMRANGEBYRANK key start stop |
| ZREMRANGEBYSCORE | 根据分数范围从有序集合中移除成员。 | ZREMRANGEBYSCORE key min max |
| ZREVRANGE | 按照分数从高到低的返回有序集合中指定索引范围内的成员。 | ZREVRANGE key start stop [WITHSCORES] |
| ZREVRANGEBYSCORE | 按照分数从高到低的返回有序集合中指定分数范围内的成员。 | ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count] |
| ZREVRANK | 获取有序集合中指定成员的倒序排名。 | ZREVRANK key member |
| ZSCORE | 获取有序集合中指定成员的分数。 | ZSCORE key member |
| ZUNIONSTORE | 计算多个有序集合的并集，并将结果存储在一个新的有序集合中。 | ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM,MIN,MAX] |

### 列表相关命令

| 命令 | 功能 | 格式 |
| --- | --- | --- |
| LINDEX | 获取列表中指定索引位置的元素。 | LINDEX key index |
| LSET | 修改列表中指定索引位置的元素。 | LSET key index value |
| LRANGE | 获取列表中指定范围内的元素。 | LRANGE key start stop |
| LTRIM | 保留列表中指定范围内的元素，移除其他元素。 | LTRIM key start stop |
| LPUSH | 将一个或多个元素插入到列表的头部。如果列表不存在，LPUSH 会创建一个新的列表。 | LPUSH key value [value ...] |
| LPUSHX | 当列表已存在时，将一个元素插入到列表的头部。 | LPUSHX key value |
| RPUSH | 将一个或多个元素插入到列表的尾部。如果列表不存在，RPUSH 会创建一个新的列表。 | RPUSH key value [value ...] |
| RPUSHX | 当列表已存在时，将一个元素插入到列表的尾部。 | RPUSHX key value |
| LPOP | 移除并返回列表的第一个元素。 | LPOP key |
| RPOP | 移除并返回列表的最后一个元素。 | RPOP key |
| LREM | 从列表中移除指定数量的指定元素。 | LREM key count value |
| LINSERT | 在列表中指定元素的前面或后面插入一个新元素。 | LINSERT key BEFORE AFTER pivot value |
| LLEN | 获取列表的长度。 | LLEN key |

### 键管理命令

| 命令 | 功能 | 格式 |
| --- | --- | --- |
| TYPE | 获取给定键的数据类型。 | TYPE key [value \| member] |
| DEL | 删除数据库中已经存在的一个或多个 key，如果不存在则自动忽略。 | DEL key [key …] |
| EXISTS | EXISTS 命令用于检查指定的一个 key 或者多个 key 是否存在。 | EXISTS key [key …] |
| TTL | 设置对应一个或者多个 key 的过期时间 | TTL key [key ...] |

### 服务器命令

| 命令 | 功能 | 格式 |
| --- | --- | --- |
| ECHO | 返回传入的参数。 | ECHO message |
| PING | 检测服务器是否存活。 | PING |
| QUIT | 关闭与服务器的连接。 | QUIT |
| SELECT | 切换到指定的数据库。 | SELECT db |
| AUTH | 鉴权登录。 | AUTH [password] |

### 客户端命令

ODP 自 V4.3.3 起支持 OBKV-Redis 客户端命令，具体介绍如下表：

| 命令 | 功能 | 格式 |
| --- | --- | --- |
| CLIENT LIST | 显示当前所有建立连接的客户端。 | CLIENT LIST |
| CLIENT SETINFO | 显示建立连接时的库版本以及库名。 | CLIENT SETINFO LIB-NAME jedis /CLIENT SETINFO LIB-VER 5.3.2 |
| CLIENT ID | 显示当前建立连接的 cs_id。 | CLIENT ID |
| CLIENT INFO | 只显示当前建立连接的信息。 | CLIENT INFO |
| CLIENT SETNAME/GETNAME | 设置当前连接的名字。 | CLIENT SETNAME/GETNAME |
| INFO | 显示当前 ODP 的相关信息。 | INFO |
| MONITOR | 显示当前 ODP 收到的所有 redis 指令。 | MONITOR |

#### 说明

- OBKV-Redis 中 INFO 命令输出内容和 Redis 不完全一致，此处 INFO 命令输出内容是 Redis INFO 命令输出内容的子集。
 - OBKV-Redis 中 MONITOR 和 CLIENT LIST 命令只监听当前 ODP 收到的所有命令以及客户端连接。

  上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
