<!--导入依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
@Service @Slf4j public class RedisService { @Resource(name = "stringRedisTemplate") ValueOperations<String, String> valOpsStr; /** * 获取一个redis分布锁 * * @param lockKey 锁住的key * @param lockExpireMils 锁住的时长。如果超时未解锁,视为加锁线程死亡,其他线程可夺取锁 * @return */ public boolean getLock(String lockKey, long lockExpireMils) { return (Boolean) redisTemplate.execute((RedisCallback) connection -> { long nowTime = System.currentTimeMillis(); Boolean acquire = connection.setNX(lockKey.getBytes(), String.valueOf(nowTime + lockExpireMils + 1).getBytes()); if (acquire) { //覆盖key,设置过期时间 setStr(lockKey,"",lockExpireMils,TimeUnit.MINUTES); return Boolean.TRUE; } return Boolean.FALSE; }); } /** * 设置Str缓存 * @param key * @param val * @param unit */ public void setStr(String key, String val, Long timeOut, TimeUnit unit) { valOpsStr.set(key, val,timeOut,TimeUnit.SECONDS); } }
来源:oschina
链接:https://my.oschina.net/u/4121470/blog/4295049