Spring Cache使用RedisCache案例解析

 更新时间:2019年10月24日 08:26:25   作者:杨小格子  
这篇文章主要介绍了Spring Cache使用RedisCache案例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

一、RedisCache使用演示

Redis是一个key-value存储系统,在web应用上被广泛应用,这里就不对其过多描述了。

本章节示例是在Spring Boot集成Spring Cache的源码基础上进行改造。源码地址:https://github.com/imyanger/springboot-project/tree/master/p20-springboot-cache

使用RedisCache作为缓存,我们先引入相关依赖。

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--redis依赖-->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

然后SpringBoot配置文件中,对redis进行配置。

server:
 port: 10900

spring:
 profiles:
  active: dev
 redis:
  host: localhost #redis服务器地址
  port: 6379 #redis端口
  password: 1234 #redis密码
  timeout: 60000 #连接超时时间
  database: 0 #数据库索引,默认为0

SpringBoot中使用Redis,可以通过Spring Cache的注解,也可以使用RedisTemplate来实现,大部分情况下,因为注解存在一定局限性不够灵活,一般实际开发中都是使用的RedisTemplate。

附上CacheConfig注入RedisTemplate,如果不需要使用RedisTemplate,直接将@EnableCaching注解加在SpringBoot启动类上即可。

@Configuration
@EnableCaching
public class CacheConfig {

  @Bean
  public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
    RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
    redisTemplate.setConnectionFactory(connectionFactory);

    // 使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式)
    Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);

    ObjectMapper mapper = new ObjectMapper();
    mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
    mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
    serializer.setObjectMapper(mapper);

    redisTemplate.setValueSerializer(serializer);
    // 使用StringRedisSerializer来序列化和反序列化redis的key值
    redisTemplate.setKeySerializer(new StringRedisSerializer());
    redisTemplate.afterPropertiesSet();
    return redisTemplate;
  }
}

这样就可以开始使用RedisCache了,测试代码与Spring Boot集成Spring Cache一致。

CacheApi接口调用类,方便调用进行测试。

@RestController
@RequestMapping("cache")
public class CacheApi {

  @Autowired
  private CacheService cacheService;

  @GetMapping("get")
  public User get(@RequestParam int id){
    return cacheService.get(id);
  }

  @PostMapping("set")
  public User set(@RequestParam int id, @RequestParam String code, @RequestParam String name){
    User u = new User(code, name);
    return cacheService.set(id, u);
  }

  @DeleteMapping("del")
  public void del(@RequestParam int id){
    cacheService.del(id);
  }
  
}

CacheService缓存业务处理类,添加缓存,更新缓存和删除。

@Slf4j
@Service
public class CacheService {

  private Map<Integer, User> dataMap = new HashMap <Integer, User>(){
    {
      for (int i = 1; i < 100 ; i++) {
        User u = new User("code" + i, "name" + i);
        put(i, u);
      }
    }
   };

  // 获取数据
  @Cacheable(value = "cache", key = "'user:' + #id")
  public User get(int id){
    log.info("通过id{}查询获取", id);
    return dataMap.get(id);
  }

  // 更新数据
  @CachePut(value = "cache", key = "'user:' + #id")
  public User set(int id, User u){
    log.info("更新id{}数据", id);
    dataMap.put(id, u);
    return u;
   }

  //删除数据
  @CacheEvict(value = "cache", key = "'user:' + #id")
  public void del(int id){
    log.info("删除id{}数据", id);
    dataMap.remove(id);
  }
  
}

启动服务进行测试,可以看到缓存功能正常,且打开redis进行查看,也能看到对应的缓存数据。

源码地址:https://github.com/imyanger/springboot-project/tree/master/p21-springboot-cache-redis

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java多线程中的concurrent简析

    Java多线程中的concurrent简析

    这篇文章主要介绍了Java多线程中的concurrent简析,java.util.concurrent包提供了很多有用的类,方便我们进行并发程序的开发,本文将会挑选其中常用的一些类来进行大概的说明,需要的朋友可以参考下
    2023-09-09
  • 关于Spring @Transactional事务传播机制详解

    关于Spring @Transactional事务传播机制详解

    我们日常工作中极少使用事务传播级别,单纯只是使用事务和rollbackfor抛出异常来解决事务问题,但其实我们很多时候使用的是不正确的,或者说会造成事务粒度过大,本文详解一下事务传播级别,也让自己更好地处理事务问题,需要的朋友可以参考下
    2023-08-08
  • 基于Java的打包jar、war、ear包的作用与区别详解

    基于Java的打包jar、war、ear包的作用与区别详解

    本篇文章,小编为大家介绍,基于Java的打包jar、war、ear包的作用与区别详解。需要的朋友参考下
    2013-04-04
  • Java 配置加载机制详解及实例

    Java 配置加载机制详解及实例

    这篇文章主要介绍了Java 配置加载机制详解及实例的相关资料,需要的朋友可以参考下
    2016-09-09
  • java8中的lambda表达式,看这篇绝对够

    java8中的lambda表达式,看这篇绝对够

    这篇文章主要介绍了java8中的lambda表达式,看这篇绝对够!具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • java循环结构、数组的使用小结

    java循环结构、数组的使用小结

    这篇文章主要介绍了java循环结构、数组的使用小结,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • Spring Cloud Zipkin服务端追踪服务

    Spring Cloud Zipkin服务端追踪服务

    这篇文章主要介绍了Spring Cloud Zipkin服务端追踪服务,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • java、freemarker保留两位小数

    java、freemarker保留两位小数

    这篇文章主要介绍了 java、freemarker保留两位小数的实现方法,然后给大家补充介绍了freemarker保留两位小数的详解,需要的朋友可以参考下
    2017-03-03
  • Java中Caffeine本地缓存项目实例

    Java中Caffeine本地缓存项目实例

    这篇文章主要介绍了Java中Caffeine本地缓存项目实例,Caffeine是一个高性能Java 缓存库,使用Java8对Guava缓存重写版本,在Spring Boot 2.0中将取代Guava,使用spring.cache.cache-names属性可以在启动时创建缓存,需要的朋友可以参考下
    2023-10-10
  • ActiveMQ结合Spring收发消息的示例代码

    ActiveMQ结合Spring收发消息的示例代码

    这篇文章主要介绍了ActiveMQ结合Spring收发消息的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10

最新评论