乐观锁基于CAS(Compare And Swap)思想(比较并替换),是不具有互斥性,不会产生等待而消耗资源,但是需要反复的重试,但也是因为重试的机制,能比较快的响应。因此我们可以利用redis来实现乐观锁。
思路:
1.利用reids的watch功能,监控optimisticLockKey 的状态值
2.获取optimisticLockKey 的值
3.创建redis事务
4.将这个key的值+1
5.然后去执行这个事务。如果key的值被修改过则回滚,key值不变
如果监听的key值有变化,则整个事务不会执行(事务中没有监听到的key,也不会执行相关操作)
import org.springframework.util.CollectionUtils;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Transaction;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class RedisOptimisticLockTest {
private static final String redisIp = "127.0.0.1";
private static final int reidsPort