数码资讯
springboot缓存 之 从Cache中取出所有条目
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
背景
前两天遇到一个问题,就是将一个 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
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。