概述
背景
前两天遇到一个问题,就是将一个 key ,value1、value2 、value3、value4…… 也就是一个 key 多个 value 的数据结构放到 缓存中。这个简单,我就把他们都放到了GuavaCacheManager 缓存中,(GuavaCacheManager可以参考这里 点我 )
但是在取出数据的时候遇到了一个问题。
问题
我门知道 GuavaCacheManager 的数据结构类似 Map<String,Map<Object,Object>> map =new HashMap<>();
我将 数据的key 当作外层map 的 key ,内层map 的key 就随笔用了唯一值,但是在取出缓存值的时候遇到一个问题,取缓存只支持通过 “key“ 从cache 中取出缓存,不支持从cache 中取出所有的条目
我看了cache 的api通过cache 的getNativeCache方法可以得到cache中的所有条目
Object o = cache.getNativeCache();
解决
从上图可以看出这个对象是 类似一个list<map<String,Object>>
的数据结构,于是我就进行转换发现不行,那么就直接当作 map 进行转换
Cache cache = cacheManager.getCache(map.get("keyCode").toString());
Object o = cache.getNativeCache();
try {
Map<String, Object> map2 = (Map<String, Object>) CommonUtil.ObjToMap(o).get("localCache");
for (Map.Entry<String, Object> entry : map2.entrySet()) {
System.out.println(entry.getValue());
}
return list;
} catch (Exception e) {
logger.warn("DictionaryItem cache is error !!!");
}
/**
* Obj 转换为 map
* @param obj
* @return
* @throws Exception
*/
public static Map<String, Object> ObjToMap(Object obj) throws Exception {
Map<String, Object> map = new HashMap<>();
Field[] fields = obj.getClass().getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
map.put(field.getName(), field.get(obj));
}
return map;
}
由上图发现我是转换了两次map 才取到了所有的值。。。
最后推荐大家用 注解方式进行缓存管理, :大家可以参考
springboot的缓存技术
好了最后献上 java Object 转换map 的方法
java Object 转换map
最后
以上就是背后菠萝为你收集整理的springboot缓存 之 从Cache中取出所有条目的全部内容,希望文章能够帮你解决springboot缓存 之 从Cache中取出所有条目所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复