JooLun Plus 百科 ⬇ 源码下载

04.14 Klock 分布式锁使用

102353 于 2026-10-17 14:14:33 +08:00 修改了此页面

### 推荐学习视频

官方网站

spring-boot-klock-starter

基于redis的分布式锁spring-boot starter组件,使得项目拥有分布式锁能力变得异常简单,支持spring boot,和spirng mvc等spring相关项目

joolun项目使用步骤

  • 服务POM引入
<dependency>
    <groupId>cn.keking</groupId>
    <artifactId>spring-boot-klock-starter</artifactId>
</dependency>
  • nacos配置application-dev.yml文件中的klock配置,注意!!redis没有密码password就注释掉,有密码就把注释打开,否则会报错
spring: 
 data:
    # redis 相关
    redis:
      host: joolun-plus-redis
      port: 6379
      password: 
      database: 3
  # 分布式锁klock配置
  klock:
    address: redis://${spring.data.redis.host}:${spring.data.redis.port}
    # 注意!!redis没有密码下面的password就注释掉,有密码就把注释打开,否则会报错
    # password: ${spring.data.redis.password}
    database: ${spring.data.redis.database}
  • 业务代码使用案例:商城用户UserInfoServiceImpl中重写update和updateById方法,加入@klock注解
	@Override
	@CacheEvict(value = CacheConstants.APP_USER_INFO_CACHE, key = "#entity.getId()")
	@Klock(keys = {"#entity.getId()"}, lockTimeoutStrategy = LockTimeoutStrategy.FAIL_FAST)
	public boolean updateById(UserInfo entity) {
		return super.updateById(entity);
	}

	@Override
	@CacheEvict(value = CacheConstants.APP_USER_INFO_CACHE, key = "#updateWrapper.getEntity().getId()")
	@Klock(keys = {"#updateWrapper.getEntity().getId()"}, lockTimeoutStrategy = LockTimeoutStrategy.FAIL_FAST)
	public boolean update(Wrapper<UserInfo> updateWrapper) {
		return this.update(updateWrapper);
	}

joolun项目中已用到分布式锁的地方

  • 支付回调接口
  • UserInfo(商城用户)
  • CouponInfo(电子券)
  • GoodsSku(商品sku)
  • SeckillInfo(秒杀商品)