# redis_dlock1 **Repository Path**: swayingleavescn/redis_dlock1 ## Basic Information - **Project Name**: redis_dlock1 - **Description**: 单机版Redis实现分布式锁 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-03-03 - **Last Updated**: 2021-03-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Redis分布式锁 #### 介绍 RedisTemplate+lua脚本 > 版本信息 ``` springboot 2.4.3 spring-boot-starter-data-redis jdk1.8 or jdk11 ``` > 注意 1、单机版Redis,非集群版分布式锁 >核心代码 ```java @Component public class DLock { /** * 加锁脚本 */ private static final DefaultRedisScript LOCK_SCRIPT = new DefaultRedisScript<>(); /** * 解锁脚本 */ private static final DefaultRedisScript UNLOCK_SCRIPT = new DefaultRedisScript<>(); //初始化脚本信息 static{ LOCK_SCRIPT.setScriptSource(new ResourceScriptSource(new ClassPathResource("redis_lua_script/lock.lua"))); LOCK_SCRIPT.setResultType(Long.class); UNLOCK_SCRIPT.setScriptSource(new ResourceScriptSource(new ClassPathResource("redis_lua_script/unlock.lua"))); UNLOCK_SCRIPT.setResultType(Long.class); } @Autowired RedisTemplate redisTemplate; /** * lua脚本 加锁 * * @param key key * @param value value * @param expireSecondTime 过期时间 秒 * @return 成功:true 失败:false */ public boolean tryLock(String key, String value, int expireSecondTime) { return (long) redisTemplate.execute(LOCK_SCRIPT, Collections.singletonList(key), value, expireSecondTime) == 1; } /** * lua脚本 解锁 * * @param key key * @param value value * @return 成功:true 失败:false */ public boolean tryRelease(String key, String value) { return (long) redisTemplate.execute(UNLOCK_SCRIPT, Collections.singletonList(key), value) == 1; } } ```