文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

spring boot如何集成redisson

2023-07-04 12:57

关注

这篇文章主要介绍了spring boot如何集成redisson的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇spring boot如何集成redisson文章都会有所收获,下面我们一起来看看吧。

集成及注意事项

redisson支持redis环境,单机、集群、哨兵、云等。

这里就讲一下集群模式需要注意的地方,redisson启动会检测master/slave节点是否正常,一般来说3分片3主3从是没有什么问题的,但是如果测试环境1分片1主1从或者3主都是启动不了的。

除了环境需要注意,还有注意兼容有无密码的情况。

手动注入redisson配置

一般情况下,生产环境都是有密码的。有密码的话,建议手动注入redisson配置,不用spring boot来帮你集成,因为可能spring boot识别不了密码。

@Configurationpublic class RedissonConfiguration {    @Value("${spring.redis.cluster.nodes}")    private String node;    @Value("${spring.redis.password:}")    private String password;    @Bean    public RedissonClient redissonClient() {        Config config = new Config();        String[] nodes = node.split(",");        ClusterServersConfig clusterServersConfig = config.useClusterServers();        for (String nodeAddress : nodes) {            clusterServersConfig.addNodeAddress(prefixAddress(nodeAddress));        }        if (StringUtils.isNotBlank(password)) {            clusterServersConfig.setPassword(password);        }        return Redisson.create(config);    }    private String prefixAddress(String address) {        if (!StringUtils.isBlank(address) && !address.startsWith("redis")) {            return "redis://" + address;        }        return address;    }}

上面可以根据自己实际情况调优一些配置。

当然除了密码需要注意,还有一点就是是否有ssl,目前所在company是用的亚马逊云,会有ssl

spring boot 兼容 redis 可以在yaml配置里天际: Ssl:true,但对于redisson来说添加前缀就可以啦:

rediss:// + ip:端口或者域名

具体yaml配置

spring:  redis:    cluster:      nodes: rediss://clustercfg.xxx    password: 'xxx'    timeout: 30000    Ssl: true    lettuce:      pool:        max-idle: 100

利用锁的互斥策略,一开始这样的

@Scheduled(cron = "${xxx:0 0 */2 * * ?}")public void createProcess() {    RLock lock = redisson.getLock(key);    try {        if (lock.tryLock()) {           // 执行运行程序        } else {            log.info("createProcess 获取锁失败");        }    } catch (Exception e) {        log.error("xxx", e);    } finally {        // 是否有锁 && 是否当前线程        if (lock != null && lock.isLocked() && lock.isHeldByCurrentThread()) {            lock.unlock();        }    }}

咋一看是没有什么问题的,但是本次重构的定时任务比较多,因此会涉及到很多try catch相同的代码。

注解方式

解决重复代码方式之一就是封装,在就是注解切面,想到注解方式更加灵活

于是

@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD)public @interface RedissonSyncLock {    String pref();        String keyEL();        int waitSec() default 0;}

需要一个切面

@Slf4j@Aspect@Component@RequiredArgsConstructorpublic class RedissonSyncLockAspect {    private final Redisson redisson;    @Around(value = "@annotation(xxx.RedissonSyncLock)")    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {        MethodSignature signature = (MethodSignature) joinPoint.getSignature();        RedissonSyncLock redissonSyncLock = signature.getMethod().getAnnotation(RedissonSyncLock.class);        Object[] args = joinPoint.getArgs();        String key = SpelUtil.parseSpel(signature.getMethod(), args, redissonSyncLock.keyEL());        RLock lock = null;        try {            if (StringUtils.isNotBlank(key) && !StringUtils.equals(key, "null")                 lock = redisson.getLock(redissonSyncLock.pref().concat(key));                if (lock.tryLock(redissonSyncLock.waitSec(), TimeUnit.SECONDS)) {                    return joinPoint.proceed();                }            }            log.info("RedissonSyncLockAspect 上锁失败 {}", key);        } finally {            if (lock != null && lock.isLocked() && lock.isHeldByCurrentThread()) {                lock.unlock();            }        }    }}

使用方法:

@RedissonSyncLock(pref = KeyConstant.xxx, keyEL = "#bean.accountNo")private void xxx(Bean bean){     // 程序执行}

的确使用起来是比较方便的。

关于“spring boot如何集成redisson”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“spring boot如何集成redisson”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