1、添加缓存
1.1功能分析
查询内容列表时添加缓存。
- 查询数据库之前先查询缓存。
- 查询到结果,直接响应结果。
- 查询不到,缓存中没有需要查询数据库。
- 把查询结果添加到缓存中。
- 返回结果。
参数
函数:jedisClient.hset(key, field, value)
INDEX_CONTENT_AD:表示总的广告位名称
120 :表示其中一个id所辖的内容(轮播图),可以是其余的广告分类内容
XXX:表示根据key所查询的内容
1.2 代码实现
public List<TbContent> getContentList(long category_Id){
// 1、添加try catch。进行判断redis中是否有缓存
// 2、若有缓存,则直接进行 json转成list 进行返回
try {
String json = jedisClient.hget("INDEX_CONTENT_AD", category_Id+"");
if(StringUtils.isNotBlank(json)){
// 将json数据转成list
List<TbContent> list = JsonUtils.jsonToList(json, TbContent.class);
return list;
}
} catch (Exception e) {
e.printStackTrace();
}
// 获取条件查询对象
TbContentExample example = new TbContentExample();
// 添加查询的条件
Criteria criteria = example.createCriteria();
criteria.andCategoryIdEqualTo(category_Id);
// 执行查询,返回list集合
List<TbContent> list = tbContentMapper.selectByExample(example);
// 3、若无缓存,则将list转成json放入redis缓存中
try {
jedisClient.hset("INDEX_CONTENT_AD", category_Id+"", JsonUtils.objectToJson(list));
// jedisClient.hset(key, field, value)
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
2、缓存同步
在实际应用中,若在后台管理系统中增加新的广告内容,由于读取的是缓存,所以会造成输入的内容无效情况。因此需要缓存同步。
代码实现
/**
* 添加内容广告
*
*/
public TaotaoResult addContent(TbContent tbContent) {
// 补全pojo信息
//
tbContent.setUpdated(new Date());
tbContent.setCreated(new Date());
tbContentMapper.insert(tbContent);
//缓存同步,删除此id的缓存,下次重新读取数据库
jedisClient.hdel("INDEX_CONTENT_AD", tbContent.getCategoryId().toString());
return TaotaoResult.ok();
}