最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

redis事務(wù)如何解決超賣問題

 更新時(shí)間:2024年11月05日 11:02:37   作者:路西法_Lucifer  
使用Redis事務(wù)可以有效避免超賣問題,首先,通過MULTI命令開啟事務(wù),將需要執(zhí)行的多個(gè)命令加入到事務(wù)中,然后通過EXEC命令提交事務(wù),確保這些命令可以一次性、順序地執(zhí)行,在事務(wù)執(zhí)行期間,Redis服務(wù)器不會(huì)執(zhí)行其他客戶端的命令

redis事務(wù)解決超賣問題

Redis的事務(wù)提供了一種將多個(gè)命令請(qǐng)求打包,然后一次性、按順序性地執(zhí)行多個(gè)命令的機(jī)制。

在事務(wù)執(zhí)行期間,服務(wù)器不會(huì)中斷事務(wù)而去執(zhí)行其它客戶端的命令請(qǐng)求,它會(huì)將事務(wù)中的所有命令執(zhí)行完畢,然后才去處理其它客戶端的命令請(qǐng)求。

事務(wù)以MULTI命令開始,然后將多個(gè)命令放到事務(wù)當(dāng)中,最后由EXEC命令將這個(gè)事務(wù)提交給服務(wù)器執(zhí)行。

1.引入相關(guān)jar包

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

2.代碼段

package com.example.demo;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.data.redis.core.RedisOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.SessionCallback;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
 
import java.util.UUID;
 
/**
 * @author lucifer
 * @description TODO
 * @date 2022-08-10
 */
@RestController
public class Controller {
 
    @Autowired
    RedisTemplate redisTemplate;
 
 
    //寫入緩存中,因?yàn)檫@里的模擬的是一個(gè)商品被多人搶,所以value值隨便吧
    @GetMapping("/test1")
    public void test1(){
        redisTemplate.opsForValue().set("item1",UUID.randomUUID().toString());
    }
 
    //模擬多人搶一個(gè)商品,并且只有一件
    @GetMapping("/test")
    public String test(){
        //生成隨機(jī)的userid(模擬多用戶去搶一個(gè)商品)
        String userid=UUID.randomUUID().toString();
        //redis key 商品id 為了模擬寫成1
        String key="item"+1;
        //如果redis中不存在搶這個(gè)商品的緩存,就代表搶失敗
        //商品獨(dú)一份
        if(!redisTemplate.hasKey(key)){
           throw new RuntimeException("你沒有搶到");
        }
        //執(zhí)行redis的事務(wù)
        redisTemplate.execute(new SessionCallback() {
            @Override
            public Object execute(RedisOperations operations) throws DataAccessException {
                //在使用multi()開始的事務(wù)期間觀察給定的修改key
                operations.watch(key);
                //標(biāo)記事務(wù)塊的開始。 命令將被排隊(duì)
                operations.multi();
                //設(shè)置key-value
                operations.opsForValue().set(key,userid);
                //如果任何被監(jiān)視的key已被修改,則操作將失敗
                return operations.exec();
            }
        });
        //刪除  避免這個(gè)商品被其他人搶到了
        redisTemplate.delete(key);
        //todo....數(shù)據(jù)庫操作
        return "你搶到了";
    }
 
}

3.測(cè)試

