redis连接数(redis连接数过多)

本篇文章给大家谈谈redis连接数,以及redis连接数过多对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

redis连接数固定不变

可以通过罩辩此修改配置参数解决,工作中,灶消曾遇到redis连接数一直不释放,导致请求阻塞甚至挂掉的问题。重启redis后,短暂性恢复正常,过一会又会异常。后来查阅相关文档了解到,对于此异常现物迅象可以参考通过修改配置参数解决。

timeout 是指客户端和Redis服务端的连接超时时间,默认是0,表示永不超时;

tcp-keepalive 如果值非0,单位是秒,表示将周期性的使用SO_KEEPALIVE检测客户端是否还处于健康状态,避免服务器一直阻塞,官方给出的建议值是60。

Redis连接数与最大连接数

查看:

方法1:在redis-cli命令行使用:info clients可以查看当前的redis连接数

127.0.0.1:6379 info clients

connected_clients:621

client_longest_output_list:0

client_biggest_input_buf:0

blocked_clients:0

127.0.0.1:6379

方法2:config get maxclients 可以查询redis允许的最大连桐纯接数

127.0.0.1:6379 CONFIG GET maxclients

##1) "maxclients"

##2) "10000"

127.0.0.1:6379

设置:

...

...

2.config set maxclients num 可以设置redis允许的最大连接扰郑数

127.0.0.1:6379 CONFIG set maxclients 10

OK

127.0.0.1:6379

3.启动redis.service服务时加参数--maxclients 100000来缓轮颂设置最大连接数限制

redis-server --maxclients 100000 -f /etc/redis.conf

获取客户端信息命令

CLIENT LIST 获取客户端列表

CLIENT SETNAME 设置当前连接点redis的名称

CLIENT GETNAME 查看当前连接的名称

CLIENT KILL ip:port 杀死指定连接

CLIENT LIST

##id=3 addr=127.0.0.1:36588 fd=5 name= age=7 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client

CLIENT SETNAME js

##OK

CLIENT LIST

##id=3 addr=127.0.0.1:36588 fd=5 name=js age=37 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client

CLIENT GETNAME

##"js"

CLIENT KILL id 3

##(integer) 0

释放超时链接配置

查看超时配置

config get timeout

设置超时配置

config set timeout 600

[img]

redis 连接不释放,什么原因,求助

错误信息:IllegalStateException: Invalidated object not currently part of this pool

一.问题描述

前高返些天用多线程执行操作测试验证vanyar-redis连接池,应用是刚重启的状态,执行操作是,开启10个线程同时执行10000次操作。

如下:

执行操作完毕后发现控制台输出9个下面错误信息:

该错误大致意思是说:不能将redis连接放回池内,放回连接池的对象是无效的对象。在网上查了很多同类错误,都说是进行了两次returnResource释放连接资源造成的,因为第一次return成功以后,第二次return就会报上面这个错误。但是显然,我翻遍了代码并没有两次调用returnResource。

查看redis服务端的连接数详细信息如下,前9个连接,idle=453,空闲了453秒了,依然没有释放,而连接池设置的是空闲60秒就会被释放,明显发生异常了。

初步怀疑是多线程执行redis操作,初始化redis连接池有问题。于是重启应用,先执行单线程redis操作,再执行多线程redis操作,没有发生上面的问题。redis服务端连接均能正常释放。由此得出结论,当线程池在未初始化的时候,由于多线程同时执行redis连接池初始化工作引起的问题。

看代码(RedisJedisPool未优化之前):当10个线程同时请求redis连接资源时,10个线程都发现连接池为空(因为创建连接池相比创建线程比较耗时),这时10个线程都各自初始化成功一个连接池,并从中取得redis连接,并执行了redis操作。执行完毕,returnResource的时候,由于此时pool变量的引用是最后一个线程初始化的连接池,前面9个线程获得的redis连接并不属于最后一个连接池的资源,所以抛错:IllegalStateException: Invalidated object not currently part of this pool

二.报错原因分析

线程1 : 创建redis连接池1 : 获得redis连接1

线程2 : 创建redis连接池2 : 获得redis连接2

线程3 : 创建redis连接池3 : 获得redis连接3

……

线程8 : 创建redis连接池8 : 获得redis连接8

线程9 : 创建redis连接池9 : 获得redis连接9

线程10 : 创建redis连接池10 : 获神念祥得redis连接10

全局变量pool引用 指向 redis连接池10

当线程1-9 把redis连接1-9 归还给pool-redis连接池10

reds连接池10自然就报错,说:IllegalStateException: Invalidated object not currently part of this pool

三.解决办法

由于创建线程池,连接池等工作都是相对比较耗时的,所以我们一般放在应用启动的时候就初始化,把连接池的初始化工作交给Spring容器管理,同时把初始化连接池和获取连接两个操作实现方法分离,对初始化连接池的方法加上同步锁机制,并且二次判断是否为空,就算多线程情况下,在二次判断是否为空的时候,pool已经不为空了,直接返回。现在多游搏线程安全的问题就得以解决。

附上,解决前后对比图:

Jmeter接口测试-redis测试客户端连接数问题

1、jmeter脚本,请求昌陆码redis key连接数达到一定数量时,请求报500,无法正常请求成功

报错内容大致如下:

看报错内容,并看耐哪不出来具体问题在哪

2、查看redis客户端悉李连接数

性能redis(6380):0info clients

"# Clients

connected_clients:1970 #当前连接数

client_longest_output_list:0

client_biggest_input_buf:0

blocked_clients:0

"

性能redis(6380):0CONFIG GET maxclients

当客户端连接数超过10000时,请求被限制了,所以脚本请求报500,无法请求成功,当连接数消费完下降时,又能正常请求成功

redis连接数高居不下,怎么破

经过分析,肯定不是redis的问题了,肯定是自己代码有的陵皮逻辑是没有关闭redis的,经过排查,果然有很多redis因为逻辑关系没有关闭

所以建议大家如果并发顷搏量不是很大的话,还是直接在操作redis的时候重新获取redis,然后雀汪祥关闭redis即可,这样就不会出现没有关闭redis的情况了。

关于redis连接数和redis连接数过多的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

标签列表