irpas技术客

Spring Boot项目启动时将需要数据添加到redis缓存_!)>_<)!_spring启动时加载数据到缓存

irpas 3858

Spring Boot项目启动时将需要数据添加到redis缓存 在项目中不可避免的会存在像字典、部门这样使用频率很大的数据,如果每次都从数据库中查取数据,势必会增加项目的负担,所以很多开源的后台管理系统都集成了redis。 这里记录一下自己对于将数据加载到redis使用的过程。

首先项目启动时加载:这里使用了一个Java注解@PostConstruct@PostConstruct该注解被用来修饰一个非静态的void()方法。被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。

@PostConstruct public void init(){ loadingCache(); }

loadingCache方法里就是添加缓存的代码,通过SpringUtils.getBean(RedisCache.class).setCacheObject(key,value)来添加缓存:

@Override public void loadingCache(){ DvCode dvCode = new DvCode(); List<DvCode> codeList = dvCodeMapper.selectDvCodeList(dvCode); codeList.stream().forEach(list->{ SpringUtils.getBean(RedisCache.class).setCacheObject(Constants.NAME_KEY+list.getCode(),list.getName()); }); }

NAME_KEY是Constants里面添加的,是最终缓存到redis中的key值;

/*** code cache key */ public static final String NAME_KEY = "code_name:";

这个时候就数据缓存到redis的操作就已经完成了,重新启动项目后,在redis数据库中就可以看到key为code_name的数据了。 那么怎么取用数据?redisCache.getCacheObject(getCacheKey2Name(code));

public static String getCacheKey2Name(String configKey) { return Constants.NAME_KEY + configKey; }

最后添加一个清空缓存数据的方法:

@Override public void clearAreaCodeCache(){ Collection<String> keys = SpringUtils.getBean(RedisCache.class).keys(Constants.NAME_KEY + "*"); SpringUtils.getBean(RedisCache.class).deleteObject(keys); }

那么如果我们在项目启动后更改了数据,又不想重新启动项目,有了添加和清空,这个问题就很好解决了:

@DeleteMapping("/refreshCache") public AjaxResult refreshCache() { dvCodeService.resetDictCache(); return AjaxResult.success(); }

前端搞个按钮什么的,调用一下这个刷新缓存的接口就好啦。

新手上路,请多指教 \(>_<)/


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #Spring