### **如何解決redis的并發競爭key問題**
分析:這個問題大致就是,同時有多個子系統去set一個key。這個時候要注意什么呢?大家思考過么。需要說明一下,博主提前百度了一下,發現答案基本都是推薦用redis事務機制。博主不推薦使用redis的事務機制。因為我們的生產環境,基本都是redis集群環境,做了數據分片操作。你一個事務中有涉及到多個key操作的時候,這多個key不一定都存儲在同一個redis-server上。因此,redis的事務機制,十分雞肋。
回答:如下所示
(1)如果對這個key操作,不要求順序
這種情況下,準備一個分布式鎖,大家去搶鎖,搶到鎖就做set操作即可,比較簡單。
(2)如果對這個key操作,要求順序
假設有一個key1,系統A需要將key1設置為valueA,系統B需要將key1設置為valueB,系統C需要將key1設置為valueC.
期望按照key1的value值按照 valueA–>valueB–>valueC的順序變化。這種時候我們在數據寫入數據庫的時候,需要保存一個時間戳。假設時間戳如下
> 系統A?key?1?{valueA??3:00}
>
> 系統B?key?1?{valueB??3:05}
>
> 系統C?key?1?{valueC??3:10}
那么,假設這會系統B先搶到鎖,將key1設置為{valueB 3:05}。接下來系統A搶到鎖,發現自己的valueA的時間戳早于緩存中的時間戳,那就不做set操作了。以此類推。
- 前言
- php
- 設計模式
- 代碼安全
- 性能測試
- 自動化測試
- 項目質量
- 自動化部署
- 掌握框架
- laravel5.8
- laravel聲明周期
- mysql
- 物理文件組成
- 存儲引擎和優化
- 權限和安全
- 備份和恢復
- 查詢優化
- 索引優化
- 主從架構
- 監測工具
- redis
- redis簡介
- redis存儲
- windows下 php7.3+redis3 安裝
- 參數配置說明
- redis 數據類型
- 緩存穿透和緩存雪崩問題
- redis并發競爭key問題
- thinkphp5+redis+mysql搶票示例
- apache
- nginx
- Nginx服務器的安裝部署
- Nginx服務器架構
- Nginx服務器的高級配置
- Nginx服務器的Rewrite功能
- Nginx服務器的代理服務
- Nginx服務器的緩存機制
- Nginx源碼結構
- Nginx基本數據結構
- 微服務
- 分布式
- 前后端分離解決方案
- 服務端實現
- thinkphp5
- laravel5
- 客戶端實現H5
- vue.js
- element-ui
- vue-cli
- 客戶端APP
- 客戶端小程序
- 代碼自動生成
- 商城項目實戰
- 系統架構