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),建议您联系客服禁用或重命名,以增强实例的安全性。