探索jedis连接池预热优化高并发

 更新时间:2023年10月25日 09:55:06   作者:codecraft  
这篇文章主要为大家介绍了jedis连接池预热优化高并发深入探索示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

本文主要研究一下jedis连接池的预热

预热

@Component
@Slf4j
public class JedisWarmUp implements CommandLineRunner {
    @Autowired
    JedisConnectionFactory jedisConnectionFactory;
    @Override
    public void run(String... args) throws Exception {
        GenericObjectPoolConfig poolConfig = jedisConnectionFactory.getPoolConfig();
        if (poolConfig == null) {
            return ;
        }
        try {
            DirectFieldAccessor accessor = new DirectFieldAccessor(jedisConnectionFactory);
            JedisPool jedisPool = (JedisPool) accessor.getPropertyValue("pool");
            if (jedisPool == null) {
                log.info("jedisConnectionFactory.pool is null");
                return;
            }
            int warmUpSize = poolConfig.getMaxIdle();
            warmUp(jedisPool, warmUpSize);
        } catch (Exception e) {
            log.error("warmup jedisPool error:{}", e.getMessage());
        }
    }
    private void warmUp(JedisPool jedisPool, int warmUpSize) {
        List<Jedis> warmUpList = new ArrayList<>(warmUpSize);
        for (int i=0; i< warmUpSize; i++) {
            Jedis jedis = jedisPool.getResource();
            jedis.ping();
            warmUpList.add(jedis);
        }
        warmUpList.stream().forEach(jedis -> jedis.close());
    }
}
这里取了maxIdle配置来进行预热,通过DirectFieldAccessor来获取jedisConnectionFactory对象的pool

小结

在高并发场景,通常需要对资源进行预热,比如数据库连接池、redis连接池、线程池等等,可以避免首次请求慢的问题。这里通过先从连接池借一批连接,然后归还一批连接来达到预热的目的。

以上就是探索jedis连接池预热优化高并发的详细内容,更多关于jedis连接池预热的资料请关注脚本之家其它相关文章!

相关文章

  • Java的线程池ThreadPoolExecutor及多种线程池实现详解

    Java的线程池ThreadPoolExecutor及多种线程池实现详解

    这篇文章主要介绍了Java的线程池ThreadPoolExecutor及多种线程池实现详解,ThreadPoolExecutor 使用 int 的高 3 位来表示线程池状态,低 29 位表示线程数量,之所以将信息存储在一个变量中,是为了保证原子性,需要的朋友可以参考下
    2024-01-01
  • Java泛型实现类型安全的通用类型转换器

    Java泛型实现类型安全的通用类型转换器

    在开发中,我们常常需要在不同类型之间进行转换,为了提高代码的可读性与安全性,Java的泛型机制提供了强大的类型检查能力,下面我们就来看看如何通过泛型实现类型安全的通用转换器
    2024-11-11
  • Java中File类方法详解以及实践

    Java中File类方法详解以及实践

    Java File类的功能非常强大,利用java基本上可以对文件进行所有操作,下面这篇文章主要给大家介绍了关于Java中File类方法以及实践的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • Java实现的3des加密解密工具类示例

    Java实现的3des加密解密工具类示例

    这篇文章主要介绍了Java实现的3des加密解密工具类,结合完整实例形式分析了3des加密解密的具体步骤与相关操作技巧,需要的朋友可以参考下
    2017-10-10
  • profiles.active多环境开发、测试、部署过程

    profiles.active多环境开发、测试、部署过程

    这篇文章主要介绍了profiles.active多环境开发、测试、部署,主要讲如何使用profiles.active这个变量,让我们在开发过程快速切换环境配置,以及如何使一个部署适配各种不同的环境,需要的朋友可以参考下
    2023-03-03
  • mybatis如何对大量数据的游标查询

    mybatis如何对大量数据的游标查询

    这篇文章主要介绍了mybatis如何对大量数据的游标查询问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • Sa-Token不同模式实现单地登录 多地登录 同端互斥登录

    Sa-Token不同模式实现单地登录 多地登录 同端互斥登录

    这篇文章主要为大家介绍了Sa-Token不同模式实现单地登录 多地登录 同端互斥登录,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • Spring.Net控制反转IoC入门使用

    Spring.Net控制反转IoC入门使用

    这篇文章主要为大家详细介绍了Spring.Net控制反转IoC入门使用的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • SpringBoot+Redis实现布隆过滤器的示例代码

    SpringBoot+Redis实现布隆过滤器的示例代码

    本文主要介绍了SpringBoot+Redis实现布隆过滤器的示例代码,文中根据实例编码详细介绍的十分详尽,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • 如何在mapper文件中使用in("str1","str2")

    如何在mapper文件中使用in("str1","str2")

    这篇文章主要介绍了如何在mapper文件中使用in("str1","str2"),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01

最新评论