文章目錄
- Redis高級功能使用說明
- 功能清單
- 1. 分布式鎖
- 1.1 功能描述
- 1.2 使用方法
- 1.3 測試接口
- 2. 消息發布訂閱
- 2.1 功能描述
- 2.2 使用方法
- 發布消息
- 訂閱消息
- 2.3 測試接口
- 3. 接口限流
- 3.1 功能描述
- 3.2 使用方法
- 方式一:直接使用工具類
- 方式二:使用注解(推薦)
- 3.3 測試接口
- 4. 排行榜實現
- 4.1 功能描述
- 4.2 使用方法
- 4.3 測試接口
- 5. 用戶行為分析
- 5.1 功能描述
- 5.2 使用方法
- 5.3 測試接口
- 6. 注意事項
- 7. 性能優化建議
Redis高級功能使用說明
本文檔介紹了系統中集成的Redis高級功能及其使用方法。
功能清單
- 分布式鎖
- 消息發布訂閱
- 接口限流
- 排行榜實現
- 多維度用戶行為分析
1. 分布式鎖
1.1 功能描述
分布式鎖用于在分布式環境中對共享資源進行同步訪問控制,防止多個服務實例同時操作同一資源導致的數據不一致問題。
1.2 使用方法
@Autowired
private RedisLockUtil lockUtil;public void doBusinessWithLock() {String lockKey = "業務唯一標識";String requestId = UUID.randomUUID().toString(); // 請求唯一標識boolean locked = lockUtil.tryLock(lockKey, requestId, 30); // 嘗試獲取鎖,30秒超時if (locked) {try {// 執行需要加鎖的業務邏輯doSomething();} finally {// 釋放鎖lockUtil.releaseLock(lockKey, requestId);}} else {// 獲取鎖失敗的處理邏輯}
}
1.3 測試接口
- GET
/redis/lock/test
- 測試分布式鎖功能
2. 消息發布訂閱
2.1 功能描述
消息發布訂閱用于實現應用內的事件通知和組件間通信,支持一對多的消息推送。
2.2 使用方法
發布消息
@Autowired
private RedisPubSubUtil pubSubUtil;// 發布消息
pubSubUtil.publish("channel:name", "消息內容");
訂閱消息
系統默認訂閱了"user:actions"頻道,訂閱邏輯在UserActionSubscriber
類中實現。
如需訂閱新的頻道,需要修改RedisPubSubConfig
配置類:
@Bean
public RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,MessageListenerAdapter myListenerAdapter) {RedisMessageListenerContainer container = new RedisMessageListenerContainer();container.setConnectionFactory(connectionFactory);// 添加新的訂閱container.addMessageListener(myListenerAdapter, new PatternTopic("my:channel"));return container;
}
2.3 測試接口
- POST
/redis/publish?channel=user:actions&message=test
- 發布測試消息
3. 接口限流
3.1 功能描述
接口限流用于防止API被惡意頻繁調用或突發流量沖擊,保護系統穩定性。
3.2 使用方法
方式一:直接使用工具類
@Autowired
private RedisRateLimiter rateLimiter;public void doSomething() {String key = "限流標識"; // 可以是接口名、用戶ID等boolean allowed = rateLimiter.isAllowed(key, 60, 100); // 60秒內最多允許100次請求if (allowed) {// 正常處理業務} else {// 觸發限流,拒絕請求throw new RuntimeException("請求過于頻繁");}
}
方式二:使用注解(推薦)
@RestController
public class MyController {@RateLimit(period = 60, count = 100, limitType = LimitType.IP)@GetMapping("/api/test")public Result test() {// 業務邏輯return Result.success();}
}
支持的限流類型:
- IP:根據客戶端IP限流
- USER:根據用戶ID限流(暫未實現用戶識別)
- INTERFACE:根據接口限流
3.3 測試接口
- GET
/redis/ratelimit/test?key=testKey
- 測試限流功能
4. 排行榜實現
4.1 功能描述
基于Redis的Sorted Set實現各種排行榜功能,如熱門用戶、熱門商品等。
4.2 使用方法
@Autowired
private RedisRankingUtil rankingUtil;// 添加或更新分數
rankingUtil.addScore("ranking:hot:products", productId, score);// 增加分數
rankingUtil.incrementScore("ranking:hot:products", productId, incrementScore);// 獲取排行榜前N名
List<Map<String, Object>> topN = rankingUtil.getTopN("ranking:hot:products", 10);// 獲取指定成員排名
Long rank = rankingUtil.getRank("ranking:hot:products", productId);// 獲取指定成員分數
Double score = rankingUtil.getScore("ranking:hot:products", productId);
4.3 測試接口
- GET
/redis/ranking/test
- 測試排行榜功能
5. 用戶行為分析
5.1 功能描述
記錄和分析用戶行為數據,如頁面訪問、點贊、評論等,實現用戶熱度統計和行為分析。
5.2 使用方法
@Autowired
private UserBehaviorAnalysisUtil behaviorUtil;// 記錄用戶被查看
behaviorUtil.recordUserView(userId, viewerId);// 記錄用戶行為
behaviorUtil.recordUserAction("like", targetId, userId);// 獲取用戶熱度
long dailyHeat = behaviorUtil.getUserDailyHeat(userId);
long monthlyHeat = behaviorUtil.getUserMonthlyHeat(userId);// 獲取熱門用戶排行
List<Map<String, Object>> hotUsers = behaviorUtil.getHotUsersRanking(10);// 獲取行為統計
Map<String, Long> stats = behaviorUtil.getDailyActionStats();
5.3 測試接口
- GET
/redis/behavior/view/{userId}?viewerId=1
- 記錄用戶被查看并返回熱度數據 - GET
/redis/behavior/stats
- 獲取行為統計數據
6. 注意事項
- Redis連接配置在application.yml中設置
- 大規模數據存儲時注意設置合理的過期時間,避免內存占用過大
- 分布式鎖使用時確保加鎖和解鎖操作都能正確執行,建議使用try-finally結構
- 限流策略需根據業務特點和系統承載能力合理設置
7. 性能優化建議
- 使用Redis連接池,合理配置最大連接數
- 批量操作使用Pipeline提高性能
- 使用合適的數據結構,避免不必要的數據轉換
- 定期清理過期數據,減輕Redis服務器負擔
- 對于高頻訪問的數據,考慮使用本地緩存進一步提升性能