【spring boot】spring boot 基于redis pipeline 管道,批量操作redis命令
spring boot 2.x
使用RedisTemplate 操作
===================================
1.pom.xml
<!--spring2.0集成redis所需common-pool2--> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>2.4.2</version> </dependency> <!-- 使用redis的LUA脚本 需要序列化操作的jar--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency>
2.redisConfig 需要加入spring的自动配置

/** * @author sxd * @date 2019/5/27 16:13 */ @Configuration @AutoConfigureAfter(RedisAutoConfiguration.class) public class RedisConfig { @Bean public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) { RedisTemplate redisTemplate = new RedisTemplate(); redisTemplate.setConnectionFactory(factory); RedisSerializer keySerializer = new StringRedisSerializer(); // RedisSerializer valueSerializer = new GenericJackson2JsonRedisSerializer(); //key采用字符串反序列化对象 redisTemplate.setKeySerializer(keySerializer); //value也采用字符串反序列化对象 //原因:管道操作,是对redis命令的批量操作,各个命令返回结果可能类型不同 //可能是 Boolean类型 可能是String类型 可能是byte[]类型 因此统一将结果按照String处理 redisTemplate.setValueSerializer(keySerializer); return redisTemplate; } }
3.controller

@Autowired RedisTemplate redisTemplate; /** * redis 批量操作其中一种方式 * redis pipeline 管道技术 */ @RequestMapping(value = "/redisPipeline" ) public void redisPipeline(){ // 1.executePipelined 重写 入参 RedisCallback 的doInRedis方法 List<Object> resultList = redisTemplate.executePipelined(new RedisCallback<Object>() { @Override public String doInRedis(RedisConnection connection) throws DataAccessException { // 2.connection 打开管道 connection.openPipeline(); // 3.connection 给本次管道内添加 要一次性执行的多条命令 // 3.1 一个set操作 byte[] key1 = "mykey1".getBytes(); byte[] value1 = "字符串value".getBytes(); connection.set(key1,value1); // 3.2一个批量mset操作 Map<byte[],byte[]> tuple = new HashMap<>(); tuple.put("m_mykey1".getBytes(),"m_value1".getBytes()); tuple.put("m_mykey2".getBytes(),"m_value2".getBytes()); tuple.put("m_mykey3".getBytes(),"m_value3".getBytes()); connection.mSet(tuple); // 3.3一个get操作 connection.get("m_mykey2".getBytes()); // 4.关闭管道 不需要close 否则拿不到返回值 // connection.closePipeline(); // 这里一定要返回null,最终pipeline的执行结果,才会返回给最外层 return null; } }); // 5.最后对redis pipeline管道操作返回结果进行判断和业务补偿 for (Object str : resultList) { System.out.println(String.valueOf(str)); } }
运行结果:
true true m_value2
redis中结果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器