閘機控制系統從設計到實現全解析:第 4 篇:Redis 緩存與分布式鎖實現

第 4 篇:Redis 緩存與分布式鎖實現

一、Redis 在系統中的核心作用

在這里插入圖片描述

  1. 票證信息緩存:將高頻訪問的票證數據(如狀態、有效期)緩存至 Redis,減少數據庫查詢,提升驗證響應速度。

  2. 分布式鎖:在高并發場景下,防止同一張票被同時驗證,確保 “一票一次” 機制的可靠性。

  3. 閘機狀態緩存:實時存儲閘機開關狀態,便于前端監控與管理。

二、Redis 集成步驟
  1. 安裝 StackExchange.Redis
dotnet add package StackExchange.Redis
  1. 注冊 Redis 服務:在 Program.cs 中配置連接:
builder.Services.AddSingleton\<IConnectionMultiplexer>(ConnectionMultiplexer.Connect(builder.Configuration.GetConnectionString("Redis")));
  1. 封裝 Redis 操作工具類
public class RedisHelper{private readonly IDatabase _db;public RedisHelper(IConnectionMultiplexer redis){_db = redis.GetDatabase();}// 設置緩存(帶過期時間)public async Task SetAsync(string key, string value, TimeSpan? expiry = null){await _db.StringSetAsync(key, value, expiry);}// 獲取緩存public async Task<string> GetAsync(string key){return await _db.StringGetAsync(key);}}
三、分布式鎖實現

分布式鎖核心特性

  • 互斥性:同一時間只有一個節點能獲取鎖。
  • 安全性:避免死鎖(鎖必須有過期時間),不能誤刪他人的鎖。
  • 可用性:Redis 故障時仍能基本可用(如主從切換)。
  • 重入性:同一線程可重復獲取鎖(可選,視場景而定)。
public class RedisDistributedLock{private readonly IDatabase _db;private readonly string _lockPrefix = "lock:";public RedisDistributedLock(IConnectionMultiplexer redis){_db = redis.GetDatabase();}// 獲取鎖(返回鎖標識,用于釋放)public async Task<string> AcquireLockAsync(string resource, TimeSpan expiry){var lockKey = _lockPrefix + resource;var lockValue = Guid.NewGuid().ToString(); // 唯一標識,防止誤釋放// SET NX(不存在則設置)+ PX(過期時間)var acquired = await _db.StringSetAsync(lockKey, lockValue, expiry, When.NotExists);return acquired ? lockValue : null;}// 釋放鎖(Lua腳本保證原子性)public async Task ReleaseLockAsync(string resource, string lockValue){var lockKey = _lockPrefix + resource;var script = @"if redis.call('get', KEYS\[1]) == ARGV\[1] thenreturn redis.call('del', KEYS\[1])elsereturn 0end";await _db.ScriptEvaluateAsync(script, new RedisKey\[] { lockKey },new RedisValue[] { lockValue });}}

c

  • 緩存更新:票證狀態變更(如使用后)時,同步更新 Redis 緩存。

  • 過期時間:票證緩存設置與票證有效期關聯,避免緩存冗余。

  • 緩存穿透防護:對不存在的票證,緩存空值(短期過期),減少無效數據庫查詢。

五、緩存常見問題
問題描述解決方案
緩存穿透查詢不存在的數據,穿透到DB1. 緩存空值(短期過期);2. 布隆過濾器預過濾不存在的key
緩存擊穿熱點key過期瞬間大量請求DB1. 互斥鎖(查詢時加鎖,只讓一個線程更新緩存);2. 熱點key永不過期
緩存雪崩大量key同時過期,請求壓垮DB1. 過期時間加隨機值(分散過期);2. 服務熔斷/降級;3. 緩存集群高可用

六、注意事項

  1. Redis 部署方式

    • 單機部署:鎖性能高,但存在單點故障風險。
    • 主從+哨兵:提高可用性,但主從切換時可能出現“鎖丟失”(可通過 Redisson 的 RedLock 算法緩解,但性能有損耗)。
  2. 鎖超時處理

    • 鎖過期時間需大于業務執行時間,避免業務未完成鎖已釋放。
    • 可使用“鎖續期”機制(如 Redisson 的 Watch Dog),自動延長鎖有效期。
  3. 緩存與鎖的結合

