Redis问题:ERR max number of clients reached

redis高并发下,可能有些连接没有释放,导致连接数耗尽,会提示

ERR max number of clients reached

这个时候通过命令查看客户端使用连接数

[root@home-server-60 bin]# ./redis-cli -h 192.168.0.60 -p 6379
192.168.0.60:6379> info Clients
# Clients
connected_clients:3
client_recent_max_input_buffer:4
client_recent_max_output_buffer:0
blocked_clients:0
192.168.0.60:6379> 

查看最大连接数配置,这里配置的是10000:

192.168.0.60:6379> config get maxclients
1) "maxclients"
2) "10000"
192.168.0.60:6379>

通过客户端设置最大连接数,这种方法重启redis后就会失效,所以还是改配置文件好些:

192.168.0.60:6379> config set maxclients 8000
OK
192.168.0.60:6379> config get maxclients
1) "maxclients"
2) "8000"
192.168.0.60:6379> 

同时可以通过linux端口号查看客户端连接数:

[root@home-server-60 ~]# netstat -an|grep 6379|wc -l
4879

jedis正确的做法是每次都要关闭连接,如set调用,都要close:

public void set(String key ,String value) {
		Jedis jedis = getJedis();
		jedis.set(key, value);
		//释放本次连接
		returnJedis(jedis);
	}
	
	private Jedis getJedis() {
        return jedisPool.getResource();
    }
	/**
	 * jedis 3.2做法,释放连接
	 * @param jedis
	 */
	private void returnJedis(Jedis jedis) {
        if (null != jedis) {
        	jedis.close();
        }
    }

注意:

有时客户端连接数配置的有点大,启动的时候会报错:

You requested maxclients of 10000 requiring at least 10032 max file descriptors.
Redis can’t set maximum open files to 10032 because of OS error: Operation not permitted.
Current maximum open files is 4096. Maxclients has been reduced to 4064 to compensate for low ulimit. If you need higher maxclients increase ‘ulimit –n’.

通过命令查看系统open file 的限制,如果有点小,可以改大些。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redis是一种开源的内存数据库,用于数据缓存和存储。当使用jedis客户端连接Redis时,可能会遇到一些异常情况。其中一种异常是"redis.clients.jedis.exceptions.jedisdataexception: err wrong number of arguments",意为参数个数错误。 该异常通常是由于Redis命令的参数个数不匹配引起的。在使用jedis发送Redis命令时,如果命令所需的参数数量与实际传递的参数数量不一致,就会触发该异常。 发生这种异常的原因可能有几种: 1. 参数个数不足:当执行某个Redis命令时,如果没有提供足够的参数,就会抛出该异常。例如,执行"SET"命令时,至少需要两个参数:key和value,如果只提供了一个参数就会触发异常。 2. 参数个数过多:同样地,当执行Redis命令时,如果提供了多于所需数量的参数,也会引发该异常。Redis命令的参数数量是固定的,如果传递的参数超过了该数量,就会抛出异常。 3. 参数类型错误:有些Redis命令对参数的类型有特定的要求。如果传递了错误类型的参数,也可能会导致该异常的发生。 解决该异常的方法是确保传递给Redis命令的参数数量和类型与命令的要求一致。可以通过参考Redis官方文档或jedis客户端的使用手册来了解每个命令的参数要求。 此外,还需要确保使用正确的方法调用来执行Redis命令,例如使用正确的方法名称和正确的参数顺序。 总结起来,redis.clients.jedis.exceptions.jedisdataexception: err wrong number of arguments异常是由于Redis命令的参数数量或类型不正确导致的。通过检查参数的数量和类型是否与命令要求一致,可以解决此异常。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值