redis缓存的应用详解
在现在的很多项目,基本上都需要引入缓存机制,那么缓存到底是什么呢?
缓存 也就是数据交互的缓冲区 Cache
在java-web项目中实现缓存,也就是需要首先把数据库需要用到的数据备份一份作为副本,当我们以同样的url请求的时候,这时候就不需要再次调用查询数据库的操作,只需要把提前预存的副本拿出来即可。
这样的好处也就不言而喻,不仅可以加快执行命令的速度,而且需要用到的流量更少
下面我们通过添加一个大广告的程序来引入和解析缓存
1 首先在查询大广告的时候
try {
//尝试从Redis中取出数据
String hgetresult = jedisDao.hget(INDEX_CONTENT_REDIS_KEY, contentCategoryId+"");
//判断字符串是否为空
if (!StringUtils.isBlank(hgetresult)) {
List<TbContent> jsonToList = (List<TbContent>)JsonUtils.jsonToList(hgetresult,TbContent.class);
System.out.println("从缓存中取出首页信息");
return jsonToList;
}
} catch (Exception e) {
// TODO: handle exception
}
INDEX_CONTENT_REDIS_KEY就是保存在redis中的key,
hget为获取指定id的缓存数据的方法
//将数据库中查询到的内容存在Redis缓存中
//转字符串
String json = JsonUtils.objectToJson(list);
try {
jedisDao.hset(INDEX_CONTENT_REDIS_KEY, contentCategoryId+"", json);
System.out.println("存入缓存");
} catch (Exception e) {
// TODO: handle exception
}
return list;
2 在我们真正插入新广告的时候需要清空旧缓存,这时候代码如下
HttpClientUtil.doGet(REST_BASE_URL+REST_INDEX_CONTENT_URL+"/"+content.getCategoryId());
这句代码的主要含义是请求到hdel函数内,清空指定id 的缓存
@Override
public long hdel(String hkey, String key) {
Jedis jedis = jedisPool.getResource();
// TODO Auto-generated method stub
Long hdel = jedis.hdel(hkey, key);
jedis.close();
return hdel;
}
思路连在一块也就是
当我们新添加一个数据的时候,这时候旧的缓存已经过时了,直接清空需要更新的缓存,添加完成回到查询界面,根据缓存是否为空来判断是否需要更新缓存,如果为空,则更新最新缓存
这样像广告这种消耗大量流量并且需要重复请求的,只需要请求本地缓存就可以了。