日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

解决Redis超卖问题

發(fā)布時間:2025/3/21 数据库 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 解决Redis超卖问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

第一種:使用synchronized(只適用于單個tomcat)

@Autowired private StringRedisTemplate stringRedisTemplate; @GetMapping("/deduct")public String toDeduct(){synchronized (this) {int stock = Integer.parseInt(stringRedisTemplate.opsForValue().get("stock"));if (stock > 0) {Long stock1 = stringRedisTemplate.opsForValue().decrement("stock");System.out.println("扣減成功,剩余庫存:" + stock1);}else{System.out.println("扣減失敗,庫存不足");}return "end";}}

第二種:使用SETNX命令(多臺tomcat)

@GetMapping("/deduct_stock")public String deductStock() throws InterruptedException {String lockKey = "lockKey";//設計唯一key值防止鎖失效問題String clientId = UUID.randomUUID().toString();//設計鎖超時時間,防止服務器宕機時鎖沒有釋放掉(finally語句沒有執(zhí)行)Boolean result = stringRedisTemplate.opsForValue().setIfAbsent(lockKey, clientId, 10, TimeUnit.SECONDS);//jedis.setnx(key,value);//若鍵 key 已經(jīng)存在, 則 SETNX 命令不做任何動作。result==falseif (!result) {return "正在排隊。。。";}try {int stock = Integer.parseInt(stringRedisTemplate.opsForValue().get("stock"));if (stock > 0) {Long realStock = stringRedisTemplate.opsForValue().decrement("stock");System.out.println("扣減成功,剩余庫存:" + realStock);}else{System.out.println("扣減失敗,庫存不足");}} finally {//防止鎖失效問題,在多線程的情況下,每個線程只釋放自己創(chuàng)建的鎖,線程之間互不干預。if(clientId.equals(stringRedisTemplate.opsForValue().get(lockKey))) {stringRedisTemplate.delete(lockKey);}}return "end";}

第三種:使用Redission框架(原理跟第二種一樣)

1、配置config類

@Configuration public class RedissonConfig {@Value("${spring.redis.host}")private String host;@Value("${spring.redis.port}")private String port;@Value("${spring.redis.password}")private String password;@Beanpublic RedissonClient getRedisson(){Config config = new Config();config.useSingleServer().setAddress("redis://" + host + ":" + port).setPassword(password);//添加主從配置 // config.useMasterSlaveServers().setMasterAddress("").setPassword("").addSlaveAddress(new String[]{"",""});return Redisson.create(config);} } @GetMapping("/deduct_stock1")public String deductStock1(){String lockKey = "lockKey";RLock redissonLock = redisson.getLock(lockKey);try {redissonLock.lock();int stock = Integer.parseInt(stringRedisTemplate.opsForValue().get("stock"));if (stock > 0) {Long realStock = stringRedisTemplate.opsForValue().decrement("stock");System.out.println("扣減成功,剩余庫存:" + realStock);}else{System.out.println("扣減失敗,庫存不足");}} finally {redissonLock.unlock();}return "end";}

Redission原理:

Redission使用了Lua 腳本,實現(xiàn)原理跟原理跟第二種差不多。
當業(yè)務代碼處理時間很長,像mysql慢查詢等等,可以在try代碼塊中每隔10秒檢查是否還持有鎖,如果持有則延長鎖的時間,防止還沒執(zhí)行完業(yè)務代碼“l(fā)ockKey”就到了失效時間。


測試環(huán)境搭建

Redis命令大全

設置Redis密碼

pom:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.5.7</version></dependency>

application.properties:

server.port=8090 # redis spring.redis.host=127.0.0.1 spring.redis.port=6379 spring.redis.password=888888 spring.redis.jedis.pool.max-active=500 spring.redis.jedis.pool.max-idle=1000 spring.redis.jedis.pool.max-wait=6000ms spring.redis.jedis.pool.min-idle=4

Nginx負載均衡:

upstream redislock{server 127.0.0.1:8080 weight = 1;server 127.0.0.1:8090 weight = 1;}server {listen 80;server_name localhost;location / {root html;index index.html index.htm;proxy_pass http://redislock;}}

Jmeter壓力測試


發(fā)送http請求:

設置發(fā)送地址:

表示在0秒內(nèi)發(fā)送200個請求,處理完后再發(fā)送200 * 3次,總計200 * 4次請求:

結果集:

測試結果:


沒有出現(xiàn)超賣問題

總結

以上是生活随笔為你收集整理的解决Redis超卖问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美午夜精品久久久久免费视 | 高清一区二区三区视频 | 天海翼av| 日本一区二区三区在线看 | 91在线视频播放 | 亚洲精品国产成人久久av盗摄 | 加勒比成人av | 午夜簧片| 人人插人人搞 | 性av网站| 另类亚洲色图 | 青青久久av北条麻妃黑人 | 亚洲码欧美码一区二区三区 | 高清av网址 | 亚洲AV无码精品色毛片浪潮 | 99国产免费 | www.亚洲欧美 | jizz日本女人 | 中文字幕一区二区三区在线视频 | 69国产精品 | 免费黄毛片 | 国产精品一区二区免费 | 亚洲欧美日韩国产成人精品影院 | 毛片无码一区二区三区a片视频 | 中文字幕十一区 | 九色综合网 | 国产成人亚洲欧洲在线 | 久久男人网 | 好吊色视频一区二区 | 国产又粗又猛又黄 | 免费黄色网址在线观看 | 日韩女优中文字幕 | 4438国产精品一区二区 | 黄色免费视频 | 国产亚洲一区在线 | 操少妇视频 | 成年丰满熟妇午夜免费视频 | 男阳茎进女阳道视频大全 | 娇妻玩4p被三个男人伺候电影 | 神马影院午夜伦理片 | av福利在线看 | 五月激情四射网 | 久久99深爱久久99精品 | 日本一区二区三区视频免费看 | 国产美女精品视频 | 丁香伊人 | 亚洲精品免费看 | 农村老妇性真猛 | 伊人365 | 婷婷午夜激情 | 91超碰在线播放 | 337p亚洲欧洲色噜噜噜 | 狠狠操网址 | 嫩草免费视频 | jizz毛片| 一区二区三区在线观看免费 | 一区二区成人网 | 国产欧美不卡 | 激情婷婷| 国产精品天美传媒 | xxxⅹ少妇少妇xxxx | 中国特级毛片 | 成人亚洲欧美 | 性日韩 | 国产毛毛片 | 啪啪国产精品 | 都市激情校园春色 | 日韩av网站大全 | 国产a√精品区二区三区四区 | 成人午夜在线观看 | 艳妇臀荡乳欲伦交换gif | 日韩av免费在线观看 | 欧美日本成人 | 欧美久草 | 97视频在线播放 | www.久久爱 | 无码人妻精品一区二区三区99日韩 | 日韩五十路 | 亚洲天堂一区在线观看 | 欧美精品久久96人妻无码 | 成人毛片视频在线观看 | 超碰98在线观看 | 深夜在线视频 | 韩国伦理片观看 | av资源在线免费观看 | 噜噜噜视频| 97理伦| 无码人妻一区二区三区精品视频 | 午夜h | 内射干少妇亚洲69xxx | 国产成人精品亚洲 | 青青操国产| 日韩欧美在线观看一区二区 | 国产激情视频一区 | 欧美性生交大片免费看app麻豆 | 国产精品高潮呻吟视频 | 在线免费观看av网址 | 亚洲精品高清视频在线观看 | 日韩sese |