最近在做项目中要用到redis锁,因为项目是集群部署,所以要考虑分布式锁,查了一些资料,发现有些会产生误导,所以还是记录一下redis分布式锁的正确打开方式,话不多说,先上代码
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisCommands;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
/**
* @author superchen
* @since 2018/5/16
**/
@Component
public class RedisDistributedLock{
@Resource
private RedisTemplate<String, Object> redisTemplate;
public static final String UNLOCK_LUA;
static {
StringBuilder sb = new StringBuilder();
sb.append("if redis.call(\"get\",KEYS[1]) == ARGV[1] ");
sb.append("then ");
sb.append(" return redis.call(\"del\",KEYS[1]) ");
sb.append("else ");
sb.append(" return 0 ");
sb.append("end ");
UNLOCK_LUA = sb.toString();
}
private final Logger logger = LoggerFactory.getLogger(RedisDistributedLock.class);
public boolean setLock(String key, long expire) {
try {
RedisCallback<String> callback = (connection) -> {
JedisCommands commands = (JedisCommands) connection.getNativeConnection();

本文介绍了如何在项目中使用redisTemplate实现分布式锁,强调了操作的原子性以避免死锁。通过引入开源组件,并展示了Spring Cloud环境下redis的配置和初始化方法。

9949

被折叠的 条评论
为什么被折叠?



