一、環境準備
在開始整合前,請確保已完成以下準備工作:
- 已安裝Redis服務(安裝指南)
- 創建好Spring Boot項目
二、添加依賴
在項目的pom.xml
中添加以下依賴:
<!-- 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>
</dependency>
三、配置Redis連接
在application.yml
中配置Redis連接信息:
spring:redis:host: 127.0.0.1 # Redis服務器地址port: 6379 # Redis服務器端口password: xxxx # Redis密碼(沒有密碼可不填)database: 0 # 使用的數據庫索引timeout: 5000 # 連接超時時間(毫秒)lettuce:pool:max-active: 8 # 連接池最大連接數max-idle: 8 # 連接池最大空閑連接數min-idle: 0 # 連接池最小空閑連接數max-wait: 1000ms # 獲取連接最大等待時間
四、Redis操作方式
Spring Boot提供了兩種主要的Redis操作模板:
1. StringRedisTemplate(推薦)
適用于字符串類型的鍵值操作:
@RestController
@RequestMapping("/redis")
public class RedisController {@Autowiredprivate StringRedisTemplate stringRedisTemplate;@GetMapping("/set")public String set(@RequestParam String key, @RequestParam String value) {stringRedisTemplate.opsForValue().set(key, value);return "Set success";}@GetMapping("/get")public String get(@RequestParam String key) {return stringRedisTemplate.opsForValue().get(key);}
}
2. RedisTemplate(對象存儲)
適用于存儲Java對象,需要配置序列化:
@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<Object, Object> template = new RedisTemplate<>();template.setConnectionFactory(factory);// 使用JSON序列化器GenericJackson2JsonRedisSerializer jsonSerializer = new GenericJackson2JsonRedisSerializer();// 設置序列化方式template.setKeySerializer(new StringRedisSerializer());template.setValueSerializer(jsonSerializer);template.setHashKeySerializer(new StringRedisSerializer());template.setHashValueSerializer(jsonSerializer);template.afterPropertiesSet();return template;}
}
使用示例:
@Service
public class RedisObjectService {@Autowiredprivate RedisTemplate<Object, Object> redisTemplate;public void saveObject(String key, Object value) {redisTemplate.opsForValue().set(key, value);}public Object getObject(String key) {return redisTemplate.opsForValue().get(key);}
}
五、Redis數據結構操作
1. 字符串(String)操作
// 設置值(帶過期時間)
stringRedisTemplate.opsForValue().set("key", "value", Duration.ofMinutes(10));// 獲取值
String value = stringRedisTemplate.opsForValue().get("key");// 刪除鍵
stringRedisTemplate.delete("key");// 檢查鍵是否存在
boolean exists = stringRedisTemplate.hasKey("key");
2. 列表(List)操作
// 左側推入元素
stringRedisTemplate.opsForList().leftPush("taskList", "task1");// 右側彈出元素
String task = stringRedisTemplate.opsForList().rightPop("taskList");// 獲取列表范圍
List<String> tasks = stringRedisTemplate.opsForList().range("taskList", 0, -1);
3. 集合(Set)操作
// 添加元素
stringRedisTemplate.opsForSet().add("mySet", "A", "B", "C");// 獲取所有元素
Set<String> members = stringRedisTemplate.opsForSet().members("mySet");// 檢查元素是否存在
boolean isMember = stringRedisTemplate.opsForSet().isMember("mySet", "A");
4. 哈希(Hash)操作
// 設置哈希字段
stringRedisTemplate.opsForHash().put("user:1001", "name", "Tom");// 獲取哈希字段
String name = (String) stringRedisTemplate.opsForHash().get("user:1001", "name");// 獲取所有字段
Map<Object, Object> user = stringRedisTemplate.opsForHash().entries("user:1001");
5. 有序集合(ZSet)操作
// 添加元素
stringRedisTemplate.opsForZSet().add("ranking", "Tom", 100);// 獲取排名
Set<String> topUsers = stringRedisTemplate.opsForZSet().range("ranking", 0, 2);// 獲取元素分數
Double score = stringRedisTemplate.opsForZSet().score("ranking", "Tom");
六、最佳實踐建議
- 連接池配置:根據應用并發量合理配置連接池參數
- 鍵命名規范:使用冒號分隔的命名空間(如
user:1001:profile
) - 序列化選擇:優先使用StringRedisTemplate處理字符串,復雜對象使用JSON序列化
- 異常處理:添加適當的異常處理邏輯
- 過期時間:為緩存數據設置合理的過期時間
通過以上配置和示例,您可以在Spring Boot項目中輕松集成Redis,實現高效的數據緩存和存儲功能。