• 沒有找到結果。

3.3 开发规范与命令兼容

3.3.1 使用规范

本章节主要从业务设计、命令等方面介绍GaussDB(for Redis)的一些规范和建议,用 于解决常见的使用错误,助力您高效使用GaussDB(for Redis)。

业务设计规范

3-5 业务设计规范

使用建议 使用限制

● 命令执行超时或失败时,业务侧需要 具有重传机制。

● Key设计建议随机散列,尽量避免热 点。

● Pipeline建议一次执行的命令数不超 过30。

● 使用Pub/Sub系列命令的连接上不能 执行其他常规命令。

● 不允许不同数据类型使用同名key。

(否则,诸如type等命令的执行效果 将不符合预期。)

● 暂不支持事务相关操作。

命令使用规范

用户在连接到GaussDB(for Redis)后,为了更好的使用数据库,需要关注表3-6所示的 使用建议和使用限制。

3-6 命令使用建议和限制

命令类型 使用建议 使用限制

String ● 使用mset、mget、msetnx命 令时,建议为key增加hashtag 来提高性能。如果不增加 hashtag,则不同的key可能分 散到不同的节点执行,会影响 性能,并且不同节点的key无法 保证原子性。

● 可以使用pipeline批量执行命 令。

● key的大小不超过100kB,

value大小不超过1MB。

● msetnx必须携带hashtag,否 则命令会报错。

hash ● 使用hkeys、hvals、hgetall命 令时,建议操作的元素数量限 制在100以内, 建议使用hscan 命令代替。

● 使用hmget、hmset、hscan命 令时,建议单次操作的元素数 量限制在100以内。

● key+field大小不超过100KB,

value大小不超过1MB。

● 在新建连接中首次执行hscan命 令,需要从0开始扫描。如需分 多次进行一轮完整扫描,需保 持在同一个长连接中操作。

list ● 使用lrem、ltrim、lrange、

linsert命令时,建议操作的元 素数量限制在100以内。

● 建议仅在头部和尾部插入元素 时使用linsert命令。

● key大小不超过100KB,value 大小不超过1MB。

● 不支持blpop、brpop、

brpoplpush命令。

命令类型 使用建议 使用限制 set ● 使用sdiff、sdiffstore、sinter、

sinterstore、srandmember、

sunion、sunionstore命令时,

建议操作集合元素数量限制在 100以内。

● 使用smembers命令时,建议操 作集合元素数量限制在100以 内,建议使用sscan替代。

● key+member大小不超过 100KB。

● 在新建连接中,首次执行sscan 命令时,需要从0开始扫描。如 果需要分多次进行一轮完整扫 描,需保持在同一个长连接中 操作。

● smove、sunion、sinter、

sdiff、sunionstore、

sinterstore、sdiffstore命令需 要给多key增加相同的

hashtag。

zset ● 使用zcount、zinterstore、

zlexcount、zrange、

zrangebylex、

zrangebyscore、

zrank、zremrangebylex、

zremrangebyrank、

zremrangebyscore、

zrevrange、zrevrangebylex、

zrevrangebyscore、zrevrank、

zunionstore命令时,建议操作 集合元素数量限制在100以内。

● 由于zremrangebyscore命令不 支持limit,因此建议使用“先 执行zrangebyscore(加limit,

count限制在100以内)查出符 合条件的member,再执行 zrem进行删除”的方式,控制 每批删除的记录数。

● key+member大小不超过 100KB。

● 在新建连接中,首次执行zscan 命令,需要从0开始扫描。如果 需要分多次进行一轮完整扫 描,需保持在同一个长连接中 操作。

● zunionstore、zinterstore命令 需要给多key增加相同

hashtag。

● 不支持bzpopmax、bzpopmin 命令。

Stream 使用xinfo、xtrim命令时,建议操

作的元素数量限制在100以内。 ● key大小不超过100KB。

● xread命令需要给多key增加相 同的hashtag。

● xread、xreadgroup命令会占用 内部有限连接资源,使用时必 须搭配BLOCK选项设置超时时 间,避免持续占用内部连接资 源,影响其他命令的正常执 行。

hyperlogl

og 使用pfmerge命令时,建议操作的

元素数量限制在100以内。 ● key大小不超过100KB。

● pfmerge、pfcount命令需要给 多key增加相同hashtag。

● 不支持pfdebug、pfselftest命 令。

命令类型 使用建议 使用限制 geo 使用georadius、

georadiusbymember命令时,建 议操作的元素数量限制在100以 内。

● key+member大小不超过 100KB。

● 如果georadius命令搭配store、

storedist选项使用,相当于使 用了多key,此时需要给多key 增加相同hashtag。

● 不支持georadius_ro、

georadiusbymember_ro命令。

bitop - ● key大小不超过100KB。

● bitop命令需要给多key增加相 同hashtag。

key管理 ● scan操作搭配match pattern 时,不建议使用后缀匹配,否 则会影响性能。

● 使用del、exists命令时,建议 为key增加hashtag,从而提高 性能。如果不增加hashtag,则 不同key可能分散到不同节点执 行,影响性能,并且不同节点 的key无法保证原子性。

● 可以使用pipeline批量执行命 令。

● 使用sort命令时,建议操作的 元素数量限制在100以内。

● 在新建连接中,首次执行scan 命令,需要从0开始扫描。如需 分多次进行一轮完整扫描,需 保持在同一个长连接中操作。

● sort命令需要给多key增加相同 hashtag。

● sort命令不支持store选项。

● 不支持debug、dump、

migrate、move、object、

rename、renamenx、

restore、restore-asking、

touch、unlink命令。

命令类型 使用建议 使用限制 数据库管

理 flushall命令会导致实例所有数据

被清空,建议谨慎使用。 ● info命令返回的内存指标不代 表数据量。如需查看数据量,

请使用info capacity命令,该 命令查询结果为数据量的预估 值,非实时的准确值。

● dbsize命令查询结果为key数量 的预估值,非实时的准确值

(由于采用MVCC机制)。在 执行flushall之后,dbsize查询 结果为0。

● 暂不支持通过config set命令调 整参数

● 由于目前还不支持多DB特性,

因此select命令执行无效。

● 不支持bgrewriteaof、

bgsave、client、command、

flushdb、info keyspace、

keys、lastsave、latency、

lolwut、memory、module、

monitor、post、psync、

replconf、replicaof、role、

save、shutdown、slaveof、

slowlog、sync、swapdb命 令。

Lua脚本 请参见Lua脚本规范。 ● eval、evalsha命令需要给多 key增加相同的hashtag。

● Lua脚本不支持执行xread、

xreadgroup、scan、auth、

config、flushall、info、

select、pub/sub系列命令。

● 其他限制详见Lua脚本规范。

命令重命名

GaussDB(for Redis)实例创建成功后,支持对命令进行重命名。对于高危命令(如:

flushall、hgetall、eval),建议您联系客服禁用或重命名,以增强实例的安全性。