scan指定match參數,數據中確實存在匹配的key,為什么返回的是空
問題描述
如下圖所示,數據庫中存在key為test的數據,用scan match的方式卻沒有返回這個數據。

問題分析
MATCH選項讓命令只返回和給定模式相匹配的元素, 對元素的模式匹配工作是在命令從數據集中取出元素之后, 向客戶端返回元素之前的這段時間內進行的, 如果取出的元素都和模式不匹配,則不會返回任何元素。
解決方案
多次scan,以返回的游標值是否為0作為全遍歷結束的標記,每次scan時使用上次scan返回的游標值。
創建GeminiDB Redis時,如何選擇規格和節點
GeminiDB Redis提供了多種實例規格,不同的實例規格和節點數量擁有著不同的性能。本章節總結了一些實踐經驗,幫助您決策如何選擇GeminiDB Redis實例的規格和節點數量。
- GeminiDB Redis實例的規格越高,性能越好。GeminiDB Redis支持的實例規格請參見 數據庫實例規格。
- 在相同的GeminiDB Redis實例規格下,節點數越多,性能越好。
- 建議根據業務實際的測試數據選擇GeminiDB Redis規格,并考慮可靠性冗余,和未來業務增長,適當預留一些資源。
- 根據經驗,單核CPU支持16GB數據時性能較好。例如,業務數據128GB,暫不考慮業務數據增加的情況下,可考慮購買兩個4U16GB的計算節點(即CPU總核數為8)。
與開源Redis5.0相比,GeminiDB Redis支持和限制的命令有哪些
GeminiDB Redis支持的命令請參見使用規范。
業務側原本做了數據分片,切換到GeminiDB Redis后如何處理這部分邏輯
充分考慮到業務后期的規模擴張,GeminiDB Redis采用存算分離架構,在計算層實現了動態數據分片管理,提供強勁的平滑擴縮容能力。因此,接入GeminiDB Redis實例后,業務側無需再做數據分片。
GeminiDB Redis是否支持keys命令的模糊查詢
出于安全角度考慮,GeminiDB Redis不支持通過keys命令進行模糊查詢。建議您使用scan搭配match來進行模糊匹配。
GeminiDB Redis是否支持多DB
GeminiDB Redis的多DB功能將于2022年3月底上線,此前創建的實例暫不支持該功能,也不支持通過升級開啟該功能。
使用GeminiDB Redis多DB功能時,您需要關注以下約束與限制:
- DB數支持的范圍為0~65535。
- 不支持swapdb命令。
- dbsize命令當前僅能統計所有DB下的key的數量,flushdb后dbsize返回的結果并不會降為0。
- 不支持info keyspace,如需統計某個DB下key的數量,請使用scan進行掃描查詢。
- 不支持在Lua腳本中使用select和flushdb命令。
- 不支持在事務中使用select和flushdb命令。
- 暫不支持move命令。
對于scan類的操作,GeminiDB Redis接口與開源Redis 5.0的返回值順序為什么有差異
開源Redis沒有規定如下情況的排序準則,故GeminiDB Redis接口的返回順序可能和開源Redis不一樣,但兩者均滿足開源文檔描述行為。
- scan/hscan/sscan操作的返回值。
- 在zset類型的元素具有相同score時,執行zscan操作的返回值。
針對某些不合法命令,GeminiDB Redis接口與開源Redis 5.0的報錯信息為什么有差異
GeminiDB Redis接口先進行命令語法檢查,再進行key存在性校驗,而開源Redis沒有準則,處理不合法命令的結果存在隨機性。因此在某些不合法命令的報錯信息上二者有時會存在差異。