场景
使用若依的前后端分离版,前端下拉框的使用直接查询的是字典表中的数据。
对于某个类型的字典如果之前已经添加过并使用过,后来想要再添加一条此类型的字典。
在数据库中添加后,前端刷新下,发现没有获取到新增的字典数据。
注:
博客:
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(); } }