【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中结果:

【spring boot】spring boot 基于redis pipeline 管道,批量操作redis命令的更多相关文章
- 使用pipeline管道执行redis命令
		pipeline管道可以减少后端与redis的连接次数,从而实现了优化. 原理如下: 使用方法: 未使用pipeline前: strict_redis = get_redis_connection(' ... 
- Python Redis pipeline操作和Redis乐观锁保持数据一致性
		Redis是建立在TCP协议基础上的CS架构,客户端client对redis server采取请求响应的方式交互. redis 乐观锁:也可理解为版本号比较机制,主要是说在读取数据逇时候同时读取其版本 ... 
- 等待 Redis 应答 Redis pipeline It's not just a matter of RTT
		小结: 1.When pipelining is used, many commands are usually read with a single read() system call, and ... 
- Cola Cloud 基于 Spring Boot, Spring Cloud 构建微服务架构企业级开发平台
		Cola Cloud 基于 Spring Boot, Spring Cloud 构建微服务架构企业级开发平台: https://gitee.com/leecho/cola-cloud 
- Spring Data JPA例子[基于Spring Boot、Mysql]
		关于Spring Data Spring社区的一个顶级工程,主要用于简化数据(关系型&非关系型)访问,如果我们使用Spring Data来开发程序的话,那么可以省去很多低级别的数据访问操作,如 ... 
- Spring boot 、mybatis、swagger、c3p0、redis 和mongodb 整合
		文件路径: 添加依赖: <?xml version="1.0" encoding="UTF-8"?> <project ... 
- Spring boot 、swagger、c3p0、mybatis和redis 整合
		文件路径 添加依赖 <?xml version="1.0" encoding="UTF-8"?> <projec ... 
- Spring Boot简化了基于Spring的应用开发
		Spring Boot简化了基于Spring的应用开发,通过少量的代码就能创建一个独立的.产品级别的Spring应用. Spring Boot为Spring平台及第三方库提供开箱即用的设置,这样你就可 ... 
- [权限管理系统(四)]-spring boot +spring security短信认证+redis整合
		[权限管理系统]spring boot +spring security短信认证+redis整合 现在主流的登录方式主要有 3 种:账号密码登录.短信验证码登录和第三方授权登录,前面一节Sprin ... 
随机推荐
- Qt压缩和解压 zip
			zlib编译详见 https://blog.csdn.net/zhangxuechao_/article/details/85049711 下载quazip https://github.com/st ... 
- Jenkins+gradle+git部署
			感谢博友分享,这边记录下https://blog.csdn.net/jiankeufo/article/details/78228334 我的密码7789cc2b62114e9da9fb78b0aa3 ... 
- Fundebug录屏插件更新至0.5.0,新增domain参数
			摘要: 通过配置domain来保证"视频"的正确录制 录屏功能介绍 Fundebug提供专业的异常监控服务,当线上应用出现 BUG 的时候,我们可以第一时间报警,帮助开发者及时发现 ... 
- 多线程学习笔记(三) BackgroundWorker 暂停/继续
			BackgroundWorker bw; private ManualResetEvent manualReset = new ManualResetEvent(true); private void ... 
- MySql学习笔记四
			MySql学习笔记四 5.3.数据类型 数值型 整型 小数 定点数 浮点数 字符型 较短的文本:char, varchar 较长的文本:text, blob(较长的二进制数据) 日期型 原则:所选择类 ... 
- excel  导出导入
			/** * 导出 * @param * @param * @return */ public function exportexcel() { set_time_limit(0); ini_set(' ... 
- mysql中的case when then 的用法
			将立立饭饭的性别变更为女 ,烦烦 嗯嗯 问我的性别变更为男 update `table` set sex = ( case when sname in('立立','饭饭') then '女' else ... 
- 201871010118-唐敬博《面向对象程序设计(java)》第十周学习总结
			博文正文开头格式:(2分) 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.co ... 
- django学习-管理界面、视图
			django管理界面 设计背景 为你的员工或客户生成一个用户添加,修改和删除内容的后台是一项缺乏创造性和乏味的工作.因此,django全自动地根据模型创建后台界面. django产生于一个公众页面和内 ... 
- VC 静态库与动态库(四)动态库创建与使用_显示调用
			在第三章的基础上,接着添加一个显示调用项目 显示调用项目创建: 1.给解决方案添加一个新的控制台项目DisplayCall用于测试动态库,创建完成后设置为启动项目 2.DisplayCall.cpp添 ... 
