在減庫存的**外麵包一層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...