redis功能清單

文章目錄

  • 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. 分布式鎖
  2. 消息發布訂閱
  3. 接口限流
  4. 排行榜實現
  5. 多維度用戶行為分析

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. 注意事項

  1. Redis連接配置在application.yml中設置
  2. 大規模數據存儲時注意設置合理的過期時間,避免內存占用過大
  3. 分布式鎖使用時確保加鎖和解鎖操作都能正確執行,建議使用try-finally結構
  4. 限流策略需根據業務特點和系統承載能力合理設置

7. 性能優化建議

  1. 使用Redis連接池,合理配置最大連接數
  2. 批量操作使用Pipeline提高性能
  3. 使用合適的數據結構,避免不必要的數據轉換
  4. 定期清理過期數據,減輕Redis服務器負擔
  5. 對于高頻訪問的數據,考慮使用本地緩存進一步提升性能

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/906811.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/906811.shtml
英文地址,請注明出處:http://en.pswp.cn/news/906811.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

從代碼學習深度學習 - 預訓練word2vec PyTorch版

文章目錄 前言輔助工具1. 繪圖工具 (`utils_for_huitu.py`)2. 數據處理工具 (`utils_for_data.py`)3. 訓練輔助工具 (`utils_for_train.py`)預訓練 Word2Vec - 主流程1. 環境設置與數據加載2. 跳元模型 (Skip-gram Model)2.1. 嵌入層 (Embedding Layer)2.2. 定義前向傳播3. 訓練…

Python實現對大批量Word文檔進行自動添加頁碼(16)

前言 本文是該專欄的第16篇,后面會持續分享Python辦公自動化干貨知識,記得關注。 在處理word文檔的時候,相信或多或少都遇到過這樣的需求——需要對“目標word文檔,自動添加頁碼”。 換言之,如果有大批量的word文檔文件需要你添加頁碼,這個時候最聰明的辦法就是使用“程…

云原生安全:Linux命令行操作全解析

&#x1f525;「炎碼工坊」技術彈藥已裝填&#xff01; 點擊關注 → 解鎖工業級干貨【工具實測|項目避坑|源碼燃燒指南】 ——從基礎概念到安全實踐的完整指南 一、基礎概念 1. Shell與終端交互 Shell是Linux命令行的解釋器&#xff08;如Bash、Zsh&#xff09;&#xff0c;負…

Day 34

GPU訓練 要讓模型在 GPU 上訓練&#xff0c;主要是將模型和數據遷移到 GPU 設備上。 在 PyTorch 里&#xff0c;.to(device) 方法的作用是把張量或者模型轉移到指定的計算設備&#xff08;像 CPU 或者 GPU&#xff09;上。 對于張量&#xff08;Tensor&#xff09;&#xff1…

C++筆試題(金山科技新未來訓練營):

題目分布&#xff1a; 17道單選&#xff08;每題3分&#xff09;3道多選題&#xff08;全對3分&#xff0c;部分對1分&#xff09;2道編程題&#xff08;每一道20分&#xff09;。 不過題目太多&#xff0c;就記得一部分了&#xff1a; 單選題&#xff1a; static變量的初始…

Spark(29)基礎自定義分區器

&#xff08;一&#xff09;什么是分區 【復習提問&#xff1a;RDD的定義是什么&#xff1f;】 在 Spark 里&#xff0c;彈性分布式數據集&#xff08;RDD&#xff09;是核心的數據抽象&#xff0c;它是不可變的、可分區的、里面的元素并行計算的集合。 在 Spark 中&#xf…

python打卡訓練營打卡記錄day35

知識點回顧&#xff1a; 三種不同的模型可視化方法&#xff1a;推薦torchinfo打印summary權重分布可視化進度條功能&#xff1a;手動和自動寫法&#xff0c;讓打印結果更加美觀推理的寫法&#xff1a;評估模式 作業&#xff1a;調整模型定義時的超參數&#xff0c;對比下效果 1…

【MySQL】07.表內容的操作

1. insert 我們先創建一個表結構&#xff0c;這部分操作我們使用這張表完成我們的操作&#xff1a; mysql> create table student(-> id int primary key auto_increment,-> name varchar(20) not null,-> qq varchar(20) unique-> ); Query OK, 0 rows affec…

使用SQLite Expert個人版VACUUM功能修復數據庫

使用SQLite Expert個人版VACUUM功能修復數據庫 一、SQLite Expert工具簡介 SQLite Expert 是一款功能強大的SQLite數據庫管理工具&#xff0c;分為免費的個人版&#xff08;Personal Edition&#xff09;和收費的專業版&#xff08;Professional Edition&#xff09;。其核心功…

LM-BFF——語言模型微調新范式

