欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

redis事務如何解決超賣問題

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

redis事務解決超賣問題

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

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

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

1.引入相關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;
 
 
    //寫入緩存中,因為這里的模擬的是一個商品被多人搶,所以value值隨便吧
    @GetMapping("/test1")
    public void test1(){
        redisTemplate.opsForValue().set("item1",UUID.randomUUID().toString());
    }
 
    //模擬多人搶一個商品,并且只有一件
    @GetMapping("/test")
    public String test(){
        //生成隨機的userid(模擬多用戶去搶一個商品)
        String userid=UUID.randomUUID().toString();
        //redis key 商品id 為了模擬寫成1
        String key="item"+1;
        //如果redis中不存在搶這個商品的緩存,就代表搶失敗
        //商品獨一份
        if(!redisTemplate.hasKey(key)){
           throw new RuntimeException("你沒有搶到");
        }
        //執(zhí)行redis的事務
        redisTemplate.execute(new SessionCallback() {
            @Override
            public Object execute(RedisOperations operations) throws DataAccessException {
                //在使用multi()開始的事務期間觀察給定的修改key
                operations.watch(key);
                //標記事務塊的開始。 命令將被排隊
                operations.multi();
                //設置key-value
                operations.opsForValue().set(key,userid);
                //如果任何被監(jiān)視的key已被修改,則操作將失敗
                return operations.exec();
            }
        });
        //刪除  避免這個商品被其他人搶到了
        redisTemplate.delete(key);
        //todo....數據庫操作
        return "你搶到了";
    }
 
}

3.測試

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

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 在項目中使用redis做緩存的一些思路

    在項目中使用redis做緩存的一些思路

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

    淺談Redis在分布式系統(tǒng)中的協調性運用

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

    Redis安裝與使用方法小結

    這篇文章主要介紹了Redis安裝與使用方法,結合實例形式分析了Redis數據庫的下載、安裝、啟動、設置及相關使用操作注意事項,需要的朋友可以參考下
    2018-04-04
  • redis cluster集群模式下實現批量可重入鎖

    redis cluster集群模式下實現批量可重入鎖

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

    Redis數據一致性問題的三種解決方案

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

    Redis緩存實例超詳細講解

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

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

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

    Spring Boot整合Redis實現訂單超時處理問題

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

    基于Redis的分布式鎖的簡單實現方法

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

    Linux下Redis安裝配置教程

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

最新評論