亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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è)商品的緩存,就代表?yè)屖?
        //商品獨(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ù)庫(kù)操作
        return "你搶到了";
    }
 
}

3.測(cè)試

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

總結(jié)

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

相關(guān)文章

  • 在項(xiàng)目中使用redis做緩存的一些思路

    在項(xiàng)目中使用redis做緩存的一些思路

    這篇文章主要介紹了在項(xiàng)目中使用redis做緩存的一些思路,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 淺談Redis在分布式系統(tǒng)中的協(xié)調(diào)性運(yùn)用

    淺談Redis在分布式系統(tǒng)中的協(xié)調(diào)性運(yùn)用

    這篇文章主要介紹了Redis在分布式系統(tǒng)中的協(xié)調(diào)性運(yùn)用,講解了Redis在進(jìn)程和線程的調(diào)度上以及消息隊(duì)列中的作用,需要的朋友可以參考下
    2016-03-03
  • Redis安裝與使用方法小結(jié)

    Redis安裝與使用方法小結(jié)

    這篇文章主要介紹了Redis安裝與使用方法,結(jié)合實(shí)例形式分析了Redis數(shù)據(jù)庫(kù)的下載、安裝、啟動(dòng)、設(shè)置及相關(guān)使用操作注意事項(xiàng),需要的朋友可以參考下
    2018-04-04
  • redis cluster集群模式下實(shí)現(xiàn)批量可重入鎖

    redis cluster集群模式下實(shí)現(xiàn)批量可重入鎖

    本文主要介紹了使用redis cluster集群版所遇到的問題解決方案及redis可重入鎖是否會(huì)有死鎖的問題等,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • Redis數(shù)據(jù)一致性問題的三種解決方案

    Redis數(shù)據(jù)一致性問題的三種解決方案

    Redis(Remote?Dictionary?Server?),是一個(gè)高性能的基于Key-Value結(jié)構(gòu)存儲(chǔ)的NoSQL開源數(shù)據(jù)庫(kù),大部分公司采用Redis來實(shí)現(xiàn)分布式緩存,用來提高數(shù)據(jù)查詢效率,本文就給大家介紹三種Redis數(shù)據(jù)一致性問題的解決方案,需要的朋友可以參考下
    2023-07-07
  • Redis緩存實(shí)例超詳細(xì)講解

    Redis緩存實(shí)例超詳細(xì)講解

    實(shí)際開發(fā)中緩存處理是必須的,不可能我們每次客戶端去請(qǐng)求一次服務(wù)器,服務(wù)器每次都要去數(shù)據(jù)庫(kù)中進(jìn)行查找,為什么要使用緩存?說到底是為了提高系統(tǒng)的運(yùn)行速度
    2022-12-12
  • Redis在項(xiàng)目中的使用(JedisPool方式)

    Redis在項(xiàng)目中的使用(JedisPool方式)

    項(xiàng)目操作redis是使用的RedisTemplate方式,另外還可以完全使用JedisPool和Jedis來操作redis,本文給大家介紹Redis在項(xiàng)目中的使用,JedisPool方式,感興趣的朋友跟隨小編一起看看吧
    2021-12-12
  • Spring Boot整合Redis實(shí)現(xiàn)訂單超時(shí)處理問題

    Spring Boot整合Redis實(shí)現(xiàn)訂單超時(shí)處理問題

    這篇文章主要介紹了Spring Boot整合Redis實(shí)現(xiàn)訂單超時(shí)處理,通過這個(gè)基本的示例,你可以了解如何使用Spring Boot和Redis來處理訂單超時(shí)問題,并根據(jù)需要進(jìn)行擴(kuò)展和定制,需要的朋友可以參考下
    2023-11-11
  • 基于Redis的分布式鎖的簡(jiǎn)單實(shí)現(xiàn)方法

    基于Redis的分布式鎖的簡(jiǎn)單實(shí)現(xiàn)方法

    這篇文章主要介紹了基于Redis的分布式鎖的簡(jiǎn)單實(shí)現(xiàn)方法,Redis官方給出兩種思路,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-10-10
  • Linux下Redis安裝配置教程

    Linux下Redis安裝配置教程

    這篇文章主要為大家詳細(xì)介紹了Linux下Redis安裝配置教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11

最新評(píng)論