場景
使用若依的前后端分離版,前端下拉框的使用直接查詢的是字典表中的數據。
對於某個類型的字典如果之前已經添加過並使用過,后來想要再添加一條此類型的字典。
在數據庫中添加后,前端刷新下,發現沒有獲取到新增的字典數據。
注:
博客:
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(); } }