springboot缓存 之 从Cache中取出所有条目

来源:互联网 发布:淘宝论坛推广方法 编辑:程序博客网 时间:2024/06/06 01:23

背景

前两天遇到一个问题,就是将一个 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

阅读全文
0 0
原创粉丝点击