我在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