一个老项目的高并发改造,遇到的redis连接不释放问题。

问题来由

一个老系统使用频率很低,但是一旦用,就是很多人一起用。每次这个时候,服务都会挂掉。
原因是使用mysql数据库做复杂计算。没有使用缓存。

着手解决

框架版本

struts 2.0
spring 3.2

集成redis




    
    
    
    
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
    

    
    
        
            
                
                

                
            
        
        
        
            
                
                
                    
                    
                
                
                    
                    
                
                
                    
                    
                
            
        
    
    
        
        
    
    
    
        
        
        
            
        
        
            
        
        
            
        
        
            
        
        
        
    

    
    
        
    


    
    
        
    

代码优化

添加缓存。

重新方法。减少不要的数据库查询。

异步入库。

并发测试

遇到的问题

高并发测试下,总是报“unexpected end of stream”
找了很多资料,发现高并发下会产生大量的time_wait的socket连接。
最后查看redisTemplater源码,发现是redis配置了enableTransactionSupport开启,这种情况下,redis不会归还连接池的连接。如果不需要使用redis事务,关闭即可。
可参考:
SpringDataRedis事务 专题
Sping Data Redis 使用事务时,不关闭连接的问题

过程中经历

开始根据报错,以为是参数配置的问题,做了一下几件事 。最后终于找到问题。

tomcat服务器性能调优

redis服务器调优

redis参数调优

转载于:https://www.cnblogs.com/morninglight/p/10348879.html

你可能感兴趣的:(一个老项目的高并发改造,遇到的redis连接不释放问题。)