我是靠谱客的博主 背后菠萝,最近开发中收集的这篇文章主要介绍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

最后

以上就是背后菠萝为你收集整理的springboot缓存 之 从Cache中取出所有条目的全部内容,希望文章能够帮你解决springboot缓存 之 从Cache中取出所有条目所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(242)

评论列表共有 0 条评论

立即
投稿
返回
顶部