缓存中可以缓存热点数据,提高缓存的使用率(特别是对于我们这种搭不起Redis集群的屌丝,毕竟内存很贵呀)。我们可以对要缓存的数据设置缓存的有效期expire。一般是一天的时间,可以根据实际情况调整。
思路:如果一条数据,在缓存有效时间内没有人访问,则从缓存中及时清除。如果该条数据在缓存有效时间内,多次被人访问,则重新设置缓存时间,即:重新倒计时。
比如电商项目中获取商品详情:
/*
* TB_ITEN:主键id:BASE
* TB_ITEN:主键id:DESC
*
* 如果要用Redis缓存一张二维表————表名:主键ID:字段
*/
@Override
public TbItem getGoodDetailById(Long id) {
// 从缓存中获取数据,如果有直接返回
try {
String json = jedisClient.get(ITEM_INFO_KEY + ":" + id + ":BASE");
if (StringUtils.isNotBlank(json)) {
// 重新设置商品的有效期
jedisClient.expire(ITEM_INFO_KEY + ":" + id + ":BASE", ITEM_INFO_KEY_EXPIRE);
return JsonUtils.jsonToPojo(json, TbItem.class);
}
} catch (Exception e1) {
e1.printStackTrace();
}
TbItem tbItem = tbItemMapper.selectByPrimaryKey(id);
try {
// 添加缓存
jedisClient.set(ITEM_INFO_KEY + ":" + id + ":BASE", JsonUtils.objectToJson(tbItem));
// 设置缓存的有效期
jedisClient.expire(ITEM_INFO_KEY + ":" + id + ":BASE", ITEM_INFO_KEY_EXPIRE);
} catch (Exception e) {
e.printStackTrace();
}
return tbItem;
}
缓存结果:
这里向小伙伴们推荐一个Redis可视化的工具:redis-desktop-manager