缓存 redis和springboot cache

在项目中使用到了缓存的机制,所以在这里总结一下,加深印象

先说一下redis缓存吧,

我使用的是springboot开发的,对于redis的安装我这里就不多说了,网上有很多的教程

1.项目配置redis (在pom文件中引入redis的jar包)

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2.配置redis的端口号,我使用的是yml,

spring
   redis:
      host: 127.0.0.1

3.配置就这么多,现在就是使用了。我这里使用缓存是为了解决java与数据库的频繁交互

   比如通过id进行查找,就可以将他放入到缓存中,具体的代码如下

//创建一个redis容器
@Autowired
private RedisTemplate redisTemplate;


public Article findById(String id) {
		//先从缓存中查询是否含有
        Article article   =(Article) redisTemplate.opsForValue().get("article_" + id);

        //如果没有取到
        if(article==null) {
            article =  articleDao.findById(id).get();
            //存放到缓存                      10秒过期
          //  redisTemplate.opsForValue().set("article_" + id,article,10,TimeUnit.SECONDS);
            redisTemplate.opsForValue().set("article_" + id,article);
        }
        return article;
}

在查询的时候会去缓存中查找,第一次缓存中没有数据,就会进行存入缓存,并设置了他的key,以后就可以通过key找到

是不是以为这样就结束了,不是的,这样写了,那每次修改和删除之后,在进行查找的时候回去缓存中找到,逻辑是错的,所以在修改和删除的方法中,应该清除掉缓存中的数据

代码如下

/**
	 * 修改
	 * @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);
	}

这样就可以完美的解决java在查找数据的时候频繁交互的问题

对于redis中的方法,我总结了一些常用的,

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

其实我觉得最重要的还是opsForValue()这个方法

好了redis的缓存就这样,

接下来讲一下springboo cache缓存

springboo cache缓存和redis区别就是他不能设置过期时间

相对与redis来说cache更加的方便,在springboot开发中只需要记住三个注解就可以

@EnableCaching   //使用springboot 的缓存  在启动类上

@Cacheable   //service层 方法上  表示存入缓存

与之对应的就是清除缓存

@CacheEvict

使用的截图

/**
	 * 根据ID查询实体
	 * @param id
	 * @return
	 */
	@Cacheable(value = "gathering",key = "#id")   //value :全局的表示
	//在执行下面的时候回去寻找
	public Gathering findById(String id) {
		return gatheringDao.findById(id).get();
	}



	/**
	 * 修改
	 * @param gathering
	 */
	@CacheEvict(value = "gathering",key = "#gathering.id")
	public void update(Gathering gathering) {
		gatheringDao.save(gathering);
	}

	/**
	 * 删除
	 * @param id
	 */
	@CacheEvict(value = "gathering",key = "#id")
	public void deleteById(String id) {
		gatheringDao.deleteById(id);
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值