zoukankan      html  css  js  c++  java
  • 若依前后端分离版数据库已经存在的字典添加一条后刷新没作用,必须清楚Redis缓存

    场景

    使用若依的前后端分离版,前端下拉框的使用直接查询的是字典表中的数据。

    对于某个类型的字典如果之前已经添加过并使用过,后来想要再添加一条此类型的字典。

    在数据库中添加后,前端刷新下,发现没有获取到新增的字典数据。

    注:

    博客:
    https://blog.csdn.net/badao_liumang_qizhi
    关注公众号
    霸道的程序猿
    获取编程相关电子书、教程推送与免费下载。

    实现

    这是因为若依的根据字典类型获取数据的接口使用了Redis的字典缓存机制。

    前端调用的根据字典的类型获取字典的值的接口对应的后台方法中

        @GetMapping(value = "/type/{dictType}")
        public AjaxResult dictType(@PathVariable String dictType)
        {
            return AjaxResult.success(dictTypeService.selectDictDataByType(dictType));
        }

    对应的service中

       @Override
        public List<SysDictData> selectDictDataByType(String dictType)
        {
            List<SysDictData> dictDatas = DictUtils.getDictCache(dictType);
            if (StringUtils.isNotNull(dictDatas))
            {
                return dictDatas;
            }
            dictDatas = dictDataMapper.selectDictDataByType(dictType);
            if (StringUtils.isNotNull(dictDatas))
            {
                DictUtils.setDictCache(dictType, dictDatas);
                return dictDatas;
            }
            return null;
        }

    会根据传递过来的字典类型首先从Redis的字典缓存中查询,如果之前有的话则直接返回,

    否则再从数据库中进行查询并且再存到缓存中。

    所以为了显示新增加的之前存在的字典类型是数据。

    可以新建一个单元测试方法,调用清除字典缓存的数据。

    那么在进行查询时就是查询数据了。

    @RunWith(SpringJUnit4ClassRunner.class)
    @SpringBootTest
    public class TestRedis {
    
    
        @Test
        public void test(){
            DictUtils.clearDictCache();
        }
    }
    博客园: https://www.cnblogs.com/badaoliumangqizhi/ 关注公众号 霸道的程序猿 获取编程相关电子书、教程推送与免费下载。
  • 相关阅读:
    Mybatis Interceptor 拦截器原理 源码分析
    Mybatis SqlSessionTemplate 源码解析 原理理解
    DRUID连接池的实用 配置详解以及监控配置
    Oracle 单行函数
    Oracle复杂查询及总结
    Oracle数据更新、事务处理、数据伪列
    Oracle表的创建及管理
    Oracle建表、更新、查询综合练习
    Oracle约束
    Oracle集合、序列
  • 原文地址:https://www.cnblogs.com/badaoliumangqizhi/p/13588610.html
Copyright © 2011-2022 走看看