redisson实现分布式锁

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: redisson实现分布式锁

性格左右命运,气度影响格局。——余世雅博士

代码如下

public static int EXPIRE_SECONDS = 5 * 60;
   @Resource
   private RedissonClient redissonClient; 
/**
    * 加redisson分布式锁
    *
    * @param lockName 锁名
    * @param supplier 调用方法
    * @return T
    * @author <achao1441470436@gmail.com>
    * @since 2021/7/2 17:42
    */
   @Override
   @Transactional(rollbackFor = Throwable.class, isolation = Isolation.READ_UNCOMMITTED, propagation = Propagation.REQUIRED)
   public <T> T lockByName(String lockName, Supplier<T> supplier) {
       // 获取锁
       RLock lock = redissonClient.getLock(lockName);
       // 加锁并设置失效时间
       try {
           if (lock.tryLock(EXPIRE_SECONDS, TimeUnit.SECONDS)) {
               // 执行函数获取返回值
               return supplier.get();
           }
       } catch (Exception e) {
           log.error("Something Wrong with:", e);
       } finally {
           // 释放锁
           lock.unlock();
       }
       return null;
   }

如何使用就不再赘述了,和我之前写的redis防止缓存穿透击穿雪崩的那篇博客差不多的

不过以防万一还是写一个吧哈哈

redisManager.lockByName("achao"), () -> {
    // 执行逻辑,拿到返回值,不需要返回值可以任意返回
    return "";
});

在多线程场景下锁生效

如果我们需要集群下的RedLock

则可以如下实现

/**
 * 使用名字加一个redisson的分布式锁
 *
 * @param lockName 锁名
 * @param supplier 调用方法
 * @return T
 * @author <achao1441470436@gmail.com>
 * @since 2021/7/2 17:42
 */
@Override
@Transactional(rollbackFor = Throwable.class, isolation = Isolation.READ_UNCOMMITTED, propagation = Propagation.REQUIRED)
public <T> T lockByName(String lockName, Supplier<T> supplier) {
    // 获取锁
    RLock lock = redissonClientFirst.getLock(lockName);
    RLock second = redissonClientSecond.getLock(lockName);
    RLock third = redissonClientThird.getLock(lockName);
    RedissonRedLock redissonRedLock = new RedissonRedLock(lock,second,third);
    // 加锁并设置失效时间
    try {
        if (redissonRedLock.tryLock(EXPIRE_SECONDS, TimeUnit.SECONDS)) {
            // 执行函数获取返回值
            return supplier.get();
        }
    } catch (Exception e) {
        log.error("Something Wrong with:", e);
    } finally {
        // 释放锁
        redissonRedLock.unlock();
    }
    return null;
}
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
7月前
|
Java 编译器 数据库
Spring Boot 整合 redisson 实现分布式锁
Spring Boot 整合 redisson 实现分布式锁
130 1
|
5月前
|
存储 缓存 NoSQL
Redis常见面试题(二):redis分布式锁、redisson、主从一致性、Redlock红锁;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
redis分布式锁、redisson、可重入、主从一致性、WatchDog、Redlock红锁、zookeeper;Redis集群、主从复制,全量同步、增量同步;哨兵,分片集群,Redis为什么这么快,I/O多路复用模型——用户空间和内核空间、阻塞IO、非阻塞IO、IO多路复用,Redis网络模型
Redis常见面试题(二):redis分布式锁、redisson、主从一致性、Redlock红锁;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
|
9天前
|
供应链 NoSQL Java
关于Redisson分布式锁的用法
Redisson分布式锁是实现分布式系统中资源同步的有效工具。通过合理配置和使用Redisson的各种锁机制,可以确保系统的高可用性和数据一致性。本文详细介绍了Redisson分布式锁的配置、基本用法和高级用法,并提供了实际应用示例,希望对您在实际项目中使用Redisson分布式锁有所帮助。c
52 10
|
6月前
|
NoSQL Redis
redis分布式锁redisson
底层会尝试去加锁,如果加锁失败,会睡眠,自旋加锁,直到获取到锁为止。
65 1
|
2月前
|
缓存 NoSQL Java
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
75 3
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
|
2月前
|
NoSQL Java Redis
开发实战:使用Redisson实现分布式延时消息,订单30分钟关闭的另外一种实现!
本文详细介绍了 Redisson 延迟队列(DelayedQueue)的实现原理,包括基本使用、内部数据结构、基本流程、发送和获取延时消息以及初始化延时队列等内容。文章通过代码示例和流程图,逐步解析了延迟消息的发送、接收及处理机制,帮助读者深入了解 Redisson 延迟队列的工作原理。
|
6月前
|
消息中间件 NoSQL Java
Redis系列学习文章分享---第六篇(Redis实战篇--Redis分布式锁+实现思路+误删问题+原子性+lua脚本+Redisson功能介绍+可重入锁+WatchDog机制+multiLock)
Redis系列学习文章分享---第六篇(Redis实战篇--Redis分布式锁+实现思路+误删问题+原子性+lua脚本+Redisson功能介绍+可重入锁+WatchDog机制+multiLock)
248 0
|
3月前
|
缓存 NoSQL Java
谷粒商城笔记+踩坑(12)——缓存与分布式锁,Redisson+缓存数据一致性
缓存与分布式锁、Redisson分布式锁、缓存数据一致性【必须满足最终一致性】
163 14
谷粒商城笔记+踩坑(12)——缓存与分布式锁,Redisson+缓存数据一致性
|
5月前
|
负载均衡 NoSQL Java
|
6月前
|
缓存 NoSQL 安全
玩转Redis!非常强大的Redisson分布式集合,少写60%代码
Redisson是Java的Redis客户端,提供实时数据平台服务,简化了分布式环境下的数据管理。它包含RList、RSet、RMap等分布式集合,支持ConcurrentMap和Set接口,确保线程安全和数据一致性。例如,RMap实现了本地缓存和监听器功能,允许数据监听和本地加速读取。此外,还提供了RSet的排序和去重功能,以及RQueue和RBlockingQueue等队列实现,支持阻塞操作。通过Redisson,开发者能轻松处理分布式系统的数据同步和操作。

热门文章

最新文章