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
    评论
Spring Boot整合MyBatis-Plus和Redis可以通过以下步骤实现: 1. 添加依赖:在pom.xml文件中添加Spring Boot、MyBatis-Plus和Redis的依赖。 ```xml <!-- Spring Boot --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- MyBatis-Plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>${mybatis-plus.version}</version> </dependency> <!-- Redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> ``` 2. 配置数据源:在application.properties或application.yml中配置数据库连接信息。 ```properties spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase spring.datasource.username=root spring.datasource.password=123456 ``` 3. 配置MyBatis-Plus:创建一个配置类,使用@MapperScan注解指定Mapper接口的扫描路径。 ```java @Configuration @MapperScan("com.example.mapper") public class MybatisPlusConfig { @Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); } } ``` 4. 创建实体类和Mapper接口:创建实体类和对应的Mapper接口,使用注解进行映射。 ```java @Data @TableName("user") public class User { @TableId(type = IdType.AUTO) private Long id; private String name; } ``` ```java @Mapper public interface UserMapper extends BaseMapper<User> { } ``` 5. 添加Redis配置:在application.properties或application.yml中配置Redis连接信息。 ```properties spring.redis.host=localhost spring.redis.port=6379 ``` 6. 编写业务逻辑:创建Service类,注入Mapper和RedisTemplate,并编写业务逻辑。 ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Autowired private RedisTemplate<String, Object> redisTemplate; @Override public User getUserById(Long id) { // 先从缓存中获取数据 String key = "user:" + id; User user = (User) redisTemplate.opsForValue().get(key); // 如果缓存中不存在,则从数据库中获取数据 if (user == null) { user = userMapper.selectById(id); // 将数据存入缓存 redisTemplate.opsForValue().set(key, user); } return user; } } ``` 这样,你就成功地将Spring Boot、MyBatis-Plus和Redis进行了整合。通过MyBatis-Plus进行数据库操作,并通过Redis进行缓存,提高系统性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值