【快学SpringBoot】Spring Cache+Redis实现高可用缓存解决方案

前言

之前已经写过一篇文章介绍SpringBoot整合Spring Cache,SpringBoot默认使用的是ConcurrentMapCacheManager,在实际项目中,我们需要一个高可用的、分布式的缓存解决方案,使用默认的这种缓存方式,只是在当前进程里缓存了而已。Spring Cache整合Redis来实现缓存,其实也不是一件复杂的事情,下面就开始吧。

关于Spring Cache的运用,请参考[快学SpringBoot]快速上手好用方便的Spring Cache缓存框架

新建一个SpringBoot项目

依赖


    
        org.springframework.boot
        spring-boot-starter-web
    

    
        org.springframework.boot
        spring-boot-devtools
        runtime
        true
    
    
        org.springframework.boot
        spring-boot-configuration-processor
        true
    
    
        org.projectlombok
        lombok
        true
    
    
        org.springframework.boot
        spring-boot-starter-test
        test
    
    
        org.springframework.boot
        spring-boot-starter-cache
    
    
        org.springframework.boot
        spring-boot-starter-data-redis
    

主要是最下面两个依赖:spring-boot-starter-cache 和 spring-boot-starter-data-redis。

配置Redis

在application.properties中添加redis的配置

spring.redis.host=127.0.0.1
# spring.redis.password=
spring.redis.port=6379

这是最基础的三个配置(其实默认值就是这样,就算不写也可以)。当然,还有空闲连接数,超时时间,最大连接数等参数,我这里都没有设置,在生产项目中,根据实际情况设置。

RedisCacheConfig

新建RedisCacheConfig.class

@Configuration
@EnableCaching
public class RedisCacheConfig {

    /**
     * 缓存管理器
     */
    @Bean
    public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
        //初始化一个RedisCacheWriter
        RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory);
        //设置CacheManager的值序列化方式为json序列化
        RedisSerializer jsonSerializer = new GenericJackson2JsonRedisSerializer();
        RedisSerializationContext.SerializationPair pair = RedisSerializationContext.SerializationPair
                .fromSerializer(jsonSerializer);
        RedisCacheConfiguration defaultCacheConfig=RedisCacheConfiguration.defaultCacheConfig()
                .serializeValuesWith(pair);
        return new RedisCacheManager(redisCacheWriter, defaultCacheConfig);
    }

}
 
 

如果要设置缓存管理器所管理的缓存名字,RedisCacheManager构造方法提供一个可变参数的构造器:

【快学SpringBoot】Spring Cache+Redis实现高可用缓存解决方案_第1张图片
image

测试

新建一个MockService.java,代码如下:

@Service
public class MockService {

    /**
     * value 缓存的名字,与cacheName是一个东西
     * key 需要缓存的键,如果为空,则会根据参数自动拼接
     * 写法:SpEL 表达式
     */
    @Cacheable(value = "listUsers", key = "#username")
    public List listUsers(String username) {
        System.out.println("执行了listUsers方法");
        return Arrays.asList("Happyjava", "Hello-SpringBoot", System.currentTimeMillis() + "");
    }

}

新建一个TestController.java,代码如下:

@RestController
public class TestController {

    private final MockService mockService;

    public TestController(MockService mockService) {
        this.mockService = mockService;
    }

    @GetMapping(value = "/listUsers")
    public Object listUsers(String username) {
        return mockService.listUsers(username);
    }

}

请求接口:

【快学SpringBoot】Spring Cache+Redis实现高可用缓存解决方案_第2张图片
image

Redis中的数据:

【快学SpringBoot】Spring Cache+Redis实现高可用缓存解决方案_第3张图片
image

原创声明

本文发布于掘金号【Happyjava】。Happy的掘金地址:https://juejin.im/user/5cc2895df265da03a630ddca,Happy的个人博客:http://blog.happyjava.cn。欢迎转载,但须保留此段声明。

关注公众号领资料

搜索公众号【Happyjava】,回复【电子书】和【视频】,即可获取大量优质电子书和大数据、kafka、nginx、MySQL等视频资料

【快学SpringBoot】Spring Cache+Redis实现高可用缓存解决方案_第4张图片
关注Happyjava公众号

你可能感兴趣的:(【快学SpringBoot】Spring Cache+Redis实现高可用缓存解决方案)