gpt3&#xff08;GPT3——少樣本示例推動下的通用語言模型雛形)結合提示詞和少樣本示例后&#xff0c;展示出了強大性能。但大語言模型的訓練門檻太高&#xff0c;普通研究人員無力&#xff0c;LM-BFF(Making Pre-trained Language Models Better Few-shot Learners)的作者受gp…

遙感解譯項目Land-Cover-Semantic-Segmentation-PyTorch之二訓練模型

遙感解譯項目Land-Cover-Semantic-Segmentation-PyTorch之一推理模型 背景 上一篇文章了解了這個項目的環境安裝和模型推理,這篇文章介紹下如何訓練這個模型,添加類別 下載數據集 在之前的一篇文章中,也有用到這個數據集 QGIS之三十六Deepness插件實現AI遙感訓練模型 數…

【NLP 71、常見大模型的模型結構對比】

三到五年的深耕&#xff0c;足夠讓你成為一個你想成為的人 —— 25.5.8 模型名稱位置編碼Transformer結構多頭機制Feed Forward層設計歸一化層設計線性層偏置項激活函數訓練數據規模及來源參數量應用場景側重GPT-5 (OpenAI)RoPE動態相對編碼混合專家架構&#xff08;MoE&#…

[250521] DBeaver 25.0.5 發布:SQL 編輯器、導航器全面升級,新增 Kingbase 支持!

目錄 DBeaver 25.0.5 發布&#xff1a;SQL 編輯器、導航器全面升級&#xff0c;新增 Kingbase 支持&#xff01; DBeaver 25.0.5 發布&#xff1a;SQL 編輯器、導航器全面升級&#xff0c;新增 Kingbase 支持&#xff01; 近日&#xff0c;DBeaver 發布了 25.0.5 版本&#xf…

服務器硬盤虛擬卷的處理

目前的情況是需要刪除邏輯卷&#xff0c;然后再重新來弄一遍。 數據已經備份好了&#xff0c;所以不用擔心數據會丟失。 查看服務器的具體情況 使用 vgdisplay 操作查看服務器的卷組情況&#xff1a; --- Volume group ---VG Name vg01System IDFormat …

Flutter 中 build 方法為何寫在 StatefulWidget 的 State 類中

Flutter 中 build 方法為何寫在 StatefulWidget 的 State 類中 在 Flutter 中&#xff0c;build 方法被設計在 StatefulWidget 的 State 類中而非 StatefulWidget 類本身&#xff0c;這種設計基于幾個重要的架構原則和實際考量&#xff1a; 1. 核心設計原因 1.1 生命周期管理…

傳統醫療系統文檔集中標準化存儲和AI智能化更新路徑分析

引言 隨著醫療數智化建設的深入推進&#xff0c;傳統醫療系統如醫院信息系統(HIS)、臨床信息系統(CIS)、護理信息系統(NIS)、影像歸檔與通信系統(PACS)和實驗室信息系統(LIS)已經成為了現代醫療機構不可或缺的技術基礎設施。這些系統各自承擔著不同的功能&#xff0c;共同支撐…

探索常識性概念圖譜:構建智能生活的知識橋梁

目錄 一、知識圖譜背景介紹 &#xff08;一&#xff09;基本背景 &#xff08;二&#xff09;與NLP的關系 &#xff08;三&#xff09;常識性概念圖譜的引入對比 二、常識性概念圖譜介紹 &#xff08;一&#xff09;常識性概念圖譜關系圖示例 &#xff08;二&#xff09…

Linux/aarch64架構下安裝Python的Orekit開發環境

1.背景 國產化趨勢越來越強&#xff0c;從軟件到硬件&#xff0c;從操作系統到CPU&#xff0c;甚至顯卡&#xff0c;就產生了在國產ARM CPU和Kylin系統下部署Orekit的需求&#xff0c;且之前的開發是基于Python的&#xff0c;需要做適配。 2.X86架構下安裝Python/Orekit開發環…

Ctrl+鼠標滾動阻止頁面放大/縮小

項目場景&#xff1a; 提示&#xff1a;這里簡述項目相關背景&#xff1a; 一般在我們做大屏的時候&#xff0c;不希望Ctrl鼠標上下滾動的時候頁面會放大/縮小&#xff0c;那么在有時候&#xff0c;又不希望影響到別的頁面&#xff0c;比如說這個大屏是在另一個管理后臺中&am…

MySQL——復合查詢表的內外連

目錄 復合查詢 回顧基本查詢 多表查詢 自連接 子查詢 where 字句中使用子查詢 單行子查詢 多行子查詢 多列子查詢 from 字句中使用子查詢 合并查詢 實戰OJ 查找所有員工入職時候的薪水情況 獲取所有非manager的員工emp_no 獲取所有員工當前的manager 表的內外…