前言
之前已經寫過一篇文章介紹SpringBoot整合Spring Cache,SpringBoot默認使用的是ConcurrentMapCacheManager,在實際項目中,我們需要一個高可用的、分布式的緩存解決方案,使用默認的這種緩存方式,只是在當前進程里緩存了而已。Spring Cache整合Redis來實現緩存,其實也不是一件復雜的事情,下面就開始吧。
關於Spring Cache的運用,請參考[快學SpringBoot]快速上手好用方便的Spring Cache緩存框架
新建一個SpringBoot項目
依賴
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
</dependencies>
主要是最下面兩個依賴: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<Object> jsonSerializer = new GenericJackson2JsonRedisSerializer();
RedisSerializationContext.SerializationPair<Object> pair = RedisSerializationContext.SerializationPair
.fromSerializer(jsonSerializer);
RedisCacheConfiguration defaultCacheConfig=RedisCacheConfiguration.defaultCacheConfig()
.serializeValuesWith(pair);
return new RedisCacheManager(redisCacheWriter, defaultCacheConfig);
}
}
如果要設置緩存管理器所管理的緩存名字,RedisCacheManager構造方法提供一個可變參數的構造器:
測試
新建一個MockService.java,代碼如下:
@Service
public class MockService {
/**
* value 緩存的名字,與cacheName是一個東西
* key 需要緩存的鍵,如果為空,則會根據參數自動拼接
* 寫法:SpEL 表達式
*/
@Cacheable(value = "listUsers", key = "#username")
public List<String> 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);
}
}
請求接口:
Redis中的數據:
原創聲明
本文發布於掘金號【Happyjava】。Happy的掘金地址:https://juejin.im/user/5cc2895df265da03a630ddca,Happy的個人博客:http://blog.happyjava.cn。歡迎轉載,但須保留此段聲明。
關注公眾號領資料
搜索公眾號【Happyjava】,回復【電子書】和【視頻】,即可獲取大量優質電子書和大數據、kafka、nginx、MySQL等視頻資料