首先项目启动时加载
这里使用了一个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();
}
前端搞个按钮什么的,调用一下这个刷新缓存的接口就好啦。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论