您的位置:首页 > 数据库 > Redis

redis 优化数据库

2018-02-07 21:29 183 查看
需求:给用户分配管理权限时,每次回显权限树的列表时,都要查询数据库,,,这样会找出数据库压力增大,影响性能,我们可以使用redis   缓存数据    ,,,,把数据缓存到redis中,这样下次查看数据时就不用查询数据库了。直接在redis中拿到,  这样优化了程序性能。
//根据applicationContext-redis配置文件,加载文件  看下图
@Autowired
private JedisPool pool;

//ajax 回显数据
@Action(value="roleAction_genzTreeNodes")
public String genzTreeNodes() throws IOException{
//通过ID查询数据库,获取数据
Role role = RoleService.get(model.getId());
//获取jedis
Jedis jedis = pool.getResource();
//通过jedis,获取里面的ID
String returnJedis = jedis.get(role.getId());
//判断ID返回值是否为空。不为空说明有数据,直接通过JSON传到页面
// 为空说明没有数据,查询数据库获取数据
if(UtilFuns.isEmpty(returnJedis)){
Set<Module> modules = role.getModules();

Specification<Module> spec = new Specification<Module>() {
public Predicate toPredicate(Root<Module> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
// TODO Auto-generated method stub
return cb.equal(root.get("state").as(Integer.class), 1);
}
};
List<Module> find = moduleService.find(spec);
System.out.println("111111111111"+find);
//[{"id": "11","pId": "1","name": "随意勾选 1-1"}, {"id": "111","pId": "11","name": "随意勾选 1-1-1","checked": "true"}]

ArrayList<Map> list = new ArrayList<>();
for (Module module : find) {
HashMap map = new HashMap();
map.put("id", module.getId());
map.put("pId", module.getParentId());
map.put("name", module.getName());
if(modules.contains(module)){
map.put("checked", true);
}
list.add(map);
returnJedis= JSON.toJSONString(list);
//将从数据库查询到的数据ID传给redis   这样下次查看的时候就不用再数据库查询了。直接在redis中查
jedis.set(role.getId(), returnJedis);
}
System.out.println("数据库获取数据");
}else{
System.out.println("redis获取数据");
}

HttpServletResponse response = ServletActionContext.getResponse();
response.setCharacterEncoding("utf-8");
response.getWriter().write(returnJedis);

return NONE;

}

//如果数据需要修改,或者更改数据时,在更改后,一定注意要清空redis   否则或找出数据内容不匹配
//Jedis jedis = pool.getResource();
//jedis.del(role.getId());
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: