鎖 JDK鎖 redis鎖 mysql鎖

2021-10-02 01:12:46 字數 1533 閱讀 5636

在減庫存的**外麵包一層synchronized

public string deductstock()

else}}

//雙重檢查單例模式

public

class

singletontype6

public

static singletontype6 getinstance()

}}return instance;

}}

利用redis的單執行緒機制

和 函式:setnx(key,value) 不存在這個key,執行新增;存在key,不執行新增

public string toaddpage

(modelmap mmap)

int strock = integer.

parseint

(stringredistemplate.

opsforvalue()

.get

("stock"))

;"stock")

if(strock >0)

else

}finally

}

1.pom

org.springframework.boot<

/groupid>

spring-boot-starter-redis<

/artifactid>

1.4.6

.release

<

/version>

<

/dependency>

# redis資料庫(預設為0)

redis:

database:

6

host: localhost // redis伺服器位址

port:

6379

// redis伺服器連線埠

password:

pool.max-active:

8//連線池最大連線數

pool.max-wait:-1

//連線池最大阻塞等待時間

pool.max-idle:

8//連線池中的最大空閒連線

pool.min-idle:

0//連線池中的最小空閒連線

timeout:

0//連線超時時間(毫秒)

3.controller直接就可以用了
@autowired	

stringredistemplate redis;

//悲觀鎖

for update

//樂觀鎖

加上乙個version

//表鎖

lock table user read //加表鎖

unlock tables //解除表鎖

//行鎖

for update

Redis鎖,悲觀鎖和樂觀鎖

樂觀鎖開啟事務前,設定對資料的監聽 watch exec時,如果發生資料發生過修改,作用於改資料的事務會自動取消 discard 事務exec後,無論成敗,監聽會被移除 悲觀鎖每次去拿資料的時候都認為別人會修改,所以每次在拿資料的時候都會上鎖。場景 如果專案中使用了快取且對快取設定了超時時間。當併發...

Redis 事務(悲觀鎖 樂觀鎖)

1 定義 redis事務是乙個單獨的隔離操作 事務中所有的命令都會被序列化 按照順序執行 事務在執行過程中不會被其他客戶端傳送來的命令請求打斷 2 作用 串聯多個命令防止別的命令插隊 multi 輸入開始命令 exec 執行命令 discard 放棄組隊 刪除掉 3 注意事項 1 multi 命令不...

Redis鎖與Zookeeper鎖的選擇

在鎖的實現上,我們知道有redis分布式鎖和zookeeper鎖兩種方式,那麼如何選擇呢看下表 redis方式 zookeeper方式 優點支援高併發且效率高 鎖的安全行較高,因為zookeeper可持久化,還可以實時監聽獲取鎖的客戶端狀態。一旦客戶端 down掉 則瞬間節點隨之消失,zookeep...