SpringBoot缓存(二)----redis缓存

redis是一个非关系型数据库(mysql,sqlserver之类的是关系型数据库,elasticsearch、mongodb等是非关系型数据库),redis性能强劲,读写速度超快,所有操作都是原子性的。是很多高并发情景下实现缓存的很好选择。

redis配合mysql实现缓存的过程:

a.客户端请求过来先向redis查找缓存,查到了就直接返回数据

b.redis里没找到缓存,就向数据库查找数据

c.数据查找成功并向redis写入数据缓存

下面是详细过程:

1.电脑安装redis并且启动redis的server,如下图window下成功启动redis

2.在pom中引入redis的client包

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

3  详细使用

a.@Cacheable配合@CacheEvict

@Cacheable写入缓存     @CacheEvict删除缓存

Controller类

@RestController
@RequestMapping("/cache")
public class CacheController {
    @Autowired
    private RedisDomainService redisDomainService;

    @GetMapping("/set")
    //当触发该请求,则删除cacheNames = "product",key = "123"下的缓存被清除,那么下次get就会重新生成缓存
    @CacheEvict(cacheNames = "product",key = "123")
    public RedisDomain set(@RequestParam(value="age") String age) {

        RedisDomain redisDomain1 = redisDomainService.findByName("tom");
        redisDomain1.setAge(age);
        redisDomainService.update(redisDomain1);
        return redisDomain1;
    }

    @GetMapping("/get")
    @Cacheable(cacheNames = "product",key = "123")
    public RedisDomainVO get() {
        RedisDomainVO redisDomainVO=new RedisDomainVO();
        redisDomainVO.setCode("200");
        redisDomainVO.setDiscrible("成功");
        redisDomainVO.setRedisDomainList( redisDomainService.findAll());
        return redisDomainVO;
    }
   
}

b.@CachePut配合@Cacheable

@CachePut每次都更新代码

@RestController
@RequestMapping("/cache")
public class CacheController {
    @Autowired
    private RedisDomainService redisDomainService;

    @GetMapping("/set")
    public RedisDomain set(@RequestParam(value="age") String age) {

        RedisDomain redisDomain1 = redisDomainService.findByName("tom");
        redisDomain1.setAge(age);
        redisDomainService.update(redisDomain1);
        return redisDomain1;
    }

   
    @GetMapping("/find")
    public RedisDomain find() {

        return redisDomainService.findByName("tom");
    }

}
@Service
//统一配置cacheNames
//@CacheConfig(cacheNames = "order")
public class RedisDomainServiceImpl  implements RedisDomainService{
    @Autowired
    private RedisDomainRepository redisDomainRepository;
    @Override
    //key不填默认为方法的形参
    @CachePut(cacheNames = "order",key = "123")
    public  RedisDomain update(RedisDomain redisDomain) {
       return redisDomainRepository.save(redisDomain);
    }


    @Cacheable(cacheNames = "order",key = "123")
    @Override
    public RedisDomain findByName(String name) {
        return redisDomainRepository.findTopByName(name);
    }
}
@Cacheable(cacheNames = "",key = " ",condition="",unless="")

cacheNames 是redis的数据库名

key是redis的key值,可以不写,默认是此注解修身方法的形参

condition可以对key做限制key = "#id",condition ="#id.length()>3" 

unless可以对返回值做条件限制 unless = "#result.getCode()==200"

@Cacheable(cacheNames = "product1",key = "#id",condition ="#id.length()>3" ,unless = "#result.getCode()==200")
public RedisDomainVO get1(@RequestParam(value = "id") String id) {
    RedisDomainVO redisDomainVO=new RedisDomainVO();
    redisDomainVO.setCode("200");
    redisDomainVO.setDiscrible("成功");
    redisDomainVO.setRedisDomainList( redisDomainService.findAll());
    return redisDomainVO;
}

详细代码可以去此处下载观看https://github.com/cz67998/cache_redis_demo

 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值