我有一个带Redis缓存的Simple Spring Boot 1.5.x REST API应用程序 . 我没有添加任何自定义配置器,Spring引导自动配置了Jedis . Redis属性如下,

spring.cache.type = redis
spring.redis.host = localhost
spring.redis.port = 6379
spring.redis.pool.max-active = 10000
spring.redis.pool.max-idle = 9000
spring.redis.pool.min-idle = 9000

Spring Boot应用程序类

@SpringBootApplication 
@EnableCaching 
public class DemoApplication {
  public static void main(String[] args) {
    pringApplication.run(DemoApplication.class, args);  
  } 
}

用法

@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping(value = "/api/users/{id}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
    @Cacheable(value = "UserDto", key = "#id")
    public UserDto getUser(@PathVariable("id") Integer id){
        User u = userService.getUser(id);
        UserDto dto = new UserDto(u.getId(), u.getFirstName(), u.getLastName());
        return dto;
    }
}

如果我使用JMeter加载API endpoints 并使用netstat连续监视维护到Redis的连接数,我可以看到以下输出 .

Netstat命令:

while [ true ] ; do  sudo netstat -anp | grep EST|grep "127.0.0.1:6379          ESTABLISHED"|wc -l; done

输出

9000
9000
9006
9016
9031
9019
9000
9015
9005
9027
9046
9011
9005
9013
9011
9054
9010
9094
9061
9091
9036
9010
9004
9003
8935
8826
8387
7910
7122
6631
6524
6420
6300
6190
5776
5482
5475
5293
5187
5118
5081
5020
4992
4817
3996
3485
3582
6504
8964
9031
9136
9000
9025
9035
9000
9000

你可以清楚地看到连接的数量在中间减少,然后再次上升到9000,这似乎不是理想的结果 .

另外,我可以看到以下DEBUG日志 .

2018-06-11 14:20:18.010 DEBUG 4151 --- [io-8080-exec-44] o.s.d.redis.core.RedisConnectionUtils    : Opening RedisConnection
2018-06-11 14:20:18.012 DEBUG 4151 --- [io-8080-exec-19] o.s.d.redis.core.RedisConnectionUtils    : Closing Redis Connection
2018-06-11 14:20:18.015 DEBUG 4151 --- [io-8080-exec-19] o.s.d.redis.core.RedisConnectionUtils    : Opening RedisConnection
2018-06-11 14:20:18.015 DEBUG 4151 --- [io-8080-exec-34] o.s.d.redis.core.RedisConnectionUtils    : Closing Redis Connection
2018-06-11 14:20:18.015 DEBUG 4151 --- [io-8080-exec-34] o.s.d.redis.core.RedisConnectionUtils    : Opening RedisConnection
2018-06-11 14:20:18.015 DEBUG 4151 --- [io-8080-exec-41] o.s.d.redis.core.RedisConnectionUtils    : Closing Redis Connection
2018-06-11 14:20:18.015 DEBUG 4151 --- [io-8080-exec-41] o.s.d.redis.core.RedisConnectionUtils    : Opening RedisConnection
2018-06-11 14:20:18.015 DEBUG 4151 --- [io-8080-exec-49] o.s.d.redis.core.RedisConnectionUtils    : Closing Redis Connection
2018-06-11 14:20:18.016 DEBUG 4151 --- [io-8080-exec-49] o.s.d.redis.core.RedisConnectionUtils    : Opening RedisConnection
2018-06-11 14:20:18.016 DEBUG 4151 --- [io-8080-exec-29] o.s.d.redis.core.RedisConnectionUtils    : Closing Redis Connection
2018-06-11 14:20:18.016 DEBUG 4151 --- [io-8080-exec-29] o.s.d.redis.core.RedisConnectionUtils    : Opening RedisConnection
2018-06-11 14:20:18.016 DEBUG 4151 --- [nio-8080-exec-3] o.s.d.redis.core.RedisConnectionUtils    : Closing Redis Connection
2018-06-11 14:20:18.016 DEBUG 4151 --- [nio-8080-exec-3] o.s.d.redis.core.RedisConnectionUtils    : Opening RedisConnection
2018-06-11 14:20:18.016 DEBUG 4151 --- [io-8080-exec-51] o.s.d.redis.core.RedisConnectionUtils    : Closing Redis Connection
2018-06-11 14:20:18.016 DEBUG 4151 --- [io-8080-exec-51] o.s.d.redis.core.RedisConnectionUtils    : Opening RedisConnection
2018-06-11 14:20:18.017 DEBUG 4151 --- [io-8080-exec-45] o.s.d.redis.core.RedisConnectionUtils    : Closing Redis Connection
2018-06-11 14:20:18.017 DEBUG 4151 --- [io-8080-exec-45] o.s.d.redis.core.RedisConnectionUtils    : Opening RedisConnection

基于code in GitHub,这是由于连续调用doGetConnection和releaseConnection方法而发生的 .

  • 这是可取的吗?如果是这样,看到连接数小于9000的解释是什么?

  • 如果这不准确我会尝试什么?