Redis - increment 遞增方法 | 處理防重復和並發問題


 

慌途L 2019-08-11 15:51:20 21316 收藏 25
分類專欄: 日常記錄 Redis 文章標簽: redis increment 防重復 並發 遞增
版權

日常記錄
同時被 2 個專欄收錄
39 篇文章0 訂閱
訂閱專欄

Redis
3 篇文章0 訂閱
訂閱專欄
Redis - increment 遞增方法 | 處理防重復和並發問題
一、使用場景
1.有時因為網路原因,在保存或其他操作時會發生重復提交問題
2.針對秒殺、搶購、多個用戶同時下單的情況(不過redis針對秒殺只是其中的一環)
二、incr 遞增函數介紹
Redis Incr 命令將 key 中儲存的數字值增一。
如果 key 不存在,那么 key 的值會先被初始化為 0 ,然后再執行 INCR 操作。
如果值包含錯誤的類型,或字符串類型的值不能表示為數字,那么返回一個錯誤。
本操作的值限制在 64 位(bit)有符號數字表示之內。
INCR 命令是一個針對字符串的操作。 因為 Redis 並沒有專用的整數類型, 所以鍵 key 儲存的值在執行 INCR 命令時會被解釋為十進制 64 位有符號整數。

三、示例
@PostMapping(value = "/testRedis")
public R testRedis(HttpServletRequest request) {
// 通過用戶ID和訪問IP,處理重復請求
String key = userId + IPUtils.getIpAddr(request);
Object redisKey = redisTemplate.opsForValue().get(key);
System.out.println("redis值:" + redisKey);

// redis中的key值存在則表示當前這次請求距離上一次請求不超過下面設置的三秒鍾,直接返回即可
if(redisKey != null){
return R.ok("您的操作過快,請刷新重試");
}

Long count = redisTemplate.opsForValue().increment(key, 1); // 設置遞增因子
System.out.println("遞增的值" + count);
redisTemplate.expire(key, 3, TimeUnit.SECONDS); // 設置過期時間 3秒
return R.ok("成功");
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
通過這種方法,同樣我們也可以用到並發的情況下
————————————————
版權聲明:本文為CSDN博主「慌途L」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_25112523/article/details/97801092


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM