spring session cpu占用过高

6 篇文章 0 订阅

  集成spring session很简单,只需几行代码即可。

@Configuration
@EnableRedisHttpSession
public class SessionConfig {

	@Value("${redis.host}")
	private String host;
	@Value("${redis.port}")
	private Integer port;
	@Value("${redis.database}")
	private Integer database;

	@Bean
	public RedisConnectionFactory jedisConnectionFactory() {
		JedisConnectionFactory factory = new JedisConnectionFactory();
		factory.setHostName(host);
		factory.setDatabase(database);
		factory.setPort(port);
		factory.setTimeout(10000);
		return factory;
	}
}

  但请注意,使用EnableRedisHttpSession的默认配置,有可能造成cpu占用过高。这是因为默认使用的是SimpleAsyncTaskExecutor,导致监听redis keyEvent事件时频繁创建线程,造成性能消耗。因此解决方案是定义线程池即可。

@Bean
public ThreadPoolTaskExecutor springSessionRedisTaskExecutor() {
	ThreadPoolTaskExecutor springSessionRedisTaskExecutor = new ThreadPoolTaskExecutor();
	springSessionRedisTaskExecutor.setCorePoolSize(8);
	springSessionRedisTaskExecutor.setMaxPoolSize(16);
	springSessionRedisTaskExecutor.setKeepAliveSeconds(10);
	springSessionRedisTaskExecutor.setQueueCapacity(1000);
	springSessionRedisTaskExecutor.setThreadNamePrefix("SESSION_TASK_EXEC");
	return springSessionRedisTaskExecutor;
}

  有关spring session的实现原因可参考文章:https://www.cnkirito.moe/spring-session-4/。

欢迎关注个人公众号:小虫子编程课
关注个人公众号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值