【十次方】Springboot中使用Redis做缓存

Spring全家桶+分布式微服务(十次方项目学习)

十次方学习交流qq群:672373393

今天学习十次方项目,其中说到了如何在springboot框架中如何使用redis缓存,写篇博客记录一下。

为什么要用缓存?

在我们平时开发的项目中,其实是比较忌讳频繁的与数据库打交道的。所以我们需要用到缓存,来避开与数据库的多次交互。获取重复的数据我们只需要第一次查询数据,然后将数据存入redis缓存中,之后再次获取就直接通过缓存而避开与数据库交互。

 

如何使用

1.导入redis配置

我们需要在pom.xml文件中加入redis配置

        
            org.springframework.boot
            spring-boot-starter-data-redis
        

然后在application.yml文件中配置redis连接地址

【十次方】Springboot中使用Redis做缓存_第1张图片

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集合

 

你可能感兴趣的:([十次方])