使用redisson实现分布式秒杀功能
使用redisson實(shí)現(xiàn)分布式秒殺功能
redisson相比原生的jredis具有排隊(duì)的功能,不一致秒殺時(shí) ,一時(shí)獲取鎖失敗就返回失敗 。
秒殺的原理就是使用redis的分布式鎖的功能 ,保證每次搶購不會(huì)出現(xiàn)超賣的情況
1 引入pom
org.redisson redisson 3.16.8 2 完整代碼及解析如下
package htmdemo;import com.ruoyi.common.core.redis.RedisCache;import org.redisson.api.RLock;import org.redisson.api.RedissonClient;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import java.util.ArrayList;import java.util.concurrent.*;/** * 使用redisson來實(shí)現(xiàn)分布式的秒殺功能 * @author Administrator * */@Componentpublic class ReddisonTest { @Autowired private RedisCache redisCache; @Autowired RedissonClient redissonClient; /** * 秒殺 * @throws ExecutionException * @throws InterruptedException */ public void secondkill() throws ExecutionException, InterruptedException { //加鎖的實(shí)現(xiàn)方式 ExecutorService exec = Executors.newFixedThreadPool(50); ArrayList>futures = new ArrayList<>(); RLock stockLock = redissonClient.getLock("stockLock"); for (int i = 0; i < 50; i++) { Futurefsubmit = exec.submit(() ->{ int doneCount = 0;//初始化做的任務(wù)為0 if(numLock.tryLock(1,1,TimeUnit.SECONDS)){ //獲取到鎖