在當今分散式系統當道之下,隨著流量大量增長,對各種資源的使用也變得更加謹慎,當中DB就是一個容易成為效能瓶頸的地方。因此為了減少對DB的依賴、Cache的概念就隨之而生。
Spring Framework 本身有提供 @Cache 這個註解已執行簡單的Cache,但Spring Cache的資料只要服務重啟後就會消失,無法應對更加複雜的商業場景,所以後續有了Redis的出現。
如果我們想要在Spring中使用Redis,首先要引入依賴:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.12.0</version>
</dependency>
為了方便使用,建議註冊以下的Bean
@Bean
public LettuceConnectionFactory lettuceConnectionFactory() {
RedisStandaloneConfiguration config = new RedisStandaloneConfiguration();
config.setHostName("127.0.0.1");
config.setPort(6379); // Redis的預設埠號
config.setPassword(""); // 放Redis的密碼,這裡暫時沒有設定
config.setDatabase(0);
GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
poolConfig.setMaxWaitMillis(3000);
// 當連線取完時,欲取得連線的最大的等待時間,超出就是連線逾時
// Pool若是滿的狀況就會一直堵塞值到超出等待時間 JedisConnectionException
poolConfig.setMaxIdle(8); // 最大空閒連線數
poolConfig.setMinIdle(4); // 最小空閒連線數
poolConfig.setMaxTotal(3000); // 最大連線數
LettucePoolingClientConfiguration poolingClientConfig =
LettucePoolingClientConfiguration.builder()
.commandTimeout(Duration.ofMillis(3000))
.poolConfig(poolConfig)
.build();
return new LettuceConnectionFactory(config, poolingClientConfig);
}
@Bean
public RedisTemplate<String, String> redisTemplate() {
RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(lettuceConnectionFactory()); //建立與Redis的連接
redisTemplate.setDefaultSerializer(
new Jackson2JsonRedisSerializer<>(Object.class)); // 轉換Java物件格式與Redis儲存格式
redisTemplate.setEnableTransactionSupport(true); // 加入交易
redisTemplate.afterPropertiesSet(); // Bean設定完成後才初始化
return redisTemplate;
}
以下一一說明功能:
做好以上設定後,你就可以使用Redis進行資料的存取與讀寫了。
Redis 可以存取的類型共有五種,分別是:
針對Redis在各型別的讀寫如下:
// String 讀寫
redisTemplate.opsForValue().set(key, value);
redisTemplate.opsForValue().get(key);
// Hash 讀寫
redisTemplate.opsForHash().put(key, hashKey, value);
redisTemplate.opsForHash().get(key, hashKey);
// List
redisTemplate.opsForList().rightPush(key, value); // 在list尾端加入
redisTemplate.opsForList().leftPop(key); // 移除第一個List元素
// Set 讀寫
redisTemplate.opsForSet().add(key, value);
redisTemplate.opsForSet().members(key) // 獲取集合中的所有成員
// Sorted Set
redisTemplate.opsForZSet().add(key, value, score)
redisTemplate.opsForZSet().range(key, start, end)
以上就是今天的內容了,明天也會繼續講Redis 那麼明天見了。