分布式锁 发表于 2019-12-23 | 更新于 2020-01-21 | 分类于 Java | 阅读次数: | 字数: 1.1k | 时长 ≈ 1 分钟 标签 spring redis spring-integration-redis 初始化 RedisLockRegistry 12345@Beanpublic RedisLockRegistry redisLockRegistry (RedisConnectionFactory factory) { // 60s过期,单位:ms return RedisLockRegistry(factory, "ts-template", 60000L);} 使用 123456789101112131415161718192021@Resourceprivate RedisLockRegistry redisLockRegistry;public void send(String message) { // 获取锁 Lock lock = redisLockRegistry.obtain(message); try { // 上锁 if (lock.tryLock()) { // 业务逻辑 // ... } } catch() { // 异常处理 } finally { // 删除当前未锁定的旧锁:要手动调用一下这个函数,否则 RedisLockRegistry 中的 locks 对象会越来越大,因为调用 unlock 之后,不会自动删除 locks 中保存的当前锁的对象。但是调用这个删除逻辑最好是通过定时器去调用,因为如果 locks 对象中数据量很大,每次都要迭代一次会很耗时 redisLockRegistry.expireUnusedOlderThan(10*60*1000L); // 释放锁 lock.unlock(); }} 通过定时器调用 expireUnusedOlderThan 12345678@Resourceprivate RedisLockRegistry redisLockRegistry;@Scheduled(fixedDelay=10*60*1000)public void expireUnusedOlderThan() { // 删除当前未锁定的旧锁 redisLockRegistry.expireUnusedOlderThan(10*60*1000L);} 本文作者: forever杨 本文链接: https://blog.yl-online.top/posts/4eb3381c.html 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。如果文章内容对你有用,请记录到你的笔记中。本博客站点随时会停止服务,请不要收藏、转载!