使用spring+redis实现缓存

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ksdb0468473/article/details/72843328

在使用缓存之前,需要先介绍一下,Spring为缓存提供的几个注解:
@Cacheable:在方法执行前Spring先查看缓存中是否有数据,如果有数据,则直接返回缓存数据;若没有数据,调用方法并将方法返回值放进缓存
@CachePut:无论怎样,都将会将方法的返回值放到缓存中。@CachePut的属性与@Cacheable保持一样
@CacheEvict:将一条或多条数据从缓存中删除
@Caching:可以通过@Caching注解组合多个注解策略在一个方法上

下面看一个实例:

@Override
@Cacheable(value = "template", key = "#id")
public SmsTemplate getById(Long id){
    return smsTemplateMapper.getById(id);
}

这是一个服务,其他代码自行脑补吧,比如说其中的mapper,我这里是用MyBatis实现的。
如果你的配置中有多个缓存组件,那么就需要选择一个缓存的类型才行。

spring:
    cache:
        type: redis

在spring boot的入口类中要加入如下的注解,用来开启缓存

@EnableCaching

通过上面的代码后,可以验证一下结果,打开redis查看一下:

127.0.0.1:6379> KEYS *
1) "template:\xac\xed\x00\x05sr\x00\x0ejava.lang.Long;\x8b\xe4\x90\xcc\x8f#\xdf\x02\x00\x01J\x00\x05valuexr\x00\x10java.lang.Number\x86\xac\x95\x1d\x0b\x94\xe0\x8b\x02\x00\x00xp\x00\x00\x00\x00\x00\x00\x00\x01"

这里的乱码是因为redistemplate没有序列化导致的,影响不大的。
现在再来看一下@Cacheable(value = “template”, key = “#id”)
这个注解的意思是,在访问方法之前,先去缓存中查找,value = “template”, key = “#id”的key是否存在,因为上例中并没有序列化,其实key可以理解为template:1这样的情形,如果没有找到再进入方法体中从数据库请求数据,请求数据之后将数据放到缓存中保存起来,这样一个完整的过程就完成了。
这里要注意的是,key = “#id”中的id是我的参数中的名称,只有这样才能接受到该值。
其中这里还有很多种方式的表达式,这里只介绍了我自己用到的场景,其他的使用方式还要大家去扩展,而且这里只介绍了一种方法的使用,大家可以举一反三,其实很简单,主要是Spring Boot为我们已经做了大量的配置,省去了很多工作。

猜你喜欢

转载自blog.csdn.net/ksdb0468473/article/details/72843328