zoukankan      html  css  js  c++  java
  • Redis中RedisTemplate和Redisson管道的使用

    当对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里面包括全部的命令执行结果。

  • 相关阅读:
    理解Java中字符流与字节流的区别
    程序员常见面试问题(不定期更新)
    软链接 硬链接
    《大数据时代》读后的思考
    mysql——int(size) 中的size表示什么意思
    Access denied for user ''@'localhost' to
    Effective c++——条款03:尽可能使用const
    http——wireshark抓包分析
    vim——vim配置步骤
    正则表达式和通配符
  • 原文地址:https://www.cnblogs.com/chenkeyu/p/8621734.html
Copyright © 2011-2022 走看看