redis的pipeline 定义:一次发送批量操作,再统一解析全部返回结果。减少RTT,提高性能。
lettuce下的配置:
/**
* @author jiuyan
* @since 2023/7/3
*/
@Configuration
public class LettuceConfig {
@Bean
public BeanPostProcessor lettuceConnectionFactoryBeanProcessor() {
/**
* 正确配置lettuce的pipeline操作,指定PipeliningFlushPolicy策略,才会一批次发送命令(符合redis的pipeline 定义)。有三种策略。
* Configures the flushing policy when using pipelining. If not set, defaults to flush on each command.
*
* 抓包验证:wireshark
*/
return new BeanPostProcessor() {
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
//在 LettuceConnectionFactory 这个 Bean 初始化之后,设置 PipeliningFlushPolicy 为 flushOnClose
if (bean instanceof LettuceConnectionFactory) {
LettuceConnectionFactory lettuceConnectionFactory = (LettuceConnectionFactory) bean;
//lettuceConnectionFactory.setPipeliningFlushPolicy(LettuceConnection.PipeliningFlushPolicy.flushOnClose());
lettuceConnectionFactory.setPipeliningFlushPolicy(LettuceConnection.PipeliningFlushPolicy.buffered(200)); //向管道添加多少个命令后,执行一次flush。
//本来基于 Lettuce 的 RedisTemplate 中大部分请求都可以通过共享连接使用同一个连接,关闭的话每次都获取的是独占连接。
//lettuceConnectionFactory.setShareNativeConnection(false);
}
return bean;
}
};
}
}