1 添加缓存
1.1 功能分析
查询内容列表时添加缓存。
1、查询数据库之前先查询缓存。
2、查询到结果,直接响应结果。
3、查询不到,缓存中没有需要查询数据库。
4、把查询结果添加到缓存中。
5、返回结果。
向redis中添加缓存:
Key:cid
Value:内容列表。需要把java对象转换成json。
使用hash对key进行归类。
HASH_KEY:HASH
|--KEY:VALUE
|--KEY:VALUE
|--KEY:VALUE
|--KEY:VALUE
注意:添加缓存不能影响正常业务逻辑。
1.2 代码实现
public List<TbContent> getContentListByCid(long cid) {
//查询缓存
try {
//如果缓存中有直接响应结果
String json = jedisClient.hget(CONTENT_LIST, cid + "");
if (StringUtils.isNotBlank(json)){
List<TbContent> list= JsonUtils.jsonToList(json, TbContent.class);
return list;
}
} catch (Exceptione) {
e.printStackTrace();
}
//如果没有查询数据库
TbContentExample example = new TbContentExample();
Criteria criteria =example.createCriteria();
//设置查询条件
criteria.andCategoryIdEqualTo(cid);
//执行查询
List<TbContent> list = contentMapper.selectByExampleWithBLOBs(example);
//把结果添加到缓存
try {
jedisClient.hset(CONTENT_LIST, cid + "", JsonUtils.objectToJson(list));
} catch (Exceptione) {
e.printStackTrace();
}
return list;
}
2 缓存同步
2.1 本质
对内容信息做增删改操作后只需要把对应缓存删除即可。
2.2 代码实现
可以根据cid删除。
public E3Result addContent(TbContent content) {
Date nowDate = new Date();
//将内容数据插入到内容表
content.setCreated(nowDate);
content.setUpdated(nowDate);
//插入到数据库
contentMapper.insert(content);
//缓存同步,删除缓存中对应的数据。
jedisClient.hdel(CONTENT_LIST, content.getCategoryId().toString());
return E3Result.ok();
}