有部分內容是常用的,為了避免每次都查詢數據庫,將部分數據存入Redis。
一、?下載并安裝 Redis
Windows 版的 Redis 官方已不再維護,你可以使用 微軟提供的 Redis for Windows 版本 或者 使用 WSL(Windows Subsystem for Linux)安裝 Redis。
-
下載 Redis for Windows
- 點擊這里下載 Redis for Windows(推薦下載
Redis-x64-3.2.100.msi
) - 下載完成后,進行安裝,安裝路徑建議:
C:\Redis\
- 點擊這里下載 Redis for Windows(推薦下載
-
解壓并進入 Redis 目錄
cd C:\Redis
-
啟動 Redis 服務器
redis-server.exe redis.windows.conf
-
驗證 Redis 是否啟動 打開另一個 命令行窗口(CMD),輸入:
redis-cli.exe ping
如果返回:
PONG
說明 Redis 服務器已成功啟動 🎉。
二、?配置 Redis
1. 添加 Redis 依賴
如果使用 Maven,在 pom.xml
添加:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
?? Spring Boot 2.0+ 默認使用 Lettuce,而不是 Jedis。如果要使用 Jedis,需要額外添加依賴
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId>
</dependency>
? 2. 配置 Redis 連接
在 application.yml
或 application.properties
配置 Redis 連接信息。
🔹 application.properties
?配置
#配置redis
spring.data.redis.host=127.0.0.1
spring.data.redis.port=6379
spring.data.redis.password=
spring.data.redis.database=0
spring.data.redis.timeout=5000ms
spring.data.redis.lettuce.pool.max-active=8
spring.data.redis.lettuce.pool.max-idle=8
spring.data.redis.lettuce.pool.min-idle=0
spring.data.redis.lettuce.pool.max-wait=-1ms
?? 注意:
host
:Redis 服務器地址port
:Redis 端口(默認 6379)password
:如果 Redis 沒有密碼,保持為空database
:選擇 Redis 數據庫(默認 0)timeout
:連接超時時間(5 秒)
? 3. 編寫 Redis 工具類
可以使用 RedisTemplate 來操作 Redis。
🔹 RedisConfig.java
創建一個 Redis 配置類,注入 RedisTemplate
:
@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();redisTemplate.setConnectionFactory(redisConnectionFactory);// 使用 String 序列化 key,避免亂碼redisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setHashKeySerializer(new StringRedisSerializer());return redisTemplate;}
}
? 4. 在 Service 中使用 Redis
你可以直接在 RedisService
中使用 RedisTemplate
提供的方法來存取數據。
🔹 (1) 操作字符串
Redis 的 opsForValue()
主要用于存取字符串數據:
@Service
public class RedisService {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;// 存儲字符串數據public void setString(String key, String value, long timeout) {redisTemplate.opsForValue().set(key, value, timeout, TimeUnit.SECONDS);}// 獲取字符串數據public String getString(String key) {return (String) redisTemplate.opsForValue().get(key);}// 刪除 Keypublic void deleteKey(String key) {redisTemplate.delete(key);}
}
? 2. 操作哈希表(Hash)
Redis 的 opsForHash()
適用于存儲對象、鍵值對等。
@Service
public class RedisHashService {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;// 設置 Hash 值public void setHash(String key, String field, String value) {redisTemplate.opsForHash().put(key, field, value);}// 獲取 Hash 值public Object getHash(String key, String field) {return redisTemplate.opsForHash().get(key, field);}// 獲取整個 Hash 對象public Map<Object, Object> getAllHash(String key) {return redisTemplate.opsForHash().entries(key);}// 刪除 Hash 字段public void deleteHashField(String key, String field) {redisTemplate.opsForHash().delete(key, field);}
}
示例
redisHashService.setHash("user:1001", "name", "Tom"); String name = redisHashService.getHash("user:1001", "name"); // "Tom"
? 3. 操作列表(List)
Redis opsForList()
適用于存儲列表數據(如消息隊列、排行榜等)。
@Service
public class RedisListService {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;// 左側推入列表public void leftPush(String key, String value) {redisTemplate.opsForList().leftPush(key, value);}// 右側推入列表public void rightPush(String key, String value) {redisTemplate.opsForList().rightPush(key, value);}// 獲取列表范圍public List<Object> getListRange(String key, long start, long end) {return redisTemplate.opsForList().range(key, start, end);}// 彈出左側元素public Object leftPop(String key) {return redisTemplate.opsForList().leftPop(key);}
}
示例
redisListService.leftPush("queue", "task1");
redisListService.leftPush("queue", "task2");
List<Object> tasks = redisListService.getListRange("queue", 0, -1); // ["task2", "task1"]
? 4. 操作集合(Set)
Redis opsForSet()
適用于存儲無序唯一集合(如標簽、好友列表等)。
@Service
public class RedisSetService {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;// 添加集合元素public void addToSet(String key, String value) {redisTemplate.opsForSet().add(key, value);}// 獲取集合中的所有元素public Set<Object> getSetMembers(String key) {return redisTemplate.opsForSet().members(key);}// 刪除集合中的某個元素public void removeFromSet(String key, String value) {redisTemplate.opsForSet().remove(key, value);}
}
示例
redisSetService.addToSet("users", "Alice");
redisSetService.addToSet("users", "Bob");
Set<Object> users = redisSetService.getSetMembers("users"); // ["Alice", "Bob"]
? 5. 在 Controller 中調用
你可以在 Controller 里調用 RedisService
來測試 Redis 的使用:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/redis")
public class RedisController {@Autowiredprivate RedisService redisService;// 存儲 Key-Value@PostMapping("/set")public String setKey(@RequestParam String key, @RequestParam String value) {redisService.setString(key, value, 3600);return "存儲成功";}// 獲取 Key 的值@GetMapping("/get")public String getKey(@RequestParam String key) {return redisService.getString(key);}// 刪除 Key@DeleteMapping("/delete")public String deleteKey(@RequestParam String key) {redisService.deleteKey(key);return "刪除成功";}
}