利用redis实现分布式锁,网上搜索的大部分是使用java jedis实现的。
redis官方推荐的分布式锁实现为redisson http://ifeve.com/redis-lock/
以下为spring boot实现分布式锁的步骤
项目pom中需要添加官方依赖 我是1.8JDK固为
org.redisson redisson 3.4.2
定义一个分布式锁的回调类
package com.example.demo.redis2; /** * 分布式锁回调接口 * * @author lk */ public interface DistributedLockCallback{ /** * 调用者必须在此方法中实现需要加分布式锁的业务逻辑 * * @return */ public T process(); /** * 得到分布式锁名称 * * @return */ public String getLockName(); }
分布式锁操作模板
package com.example.demo.redis2; import java.util.concurrent.TimeUnit; /** * 分布式锁操作模板 * * @author lk */ public interface DistributedLockTemplate { /** * 使用分布式锁,使用锁默认超时时间。 * * @param callback * @return */ publicT lock(DistributedLockCallback callback); /** * 使用分布式锁。自定义锁的超时时间 * * @param callback * @param leaseTime 锁超时时间。超时后自动释放锁。 * @param timeUnit * @return */ public T lock(DistributedLockCallback callback, long leaseTime, TimeUnit timeUnit); }
使用redisson最简单的Single instance mode实现分布式锁模板接口