文章详情

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

请输入下面的图形验证码

提交验证

短信预约提醒成功

SpringBoot和redis中怎么使用Lettuce客户端

2023-06-20 19:14

关注

这篇文章给大家介绍SpringBoot和redis中怎么使用Lettuce客户端,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

重写连接工厂实例,更改其LettuceClientConfiguration 为开启拓扑更新

@Configurationpublic class RedisConfig {    @Autowired    private RedisProperties redisProperties;    //这是固定的模板    //自己定义了一个RedisTemplate    @Bean    @SuppressWarnings("all")    public RedisTemplate<String, Object> redisTemplate(@Qualifier("lettuceConnectionFactoryUvPv") RedisConnectionFactory factory) {        RedisTemplate<String, Object> template = new RedisTemplate<>();        template.setConnectionFactory(factory);        //Json序列化配置        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);        ObjectMapper om = new ObjectMapper();        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);        om.activateDefaultTyping(om.getPolymorphicTypeValidator());        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);        //解决序列化问题        om.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);        jackson2JsonRedisSerializer.setObjectMapper(om);        //String的序列化        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();        //key采用String的序列化方式        template.setKeySerializer(stringRedisSerializer);        //hash的key也采用String的序列化方式        template.setHashKeySerializer(stringRedisSerializer);        //value序列化方式采用jackson        template.setValueSerializer(jackson2JsonRedisSerializer);        //hash的value序列化方式采用jackson        template.setHashValueSerializer(jackson2JsonRedisSerializer);        template.afterPropertiesSet();        return template;    }        @Bean(destroyMethod = "destroy")    //这里要注意的是,在构建LettuceConnectionFactory 时,如果不使用内置的destroyMethod,可能会导致Redis连接早于其它Bean被销毁    public LettuceConnectionFactory lettuceConnectionFactoryUvPv() throws Exception {        List<String> clusterNodes = redisProperties.getCluster().getNodes();        Set<RedisNode> nodes = new HashSet<>();        clusterNodes.forEach(address -> nodes.add(new RedisNode(address.split(":")[0].trim(), Integer.parseInt(address.split(":")[1]))));        RedisClusterConfiguration clusterConfiguration = new RedisClusterConfiguration();        clusterConfiguration.setClusterNodes(nodes);        clusterConfiguration.setPassword(RedisPassword.of(redisProperties.getPassword()));        clusterConfiguration.setMaxRedirects(redisProperties.getCluster().getMaxRedirects());        RedisStandaloneConfiguration  redisStandaloneConfiguration=new RedisStandaloneConfiguration();        redisStandaloneConfiguration.setHostName(redisProperties.getHost());        redisStandaloneConfiguration.setPassword(redisProperties.getPassword());        redisStandaloneConfiguration.setDatabase(redisProperties.getDatabase());        redisStandaloneConfiguration.setPort(redisProperties.getPort());        GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();        poolConfig.setMaxIdle(redisProperties.getLettuce().getPool().getMaxIdle());        poolConfig.setMinIdle(redisProperties.getLettuce().getPool().getMinIdle());        poolConfig.setMaxTotal(redisProperties.getLettuce().getPool().getMaxActive());        return new LettuceConnectionFactory(redisStandaloneConfiguration, getLettuceClientConfiguration(poolConfig));    }        private LettuceClientConfiguration getLettuceClientConfiguration(GenericObjectPoolConfig genericObjectPoolConfig) {                ClusterTopologyRefreshOptions topologyRefreshOptions = ClusterTopologyRefreshOptions.builder()                //开启自适应刷新                //.enableAdaptiveRefreshTrigger(ClusterTopologyRefreshOptions.RefreshTrigger.MOVED_REDIRECT, ClusterTopologyRefreshOptions.RefreshTrigger.PERSISTENT_RECONNECTS)                //开启所有自适应刷新,MOVED,ASK,PERSISTENT都会触发                .enableAllAdaptiveRefreshTriggers()                // 自适应刷新超时时间(默认30秒)                .adaptiveRefreshTriggersTimeout(Duration.ofSeconds(25)) //默认关闭开启后时间为30秒                // 开周期刷新                .enablePeriodicRefresh(Duration.ofSeconds(20))  // 默认关闭开启后时间为60秒 ClusterTopologyRefreshOptions.DEFAULT_REFRESH_PERIOD 60  .enablePeriodicRefresh(Duration.ofSeconds(2)) = .enablePeriodicRefresh().refreshPeriod(Duration.ofSeconds(2))                .build();        return LettucePoolingClientConfiguration.builder()                .poolConfig(genericObjectPoolConfig)                .clientOptions(ClusterClientOptions.builder().topologyRefreshOptions(topologyRefreshOptions).build())                //将appID传入连接,方便Redis监控中查看                //.clientName(appName + "_lettuce")                .build();    }}

SpringBoot2.3.x后,可使用配置文件中开启lettuce的拓扑刷新

lettuce:      pool:        max-active: 20        max-wait: -1ms        max-idle: 10        min-idle: 2      cluster:        refresh:          adaptive: true          #20秒自动刷新一次          period: 20

更改连接redis的连接方式,使用jedis连接

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><exclusions><exclusion><groupId>io.lettuce</groupId><artifactId>lettuce-core</artifactId></exclusion></exclusions></dependency><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId></dependency>
spring:  redis:    jedis:      pool:        max-active: ${redis.config.maxTotal:1024}        max-idle: ${redis.config.maxIdle:50}        min-idle: ${redis.config.minIdle:1}        max-wait: ${redis.config.maxWaitMillis:5000}    #lettuce:      #pool:        #max-active: ${redis.config.maxTotal:1024}        #max-idle: ${redis.config.maxIdle:50}        #min-idle: ${redis.config.minIdle:1}        #max-wait: ${redis.config.maxWaitMillis:5000}

关于SpringBoot和redis中怎么使用Lettuce客户端就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

阅读原文内容投诉

免责声明:

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

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

软考中级精品资料免费领

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

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

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

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

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

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

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