redisPool使用

Jedis jedis = jedisPool.getResource();
jedis.select(4);
jedis.hset(key, "id", id);
jedis.hset(key, "username", username);
jedis.hset(key, "password", password);

其中jedis.select(4);是选择第4个数据库,redis默认9个数据库;

 

现在redisPool获取jedis插入数据后,java代码能获取到数据,但是在服务器客户端查询不到?


        
	Jedis jedis = jedisPool.getResource();
		try {
			String key = MD5.encode(id + userInfoBean.hashCode());
			Cookie userCookie = new Cookie("remember", key);
			userCookie.setMaxAge(60 * 60 * 24 * 3);
			// 将用户信息加密,存入redis
			String name = userInfoBean.getUsername();
			String password = userInfoBean.getPassword();
			String username = SymmetricEncoder.AESEncode(id, name);
			if (flag == null || flag != 1) {
				password = SymmetricEncoder.AESEncode(name, password);
			}
			jedis.select(4);//选择存入哪个库,redis.conf中默认有16个库,所以获取的时候也要选择存入的库中
			jedis.hset(key, "id", id);
				jedis.hset(key, "username", username);
				jedis.hset(key, "password", password);
			// 设置过期时间为3天
			jedis.expire(key, 60 * 60 * 24 * 3);
			// 将密钥放入cookie
			response.addCookie(userCookie);
			return true;
		} catch (Exception e) {
			throw new RuntimeException(e);
		} finally {
			jedis.close();
		}

重点是当时选择了第4个库,但是取的时候没有从第4个库中取!!!!!!!!!!!!!!!

jedis.select(4);//选择存入哪个库,redis.conf中默认有16个库,所以获取的时候也要选择存入的库中

### 关于 Redis 连接池实现及其潜在问题 Redis 的连接池机制对于高效管理客户端与服务器之间的通信至关重要。Spring Data Redis 提供了一种内置的方式来管理和配置 Redis 连接池,通常通过 `Lettuce` 或 `Jedis` 驱动程序实现。 #### Spring Boot 中的 Redis 连接池配置 在 Spring Boot 和 Spring Data Redis 的集成中,默认情况下会使用 Lettuce 作为 Redis 客户端驱动[^4]。Letture 使用 Netty 实现非阻塞 I/O 操作,并支持基于线程安全的连接池。以下是典型的连接池配置方式: ```yaml spring: redis: host: localhost port: 6379 lettuce: pool: max-active: 8 # 最大活跃连接数 max-idle: 8 # 最大空闲连接数 min-idle: 0 # 最小空闲连接数 ``` 上述 YAML 文件中的参数定义了连接池的行为,具体含义如下: - **max-active**: 表示连接池允许的最大活动连接数量。 - **max-idle**: 表示连接池中最多可以保持多少个空闲连接。 - **min-idle**: 表示连接池中最少要保留的空闲连接数量。 这些设置可以通过调整以适应不同的负载需求和资源限制。 #### 常见的 Redis 连接池问题及解决方案 1. **连接泄漏** 如果应用程序未能正确关闭 Redis 连接,则可能导致连接耗尽。这通常是由于未调用 `close()` 方法释放连接引起的。确保每次操作结束后都显式地关闭连接或依赖框架自动处理。 2. **超时异常** 当请求量过大或者网络延迟较高时,可能会遇到连接获取失败的情况。此时应增加超时时间和重试次数,例如修改以下属性: ```yaml spring.redis.timeout: 5000ms # 设置连接超时时间为5秒 ``` 3. **高并发下的性能瓶颈** 在高并发场景下,如果连接池大小不足,可能引发排队现象甚至拒绝服务。建议动态扩展连接池容量并优化应用逻辑减少不必要的频繁访问。 4. **内存占用过高** 大规模部署环境下需要注意监控 Redis Server 及 Client 端内存消耗情况,防止因过多缓存数据而导致 OOM (Out Of Memory)。 #### 示例代码展示如何自定义连接工厂 下面是一个简单的例子演示如何创建一个带有特定选项的 RedisConnectionFactory: ```java import org.springframework.context.annotation.Bean; import org.springframework.data.redis.connection.RedisStandaloneConfiguration; import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration; import org.springframework.data.redis.connection.lettuce.LettucePoolingClientConfiguration; import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; @Bean public LettuceConnectionFactory redisConnectionFactory() { RedisStandaloneConfiguration config = new RedisStandaloneConfiguration("localhost", 6379); LettucePoolingClientConfiguration poolingConfig = LettucePoolingClientConfiguration.builder() .poolConfig(GenericObjectPoolConfig()) .build(); return new LettuceConnectionFactory(config, poolingConfig); } private GenericObjectPoolConfig<?> GenericObjectPoolConfig(){ GenericObjectPoolConfig<?> poolConfig = new GenericObjectPoolConfig<>(); poolConfig.setMaxTotal(8); // Maximum number of connections allowed. poolConfig.setMinIdle(0); // Minimum idle connections to maintain. poolConfig.setMaxIdle(8); // Maximum idle connections before eviction. return poolConfig; } ``` 此段代码展示了如何构建具有定制化行为的 Redis 连接对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值