栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【redis入门到实战 day6】

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【redis入门到实战 day6】

Redisson介绍

文章目录
  • Redisson介绍
  • redisson入门
  • 使用redisson的分布式锁
  • 图解Redisson可重入原理 及对应lua脚本
  • redisson分布式锁原理
  • 总结


Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data
Grid)。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务,其中就包含了各种分布式锁的实现。

官网地址: https://redisson.org
GitHub地址: https://github.com/redisson/redisson

redisson入门
@Configuration
public class RedisConfig {
    @Bean
    public RedissonClient redissonClient(){
        //配置类
        Config config = new Config();
        //添加redis地址,这里加的单点地址,也可使用config.useClusterServers()添加集群地址
        config.useSingleServer().setAddress("redis://192.168.136.130:6379").setPassword("123321");
        //创建客户端
        return Redisson.create(config);

    }
}

//引入依赖

        
            org.redisson
            redisson
            3.13.2
        
使用redisson的分布式锁
@Test
void testRedisson() throws InterruptedException {
    // 获取锁(可重入),指定锁的名称    
    RLock lock = redissonClient.getLock("anyLock");
    // 尝试获取锁,参数分别是:获取锁的最大等待时间(期间会重试),锁自动释放时间,时间单位  
    boolean isLock = lock.tryLock(1, 10, TimeUnit.SECONDS);
    // 判断释放获取成功    
     if(isLock){        
        try {
            System.out.println("执行业务");
        } finally {
            // 释放锁          
            lock.unlock();
        }
    }

}
图解Redisson可重入原理 及对应lua脚本


redisson分布式锁原理

1: 可重入,利用hash结构记录id和重入次数
2: 可重试:利用信号量和pubSub功能实现等待、唤醒,获取锁失败的重试机制
3: 超时续约:利用看门狗watchDog,每隔一段时间(releasTime/3),重置超时时间
![在这里插入图片描述](https://img-blog.csdnimg.cn/901329562c1b4dfd978f2904558ba1ff.png

总结

1)不可重入Redis分布式锁:
原理:利用setnx的互斥性;利用ex避免死锁;释放锁时判断线程标示
缺陷:不可重入、无法重试、锁超时失效
2)可重入的Redis分布式锁:
原理:利用hash结构,记录线程标示和重入次数;利用watchDog延续锁时间;利用信号量控制锁重试等待
缺陷:redis宕机引起锁失效问题
3)Redisson的multiLock:
原理:多个独立的Redis节点,必须在所有节点都获取重入锁,才算获取锁成功
缺陷:运维成本高、实现复杂

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/999190.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号