我在redis的高速緩存的地圖具有以下結構:Redis的數據檢索
緩存條目:Map<String, Map<String, String>>
內地圖可以具有多達25000元件/桶。 有沒有辦法在redis中從內部映射中檢索基於鍵(redis鍵,外部映射的鍵和內部映射的鍵)的特定值,而無需在訪問此redis緩存的Java方法中獲取整個redis條目?
目前,如果我不得不刪除從內部地圖的特定按鍵,我做它通過以下方式:使用Lua
Map<String, Map<String, String>> mapFromRedis = redis.get("myRediscacheKey");
Map<String, String> innerMap = new HashMap<>();
if (!mapFromRedis.isEmpty()) {
innerMap = mapFromRedis.get("key");
}
if (innerMap.containsKey("keyToBeDeleted")) {
innerMap.remove("keyToBeDeleted");
mapFromRedis.put("key", innerMap);
}
redis.set("myRediscacheKey", mapFromRedis);
我們是否真的需要修改緩存的邏輯結構(OP中的映射Map),以使操作更高效?將困難的工作轉移到UDF更容易,並保持您的代碼完好無損。如果UDF無法放在Redis實例上(由於某些限制),您應該首選解決方案 – kgdinesh
@kgdinesh這取決於OP想要實現的內容。完整的代碼或更好的性能?由於OP提到內部地圖中有25000個元素,我認爲他可能需要更好的性能。另外,lua腳本執行一些複雜的工作並不是一個好主意,可能會阻塞Redis很長一段時間。 –
做複雜的事情正是爲什麼UDF的目的不是嗎?爲什麼會阻止redis?通過客戶進行類似的呼叫有什麼不同? – kgdinesh