本頁面主要從業務設計、命令等方面介紹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),建議您聯系客服禁用或重命名,以增強實例的安全性。