用50個(gè)線程并發(fā)去調(diào)用接口,模擬多人并發(fā)搶商品的功能;

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Redis存儲(chǔ)斷點(diǎn)續(xù)傳文件狀態(tài)的最佳實(shí)踐

    Redis存儲(chǔ)斷點(diǎn)續(xù)傳文件狀態(tài)的最佳實(shí)踐

    在斷點(diǎn)續(xù)傳系統(tǒng)中,如何高效地存儲(chǔ)和更新文件上傳狀態(tài)是關(guān)鍵,得益于 Redis 高效的內(nèi)存操作和多種數(shù)據(jù)結(jié)構(gòu)的支持,它非常適合用于存儲(chǔ)上傳過程中的臨時(shí)狀態(tài)信息,下面,我們將探討如何利用 Redis 實(shí)現(xiàn)文件上傳狀態(tài)的存儲(chǔ),需要的朋友可以參考下
    2024-12-12
  • CentOS 7下安裝 redis 3.0.6并配置集群的過程詳解

    CentOS 7下安裝 redis 3.0.6并配置集群的過程詳解

    這篇文章主要給大家介紹了CentOS 7下安裝 redis 3.0.6并配置集群的過程,文中通過示例代碼和詳細(xì)的步驟介紹的很相信,對(duì)大家具有一定的參考價(jià)值,有需要的朋友們下面來一起看看吧。
    2017-01-01
  • Redis常用的數(shù)據(jù)結(jié)構(gòu)及實(shí)際應(yīng)用場(chǎng)景

    Redis常用的數(shù)據(jù)結(jié)構(gòu)及實(shí)際應(yīng)用場(chǎng)景

    本文介紹了Redis中常用的數(shù)據(jù)結(jié)構(gòu),包括字符串、列表、集合、哈希表、有序集合和Bitmap,并詳細(xì)說明了它們?cè)诟鞣N場(chǎng)景下的使用,需要的朋友可以參考下
    2024-05-05
  • 深度剖析Redis字符串操作指南從入門到實(shí)戰(zhàn)應(yīng)用

    深度剖析Redis字符串操作指南從入門到實(shí)戰(zhàn)應(yīng)用

    Redis字符串類型二進(jìn)制安全,支持文本、數(shù)字、二進(jìn)制等數(shù)據(jù),涵蓋基礎(chǔ)操作、數(shù)字計(jì)算、過期管理及分布式鎖等應(yīng)用,結(jié)合優(yōu)化策略提升系統(tǒng)性能,本文給大家介紹Redis字符串操作指南,感興趣的朋友一起看看吧
    2025-07-07
  • Redis集群修改密碼方式

    Redis集群修改密碼方式

    本文詳細(xì)介紹了三種不重啟集群和需要重啟集群的Redis配置更新方法,幫助用戶高效管理Redis集群配置
    2026-06-06
  • Redis?ziplist?壓縮列表的源碼解析

    Redis?ziplist?壓縮列表的源碼解析

    ziplist 是一個(gè)經(jīng)過特殊編碼的雙向鏈表,旨在提高內(nèi)存效率,它存儲(chǔ)字符串和整數(shù)值,其中整數(shù)被編碼為實(shí)際整數(shù)而不是一系列字符,這篇文章主要介紹了Redis?ziplist?壓縮列表的源碼解析,需要的朋友可以參考下
    2022-06-06
  • Redis 使用跳表實(shí)現(xiàn)有序集合的方法

    Redis 使用跳表實(shí)現(xiàn)有序集合的方法

    Redis有序集合底層為什么使用跳表而非其他數(shù)據(jù)結(jié)構(gòu)如平衡樹、紅黑樹或B+樹的原因在于其特殊的設(shè)計(jì)和應(yīng)用場(chǎng)景,跳表提供了與平衡樹類似的效率,同時(shí)實(shí)現(xiàn)更簡(jiǎn)單,調(diào)試和修改也更加容易,感興趣的朋友一起看看吧
    2024-09-09
  • Redis限流算法解析與實(shí)戰(zhàn)教程

    Redis限流算法解析與實(shí)戰(zhàn)教程

    文章對(duì)比了多種限流算法(如固定窗口、滑動(dòng)窗口、令牌桶、漏桶,并詳細(xì)介紹了RedisCell的使用方式和使用建議,在工程優(yōu)化方面,文章提供了多個(gè)建議,如使用清理、保持一致性、增強(qiáng)可觀測(cè)性等等等,同時(shí)也給出了一些實(shí)戰(zhàn)場(chǎng)景和限流策略的黃金法則
    2026-04-04
  • Redis數(shù)據(jù)結(jié)構(gòu)之跳躍表使用學(xué)習(xí)

    Redis數(shù)據(jù)結(jié)構(gòu)之跳躍表使用學(xué)習(xí)

    這篇文章主要為大家介紹了Redis數(shù)據(jù)結(jié)構(gòu)之跳躍表使用學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Redis進(jìn)行相關(guān)優(yōu)化詳解

    Redis進(jìn)行相關(guān)優(yōu)化詳解

    這篇文章主要介紹了Redis進(jìn)行相關(guān)優(yōu)化,Redis在項(xiàng)目中進(jìn)行廣泛使用,那么在日常的開發(fā)過程中,我們?cè)谑褂肦edis的過程中需要注意那些呢?本文將從三個(gè)維度來講解如何進(jìn)行Redis的優(yōu)化
    2022-08-08

最新評(píng)論

天全县| 江安县| 河南省| 嘉义市| 宾川县| 左贡县| 大英县| 搜索| 柳州市| 庄河市| 磴口县| 武冈市| 南雄市| 泌阳县| 米泉市| 五台县| 团风县| 贺州市| 甘孜县| 新营市| 赞皇县| 西乌珠穆沁旗| 顺义区| 大足县| 紫金县| 宁陕县| 大关县| 武穴市| 永济市| 绥中县| 镇康县| 通河县| 朝阳区| 宾阳县| 抚州市| 五原县| 福清市| 毕节市| 古田县| 大安市| 工布江达县|