本页面主要从业务设计、命令等方面介绍GeminiDB Redis的一些规范和建议,用于解决常见的使用错误,助力您高效使用GeminiDB Redis。
业务设计规范
使用建议 | 使用限制 |
---|---|
命令执行超时或失败时,业务侧需要具有重传机制。 Key设计建议随机散列,尽量避免热点。 Pipeline建议一次执行的命令数不超过30。 |
使用Pub/Sub系列命令的连接上不能执行其他常规命令。 不允许不同数据类型使用同名key。(否则,诸如type等命令的执行效果将不符合预期。) 暂不支持事务相关操作。 |
命令使用规范
用户在连接到GeminiDB Redis后,为了更好的使用数据库,需要关注下表所示的使用建议和使用限制。
命令类型 使用建议 使用限制 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选项设置超时时间,避免持续占用内部连接资源,影响其他命令的正常执行。
hyperloglog 使用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命令调整参数l 由于目前还不支持多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命令。
命令重命名
GeminiDB Redis实例创建成功后,支持对命令进行重命名。对于高危命令(如:flushall、hgetall、eval),建议您联系客服禁用或重命名,以增强实例的安全性。