上一篇 <<<Redis分布式鎖的實現(xiàn)代碼示例
下一篇 >>>Redis集群模式之主從復制原理及存在的缺陷
1、引入redisson依賴包
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.11.0</version>
</dependency>
2铝宵、增加配置文件
redisson.singleServerConfig.address=127.0.0.1:6379
3、Redisson實現(xiàn)分布式鎖
@GetMapping("/seckill")
public synchronized String seckill() throws InterruptedException {
RLock seckillLock = redissonClient.getLock("seckillLock");
try {
seckillLock.tryLock(3, TimeUnit.SECONDS);
String stock = stringRedisTemplate.opsForValue().get("Stock");
int nStock = Integer.valueOf(stock) - 1;
if (nStock > 0) {
//成功秒殺到
nStock = Integer.valueOf(stock) - 1;
stringRedisTemplate.opsForValue().set("Stock", nStock + "");
System.out.println("成功秒殺商品了炕淮,還剩余商品:" + nStock);
return "恭喜您缠借,下單成功";
}
} catch (Exception e) {
e.printStackTrace();
} finally {
seckillLock.unlock();
}
System.out.println("商品庫存不足");
return "當前庫存不足";
}
4干毅、getLock和tryLock的區(qū)別
tryLock(long time, TimeUnit unit)方法和tryLock()方法是類似的,只不過區(qū)別在于這個方法在拿不到鎖時會等待一定的時間泼返,在時間期限之內如果還拿不到鎖硝逢,就返回false。如果一開始拿到鎖或者在等待期間內拿到了鎖绅喉,則返回true渠鸽。
推薦閱讀:
<<<分布式緩存與本地緩存的區(qū)別
<<<Ehcache基礎知識
<<<SpringBoot整合Ehcache
<<<Redis的5種數(shù)據(jù)類型
<<<Redis存放實體對象的方式及區(qū)別
<<<Redis的應用場景匯總
<<<Redis高效及線程安全的真正原因
<<<Redis為啥要分為16個庫
<<<RDB和AOF持久化方式的區(qū)別
<<<Redis與數(shù)據(jù)庫的一致性解決方案
<<<SpringBoot整合Redis的注解版本完成數(shù)據(jù)緩存
<<<Redis的淘汰策略
<<<Redis的事務操作(Mult和Watch)知識點
<<<Redis的過期機制使用場景示例
<<<Redis實現(xiàn)分布式鎖的原理分析
<<<Redis分布式鎖的實現(xiàn)代碼示例
<<<Redis集群模式之主從復制原理及存在的缺陷
<<<Redis集群模式之哨兵模式
<<<Redis集群模式之Cluster去中心化分片集群
<<<Linux環(huán)境下安裝單機Redis
<<<Redis Cluster集群環(huán)境搭建
<<<Redis Cluster如何動態(tài)擴容與縮容
<<<Redis Cluster主從節(jié)點自動切換
<<<Redis集群模式的類型和缺陷匯總
<<<Redis緩存的穿透、擊穿和雪崩效應
<<<Redis解決穿透擊穿問題時使用的布隆過濾器知識點
<<<Redis與MySQL的數(shù)據(jù)同步解決方案
<<<阿里云的Canal框架實現(xiàn)Redis與Mysql同步原理及代碼示例
<<<阿里云的Canal框架配置
<<<Redis官方提出的redlock分布式鎖
<<<Redis的調優(yōu)設置
<<<Redis常見問題匯總