    • 緩存更新時需加鎖避免并發問題(如緩存擊穿場景)。
    • 分布式鎖的粒度應盡量小,避免影響性能。
總結
  • Redis 緩存:通過合理的緩存策略(如 Cache-Aside)和問題解決方案,可顯著提升系統性能。
  • 分布式鎖:基于 Redis 的 SET NX PX 命令可實現基礎鎖,生產環境推薦使用 Redisson 簡化開發并避免潛在問題。

兩者結合可有效解決分布式系統中的性能與并發安全問題。

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

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

相關文章

北京天津唐山廊坊滄州打撈日記

北京天津唐山廊坊滄州打撈日記 打撈搜蚯蚓疏通 北京&#xff1a;護城河畔的情誼打撈 清晨&#xff0c;北京的護城河在朝陽的映照下泛著微光。我接到一位年輕小伙的電話&#xff0c;聲音中滿是焦急。原來&#xff0c;他與女友在河邊約會時&#xff0c;不小心將女友送他的定情玉佩…

全志刷機工具:PhoenixSuit-全志芯片處理器-刷機工具安裝包及最詳細使用教程指南

全志刷機工具&#xff1a;PhoenixSuit-全志芯片處理器刷機工具安裝包及最詳細使用教程指南&#xff0c;此文章主要是分享機頂盒、電視盒子&#xff0c;全志芯片盒子&#xff08;其中包含全志處理器、全志芯片、全志CPU等等&#xff09;的刷機工具、刷機工具安裝教程以及如何使用…

淺談 VM 橋接模式:讓虛擬機像真實電腦一樣接入網絡

在虛擬化環境中&#xff0c;虛擬機&#xff08;Virtual Machine, VM&#xff09;與外部網絡之間的通信方式有多種&#xff0c;比如 NAT 模式、Host-Only 模式、橋接模式&#xff08;Bridged Networking&#xff09; 等。其中&#xff0c;橋接模式是最接近“真實物理機”網絡行為…

計算機視覺(1)-圖像采集設備選型全景表(工業 + 醫療 + 車載)

圖像采集設備選型全景表&#xff08;工業 醫療 車載&#xff09;一份面向工程師的“場景—設備—協議”速查表1 工業 & 醫療 & 通用場景應用場景主流設備形態接口 / 協議典型性能突出優勢致命短板動態范圍工業檢測AOI / 量測 / 缺陷工業相機 采集卡Camera Link HSCo…

計算機視覺(3)深度學習模型部署平臺技術選型與全棧實踐指南

一、部署平臺概述與分類 深度學習模型部署平臺的分類需兼顧技術特性與應用場景的適配性&#xff0c;基于“技術定位-場景適配”雙維度分類法&#xff0c;可將其劃分為通用開源框架、云廠商服務及專用邊緣工具三大類&#xff0c;各類別在設計目標、核心能力與場景覆蓋上呈現顯著…

Scratch編程:槍戰游戲(附源碼)

&#x1f3ae; 操作說明 W / A / S / D 或 方向鍵&#xff1a;移動 C&#xff1a;滑鏟 空格鍵&#xff1a;取消滑鏟 鼠標點擊&#xff1a;開火 數字鍵 1 / 2 / 3 / 4&#xff1a;切換武器 G&#xff1a;快速使用道具 F&#xff1a;近戰攻擊 Q&#xff1a;瞄準 / 使用技能…

應急響應復現

一、前言&#xff1a;當企業發生黑客入侵、系統崩潰或其它影響業務正常運行的安全事件時&#xff0c;急需第一時間進行處理&#xff0c;使企業的網絡信息系統在最短時間內恢復正常工作&#xff0c;進一步查找入侵來源&#xff0c;還原入侵事故過程&#xff0c;同時給出解決方案…

分布式事務Seata TCC模式篇

介紹 ? 官網: https://seata.apache.org/zh-cn/docs/user/mode/tcc ? 回顧Seata AT 模式基于 支持本地 ACID 事務 的 關系型數據庫&#xff0c;如下&#xff1a; 一階段 prepare 行為&#xff1a;在本地事務中&#xff0c;一并提交業務數據更新和相應回滾日志記錄。二階段 c…

Day37--動態規劃--52. 攜帶研究材料(卡碼網),518. 零錢兌換 II,377. 組合總和 Ⅳ,57. 爬樓梯(卡碼網)

Day37–動態規劃–52. 攜帶研究材料&#xff08;卡碼網&#xff09;&#xff0c;518. 零錢兌換 II&#xff0c;377. 組合總和 Ⅳ&#xff0c;57. 爬樓梯&#xff08;卡碼網&#xff09; 本文全部都是 ” 完全背包 “ 問題&#xff0c;從零到入坑&#xff0c;從入坑到爬出來。 本…

Linux文件操作

Linux文件Linux下的文件類型b 塊設備文件---->存儲類設備&#xff08;硬盤&#xff09;c 字符設備文件--->輸入輸出設備d 目錄文件--->文件夾- 普通文件--> xxx.c xxx.h xxx.txt xxx.jpg xxx.mp4 a.outl 軟鏈接文件-->快捷方式s 套接字文件-->網絡通信p 管道…

Linux epoll 觸發模式詳解:LT vs ET

兩種核心觸發模式 1. 水平觸發 (Level-Triggered, LT) 工作方式: 當文件描述符處于就緒狀態時,epoll 會持續通知 只要狀態未改變,每次調用 epoll_wait 都會返回該描述符 特點: c // 內核處理邏輯 (ep_send_events_proc) if (!(epi->event.events & EPOLLET)) { /…

STM32學習筆記6-TIM-2輸出比較功能

第二部分&#xff0c;定時器的輸出比較功能OC&#xff08;Output Compare&#xff09;輸出比較輸出比較可以通過比較CNT與CCR寄存器值的關系&#xff0c;來對輸出電平進行置1、置0或翻轉的操作&#xff0c;用于輸出一定頻率和占空比的PWM波形每個高級定時器和通用定時器都擁有4…

MATLAB核心技巧:從入門到精通

一 1.數值 顯示 格式 format style 設置 eg: pi format longE; or 2.清除指令 clc 清除命令行窗口 clear 清除工作區 cls 3.搜索路徑設置 path(path,E:\ads\) or addpath 4.M文件 用戶把要實現的命令寫在一個以.m為擴展的文件中&#xff0c;然后由matlab系統進行解讀…

AnyDesk遠程工具免費版,v9.5.110綠色便攜版,秒連遠程桌面,剪貼板同步超實用

[軟件名稱]: AnyDesk遠程工具免費版 [軟件大小]: 7.5 MB [軟件大小]: 夸克網盤 | 百度網盤 軟件介紹 AnyDesk 讓遠程工作變得輕而易舉。無論您身處辦公室的另一端還是世界的另一側&#xff0c;只需在設備上下載、安裝并啟動 AnyDesk.exe&#xff0c;即可輕松訪問遠程屏幕。…

AI: 給Gemini CLI配上“說明書”, 精通的GEMINI.md項目記憶

嘿&#xff0c;各位技術同好&#xff01;今天我們來聊一個能極大提升AI編程助手效率的酷炫功能——Google Gemini CLI 中的 GEMINI.md 文件。 在日常開發中&#xff0c;我們越來越依賴像 Gemini 這樣的 AI 助手來幫我們寫代碼、調試 Bug 甚至重構項目。但大家是否遇到過這種情況…

[激光原理與應用-205]:光學器件 - LD與DFB的比較

一、相同點核心原理均基于半導體材料的受激輻射機制&#xff0c;通過電子-空穴復合產生光子。依賴諧振腔實現光反饋與放大&#xff0c;形成激光振蕩。采用電泵浦方式驅動&#xff0c;電流注入激發載流子&#xff0c;實現粒子數反轉。材料體系主要使用III-V族化合物半導體&#…

Cursor手機版:一半是神,一半是坑

大家好&#xff0c;我是羊仔&#xff0c;專注AI工具、智能體、編程。今天想和大家聊的這個工具&#xff0c;叫Cursor&#xff0c;可能很多朋友已經不陌生了&#xff0c;它作為一款AI原生代碼編輯器&#xff0c;之前可謂是風光無兩。但最近&#xff0c;它又搞了點新花樣&#xf…

康養休閑旅游服務虛擬仿真實訓室:筑牢技能人才培養的數字基石

隨著康養休閑旅游行業數字化、網絡化、智能化發展趨勢的深化&#xff0c;行業對高素質技能人才的實踐能力和數字素養提出了更高要求。康養休閑旅游服務虛擬仿真實訓室作為對接行業需求、創新實踐教學模式的重要載體&#xff0c;正成為中等職業教育康養休閑旅游服務專業人才培養…

【Python 高頻 API 速學 ⑤】

一、為什么把字典和集合放同一篇&#xff1f; ? 底層都是哈希表&#xff0c;API 設計高度對稱。 ? 日常任務無非「讀-寫-去重-集合運算」&#xff0c;這 5 個方法就能打穿。二、三件套 & 二板斧一覽名稱作用返回值原地&#xff1f;dict.get(key, default)安全讀取值或 de…

el-tree方法的整理

1.點擊樹的文字不要收縮僅點擊圖標的時候收縮 expand-on-click-node&#xff1a;是否在點擊節點的時候展開或者收縮節點&#xff0c; 默認值為 true&#xff0c;如果為 false&#xff0c;則只有點箭頭圖標的時候才會展開或者收縮節點。<el-tree:expand-on-click-node"f…