package com.imutil.common; import org.apache.commons.pool2.impl.GenericObjectPoolConfig; import org.noear.solon.annotation.Bean; import org.noear.solon.annotation.Configuration; import org.noear.solon.annotation.Inject; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; /** * Redis 连接池配置 *

* 读取 app.yml 的 imutil.redis.* 配置,构建 JedisPool 注册为 Solon Bean。 * 用于限流令牌桶、映射/授权缓存、补拉水位线等高频读写场景。 * * @author imutil */ @Configuration public class RedisConfig { @Inject("${imutil.redis.host:localhost}") private String host; @Inject("${imutil.redis.port:6379}") private int port; @Inject("${imutil.redis.password:}") private String password; @Inject("${imutil.redis.database:0}") private int database; @Inject("${imutil.redis.timeout:2000}") private int soTimeout; @Inject("${imutil.redis.connectTimeout:2000}") private int connectTimeout; /** * 构建 Jedis 连接池 */ @Bean public JedisPool jedisPool() { GenericObjectPoolConfig config = new GenericObjectPoolConfig<>(); config.setMaxTotal(16); config.setMaxIdle(8); config.setMinIdle(2); config.setTestWhileIdle(true); config.setTimeBetweenEvictionRunsMillis(30_000); // 空密码兼容:Postgres/Redis 无密码场景传 null,避免鉴权失败 String pwd = (password == null || password.isEmpty()) ? null : password; return new JedisPool(config, host, port, connectTimeout, soTimeout, pwd, database, null); } }