基于springBoot的redis注解教程

一、pom文件加入依赖

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

二、在application.yml添加redis信息

spring:
  cache:
    type: redis
  redis:
    host: 172.0.0.1
    database: 0
    password:
    port: 6379
    jedis:
      pool:
        max-active: 100
        max-idle: 8
        min-idle: 0
        max-wait: -1ms

三、在启动类添加@EnableCaching,开启注解驱动的缓存的管理

@EnableCaching //开启注解驱动的缓存管理
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class BaseInfoApplication {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

四、redis的注解使用

1、@Cacheable注解的作用:缓存被调用方法的结果(返回值),已经缓存就不再调用注解修饰的方法,适用于查询接口

@RequestMapping("/redisOnly")
@RestController()
public class RedisOnlyController {
    @Resource
    RedisOnlyService redisOnlyService;
    @RequestMapping(value = "/user/{id}", method = RequestMethod.GET)
    public User getById(@PathVariable("id") String id) {
        return redisOnlyService.selectById(id);
    }
}

@Service
public class RedisOnlyServiceImpl implements UserService {
    /**
     *  先用id生成key,在用这个key查询redis中有无缓存到对应的值
     *
     *  若无缓存,则执行方法selectById,并把方法返回的值缓存到redis
     *
     *  若有缓存,则直接把redis缓存的值返回给用户,不执行方法
     */
    @Cacheable(cacheNames="user", key="#id")
    @Override
    public User selectById(String id) {
        //直接new一个给定id的用户对象,来返回给用户
        return new User(id,"redisOnly","password");
    }
}

使用FastoRedis查看缓存的数据,访问对应的接口,查看第二次是否打印sql语句,或者debug打断点进行查看。

 

其中,@Cacheable(cacheNames="user", key="#id")的cacheNames="user",把用户数据存放于user的空间中,其本质是redis中key加上前缀user;key="#id",使用方法参数z中的id参数生成缓存键值对中的key

2、@CacheEvict的作用是删除redis的缓存,适用于删除接口

若要删除user下的全部缓存,@CacheEvict(cacheNames="user",allEntries=true)。

3、@CachePut主要作用是缓存被调用的结果,主要用于更新操作和插入操作。

@CachePut的值在已经被缓存的情况下,@CachePut仍然会执行其注解的方法,而@Cacheable则不会。

4、redis与mybatis的使用

redis与mybatis的使用方法为对应的注解方法,添加到对应的dao操作上就实现了redis缓存的操作。

五、redis的其它注解属性

         注解属性                                                                       说明
       keyGenerator定义键值对中key生成的类,其中和key属性不可以同时存在。
          sync若ysnc=true,如果redis中没有数据,多个线程同时访问该方法,其中只有一个线程会得到执行,其它线程进行等待;如redis中有缓存数据,多个线程可以同时进行访问该方法。sync不可以解决缓存穿透的问题,由redis不支持超时时间的,所以不存在缓存击穿和雪崩的问题。
     condition在执行方法后,若condition的结果为true,在缓存数据,若为false,则只执行该方法,不缓存数据。
    unless在执行该方法后,判断unless,若果为true,则不缓存数据

@CacheConfig类级别的注解,如果我们在此注解中定义cacheNames,则此类中的所有方法上的cacheNames默认都是此值,@Cacheable也可以重新定义cacheNames的值。

 

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值