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命令的更多相关文章

  1. 使用pipeline管道执行redis命令

    pipeline管道可以减少后端与redis的连接次数,从而实现了优化. 原理如下: 使用方法: 未使用pipeline前: strict_redis = get_redis_connection(' ...

  2. Python Redis pipeline操作和Redis乐观锁保持数据一致性

    Redis是建立在TCP协议基础上的CS架构,客户端client对redis server采取请求响应的方式交互. redis 乐观锁:也可理解为版本号比较机制,主要是说在读取数据逇时候同时读取其版本 ...

  3. 等待 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 ...

  4. Cola Cloud 基于 Spring Boot, Spring Cloud 构建微服务架构企业级开发平台

    Cola Cloud 基于 Spring Boot, Spring Cloud 构建微服务架构企业级开发平台: https://gitee.com/leecho/cola-cloud

  5. Spring Data JPA例子[基于Spring Boot、Mysql]

    关于Spring Data Spring社区的一个顶级工程,主要用于简化数据(关系型&非关系型)访问,如果我们使用Spring Data来开发程序的话,那么可以省去很多低级别的数据访问操作,如 ...

  6. Spring boot 、mybatis、swagger、c3p0、redis 和mongodb 整合

    文件路径:            添加依赖: <?xml version="1.0" encoding="UTF-8"?> <project ...

  7. Spring boot 、swagger、c3p0、mybatis和redis 整合

    文件路径                添加依赖 <?xml version="1.0" encoding="UTF-8"?> <projec ...

  8. Spring Boot简化了基于Spring的应用开发

    Spring Boot简化了基于Spring的应用开发,通过少量的代码就能创建一个独立的.产品级别的Spring应用. Spring Boot为Spring平台及第三方库提供开箱即用的设置,这样你就可 ...

  9. [权限管理系统(四)]-spring boot +spring security短信认证+redis整合

    [权限管理系统]spring boot +spring security短信认证+redis整合   现在主流的登录方式主要有 3 种:账号密码登录.短信验证码登录和第三方授权登录,前面一节Sprin ...

随机推荐

  1. css去掉button点击后的蓝框

    转自:http://www.inbeijing.org/archives/1139 css控制Button 按钮的点击时候出现蓝色边框的问题 添加css属性,这样在点击安按钮的时候就不会有蓝色边框了. ...

  2. Struts2 : action跳转时带参数跳转

    在实现action跳转到另一个action时,需要携带参数,可以直接在struts.xml配置文件中对应的跳转action的地方加上,参数的配置,用ognl表达式,可以从session中取值. 如果要 ...

  3. SAP 预制发票报错 -Material 20000000 D119223073 in valuation area VNSM has inconsistant ML data- 之对策

    SAP 预制发票报错 -Material 20000000 D119223073 in valuation area VNSM has inconsistant ML data- 之对策 业务人员报对 ...

  4. hashlib(hmac)进阶之client跟server交互

    首先我还是要强调不管任何相同的字符串通过hashlib加密之后都会产生相同的32位字符串,这个是日常Web中常用的加密算法如果我的client发送一个请求过来我server接受到后就要对该密码进行判断 ...

  5. python关于SSL的认证--pycurl模块使用

    今天在做微信支付退款接口的时候,因为需要使用到双向证书的认证,所以一开始是没有头绪的,后来在网上找到了相类似的教程,发现了pycurl模块,才成功实现了证书认证,教程链接:http://blog.cs ...

  6. 机器学习(4)——PCA与梯度上升法

    主成分分析(Principal Component Analysis) 一个非监督的机器学习算法 主要用于数据的降维 通过降维,可以发现更便于人类理解的特征 其他应用:可视化.去噪 通过映射,我们可以 ...

  7. 简简单单,jquery中,使用checkbox控制div的显示与隐藏

    今天开发代码时,发现好久不用jquery就生疏了. 所以作这个记录, 使用checkbox控制div的显示与隐藏. 一,html代码处: <input type="checkbox&q ...

  8. 15-numpy笔记-莫烦pandas-3

    代码 import pandas as pd import numpy as np dates = pd.date_range('20130101', periods=6) df=pd.DataFra ...

  9. win10 配置 hadoop-2.7.2

    win10 配置 hadoop-2.7.2 1.下载 先在 http://acrchive.apache.org/dist/hadoop/common/hadoop-2.7.2/hadoop-2.7. ...

  10. apktool android studio 调试 smali code, 重新打包

    虽然有些菜单的位置跟新版的Android Stuido 3.4 有些不同,但是能用. https://crosp.net/blog/software-development/mobile/androi ...