缓存是非常重要的,对于那些经常使用却又不经常改变的数据非常适合做缓存,这样可以极大的缓解数据库的压力,提升运行的效率,
为什么选用redis做缓存呢,因为redis支持五种数据类型string hash list set zset 数据类型很丰富,而且redis是运行在内存中的,IO速度很快。
那么如何做缓存呢,springboot中有个springdataredis,通过它可以很方便的进行redis的读取
redistemplate中有很多方法可以操作,以String为例
@Component
public class RedisUtils {
@Autowired
private RedisTemplate<String, String> redisTemplate;
/**
* 读取缓存
*
* @param key
* @return
*/
public String get(final String key) {
return redisTemplate.opsForValue().get(key);
}
/**
* 写入缓存
*/
public boolean set(final String key, String value) {
boolean result = false;
try {
redisTemplate.opsForValue().set(key, value);
result = true;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 更新缓存
*/
public boolean getAndSet(final String key, String value) {
boolean result = false;
try {
redisTemplate.opsForValue().getAndSet(key, value);
result = true;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 普通缓存放入并设置时间
*
* @param key 键
* @param value 值
* @param expire 时间(秒) time要大于0 如果time小于等于0 将设置无限期
* @return true成功 false 失败
*/
public boolean set(final String key, String value, long expire) {
boolean result = false;
try {
redisTemplate.opsForValue().set(key, value, expire, TimeUnit.SECONDS);
result = true;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 删除缓存
*/
public boolean delete(final String key) {
boolean result = false;
try {
redisTemplate.delete(key);
result = true;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}
通过fastjson,将对象转成json字符串存储到redis中,具体如下
public User selectByPrimaryKey(Integer id) {
String s = redisUtils.get(REDIS_USER_PREFIX + id);
if (!StringUtils.hasLength(s)) {
log.info("缓存穿透");
//没有查到就查询后加入缓存
User user = userMapper.selectByPrimaryKey(id);
s = JSONObject.toJSONString(user);
redisUtils.set(REDIS_USER_PREFIX + id, s);
}
//存在的话就直接返回
JSONObject jsonObject = JSONObject.parseObject(s);
return JSONObject.toJavaObject(jsonObject, User.class);
}
至此,完成
原文:https://www.cnblogs.com/clion/p/14199645.html