Spring全家桶+分布式微服务(十次方项目学习)
十次方学习交流qq群:672373393
今天学习十次方项目,其中说到了如何在springboot框架中如何使用redis缓存,写篇博客记录一下。
为什么要用缓存?
在我们平时开发的项目中,其实是比较忌讳频繁的与数据库打交道的。所以我们需要用到缓存,来避开与数据库的多次交互。获取重复的数据我们只需要第一次查询数据,然后将数据存入redis缓存中,之后再次获取就直接通过缓存而避开与数据库交互。
如何使用
1.导入redis配置
我们需要在pom.xml文件中加入redis配置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
然后在application.yml文件中配置redis连接地址
2.代码使用
接下来的使用就比较简单了,在service中添加RedisTemplate实例
@Autowired
private RedisTemplate redisTemplate;
这里我们优化一下findById根据id查询方法的效率
/**
* 根据ID查询实体
* @param id
* @return
*/
public Article findById(String id) {
//先从缓存中查询当前对象
Article article = (Article) redisTemplate.opsForValue().get("article"+id);
//如果没有
if(article==null){
//从数据库中取
article = articleDao.findById(id).get();
//存入缓存中
redisTemplate.opsForValue().set("article"+id,article);
}
return article;
}
但是需要注意一点,如果我们数据库中数据修改了,那边对应的缓存中的数据也需要修改,不然读取的将一直是第一次存入缓存中的数据。所以我们对应的需要对 修改 删除方法进行改动
/**
* 修改
* @param article
*/
public void update(Article article) {
redisTemplate.delete("article"+article.getId());
articleDao.save(article);
}
/**
* 删除
* @param id
*/
public void deleteById(String id) {
redisTemplate.delete("article"+id);
articleDao.deleteById(id);
}
最后简单介绍一下RedisTemplate对象常用的几个方法:
stringRedisTemplate.opsForValue().set("test", "100",60*10,TimeUnit.SECONDS);//向redis里存入数据和设置缓存时间
stringRedisTemplate.opsForValue().get("test")//根据key获取缓存中的val
stringRedisTemplate.boundValueOps("test").increment(-1);//val做-1操作
stringRedisTemplate.boundValueOps("test").increment(1);//val +1
stringRedisTemplate.getExpire("test")//根据key获取过期时间
stringRedisTemplate.getExpire("test",TimeUnit.SECONDS)//根据key获取过期时间并换算成指定单位
stringRedisTemplate.delete("test");//根据key删除缓存
stringRedisTemplate.hasKey("546545");//检查key是否存在,返回boolean值
stringRedisTemplate.expire("red_123",1000 , TimeUnit.MILLISECONDS);//设置过期时间
stringRedisTemplate.opsForSet().add("red_123", "1","2","3");//向指定key中存放set集合
stringRedisTemplate.opsForSet().isMember("red_123", "1")//根据key查看集合中是否存在指定数据
stringRedisTemplate.opsForSet().members("red_123");//根据key获取set集合