当对Redis进行高频次的命令发送时,由于网络IO的原因,会耗去大量的时间。所以Redis提供了管道技术,就是将命令一次性批量的发送给Redis,从而减少IO。

一、Jedis对redis的管道进行操作

1、获取管道对象

String redisIp = "192.168.110.110";
        int reidsPort = 6379;
Jedis jedis = new Jedis(redisIp, reidsPort);
        Pipeline pl = jedis.pipelined();

获得到Pipeline 对象之后的操作跟redis类似,由于管道的返回对象Response<T>

所以要对应你的命令创建接收集合

2、声明接收对象(注意类型匹配)

HashMap<String, Response<String>> map = new  HashMap<String,Response<String>>(20);
        HashMap<String, Response<Long>> map1 = new  HashMap<String,Response<Long>>(20);

map.put("shiqing1", pl.set("shiqing1", "tiancai"));
        map1.put("shi", pl.sadd("shi", "frefbrier"));
        map.put("shiqing1value", pl.get("shiqing1"));
        map1.put("shiqing", pl.lpush("shiqing", "name"));
        map1.put("qing", pl.hsetnx("qing", "name", "sq"));

现在把所有要执行的命令都放进管道对象中,下一步就是执行这些命令

3、一次性执行所有命令

pl.sync();

这一步就是将所有命令都一次性执行,将结果保存在之前的map和map1中。

System.out.println(map.get("shiqing1").get());
        System.out.println(map1.get("shi").get());
        System.out.println(map.get("shiqing1value").get());
        System.out.println(map1.get("shiqing").get());
        System.out.println(map1.get("qing").get());

结果打印:

OK
0
tiancai
9
0

最后不要忘记关掉管道

try {
pl.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

二、Redisson对redis的批量进行操作

1、获取批量对象

Config config = new Config();

config. useSingleServer().setAddress("127.0.0.1:6379");

RedissonClient redisson = Redisson.create(config);

RBatch batch = redisson.createBatch();

获取到RBatch对象之后,跟jedis一样,要先把要执行的命令都放进Rbatch。

batch.getSet("setkey").readAllAsync();
batch.getList("listkey").readAllAsync();
batch.getMap("hashkey").addAndGetAsync("hashfiled", 2);
batch.getAtomicDouble("key1");
batch.getAtomicLong("key2");
batch.getBitSet("key3");

2、声明接收对象

List<?> res = new ArrayList<?>();

Redisson的管道返回对象是一个任意类型的list

3、一次性执行所有命令

res = batch.execute();

Redisson的批量操作是异步的。

然后就可以拿到对应的结果。res里面包括全部的命令执行结果。

转载于:https://www.cnblogs.com/chenkeyu/p/8621734.html

Redis中RedisTemplate和Redisson管道的使用相关推荐

  1. php怎么用redisson,Redis中RedisTemplate和Redisson管道的使用

    当对Redis进行高频次的命令发送时,由于网络IO的原因,会耗去大量的时间.所以Redis提供了管道技术,就是将命令一次性批量的发送给Redis,从而减少IO. 一.Jedis对redis的管道进行操 ...

  2. 为什么我Redis中key惊现“乱码”?

    为什么Redis中key会惊现"乱码"? 最近在做一个秒杀项目,过程中大量应用到了redis. 而我在用ElasticJob进行数据化初始化到Redis数据库时发现这些key都出现 ...

  3. redis中的事务、lua脚本和管道的使用场景

    https://blog.csdn.net/fangjian1204/article/details/50585080 事务 redis中的事务并不像mysql中那么完美,只是简单的保证了原子性.re ...

  4. Redis 发布订阅原理以及springboo中RedisTemplate集成

    一.Redis发布订阅原理 Redis的架构包括两个部分:Redis Client和Redis Server,即客户端和服务端.客户端负责向服务器端发送请求并接受来自服务器端的响应.服务器端负责处理客 ...

  5. Spring中RedisTemplate方法中,redis相关操作笔记。[redis生成指定长度自增批次号,删除、设置过期时间等]

    Spring中RedisTemplate方法中,redis相关操作笔记. redis获取自增批次号 // opsForValue()生成long UUID = redisTemplate.opsFor ...

  6. Java封装redis工具类RedisUtils,以及在@Postconstruct注解中调用redis可能出现redisTemplate空指针异常

    1.封装redis工具类RedisUtils import org.springframework.data.redis.core.RedisTemplate; import org.springfr ...

  7. 项目工程重启后,用RedisTemplate获取不了在redis中存在的数据

    今天碰到一个很奇怪的问题,redis中插入的数据,在工程没有重启之前,是可以读取到的,工程重启之后,就读取不到了,但是登录redis的客户端查看,发现数据其实是存在的 用的下面这种方式读写: @Ove ...

  8. .NET客户端实现Redis中的管道(PipeLine)与事物(Transactions)(八)

    序言 Redis中的管道(PipeLine)特性:简述一下就是,Redis如何从客户端一次发送多个命令,服务端到客户端如何一次性响应多个命令. Redis使用的是客户端-服务器模型和请求/响应协议的T ...

  9. Spring Redis中使用Lua脚本实现高并发原子操作

    1. 前言 在上一文中我对 Lua 语言的一些简单的语法及其在 Redis 中的操作进行了介绍,但是在 Java 开发中我们还需要进一步的学习才能使这种技术落地.今天就结合Spring Data Re ...

最新文章

  1. OpenCV中图像显示你不知道的编程技巧
  2. LIVE预告 | 哈佛大学CS博士徐莉莉:用博弈论保护野生动物
  3. 配置Apache 2.2+PHP 5.2.9支持OCI通过Oracle9i Client连接Oracle
  4. mongodb模糊查询 php7_详解php7如何实现MongoDB模糊查询
  5. Machine Learning week 7 quiz: Support Vector Machines
  6. Linux命令应用大词典-第36章 密码和证书管理
  7. 使用jupyter计算正态分布_专栏 | 基于 Jupyter 的特征工程手册:数据预处理(三)...
  8. phpul 无序列表,PHP – 简单嵌套无序列表(UL)数组
  9. Nginx1.10编译安装
  10. Git小乌龟(TortoiseGit)使用详情
  11. C语言 打印乘法口诀表
  12. Windows下的发包工具推荐[Colasoft Packet Builder]含使用教程
  13. java 获取本机ip_Java获取本机ip和服务器ip
  14. 电脑服务器地址能修改吗,电脑ip地址可以随便改吗
  15. C++ 实现程序暂停
  16. halcon算子翻译——cooc_feature_matrix
  17. 化云为雨,华为云为什么要深入经济的“毛细血管”?
  18. Linux编译代码卡死,Ubuntu下编译卡死的问题
  19. 项目管理知识体系指南 (八)
  20. 如何对发票进行识别、核验真伪?

热门文章

  1. 被法拉第夸、狄更斯为她读诗、英王参加她的成人礼,程序员祖师的人生有多传奇?...
  2. 女程序员做编程也太难了吧! | 每日趣闻
  3. VirtualHost 的配置
  4. 收缩 tempdb 数据库
  5. 百度编辑器ueditor每次编辑后多一个空行的解决办法
  6. Office365从销售说起——企业办公考虑重点
  7. Linux下查看文件或文件夹大小的命令df 、du、ls
  8. [转] android自动化之MonkeyRunner测试环境配置(一)
  9. Quartz.NET基础知识概述
  10. Kickstart的配置文件anaconda-ks.cfg解析