原生批命令(mset, mget)与Pipeline对比

1、原生批命令是原子性,pipeline是非原子性

(原子性概念:一个事务是一个不可分割的最小工作单位,要么都成功要么都失败。原子操作是指你的一个业务逻辑必须是不可拆分的. 处理一件事情要么都成功,要么都失败,原子不可拆分)

2、原生批命令一命令多个key, 但pipeline支持多命令(存在事务),非原子性

3、原生批命令是服务端实现,而pipeline需要服务端与客户端共同完成

四、Pipeline正确使用方式

使用pipeline组装的命令个数不能太多,不然数据量过大,增加客户端的等待时间,还可能造成网络阻塞,可以将大量命令的拆分多个小的pipeline命令完成。

1、Jedis中的pipeline使用方式

大家知道redis提供了mset、mget方法,但没有提供mdel方法,如果想实现,可以借助pipeline实现。

2、Jedis中的pipeline使用步骤:获取jedis对象(一般从连接池中获取)

获取jedis对象的pipeline对象

添加指令

执行指令

测试类方法:@Test

public void testCommond() {

// 工具类初始化

JedisUtils jedis = new JedisUtils(“192.168.1.111”, 6379, “12345678”);

for (int i = 0; i < 100; i++) {

// 设值

jedis.set(“n” + i, String.valueOf(i));

}

System.out.println(“keys from redis return =======” + jedis.keys(“*”));

}

// 使用pipeline批量删除

@Test

public void testPipelineMdel() {

// 工具类初始化

JedisUtils jedis = new JedisUtils(“192.168.1.111”, 6379, “12345678”);

List keys = new ArrayList();

for (int i = 0; i < 100; i++) {

keys.add(“n” + i);

}

jedis.mdel(keys);

System.out.println(“after mdel the redis return ———” + jedis.keys(“*”));

}

JedisUtils下的mdel方法:/**

* 删除多个字符串key 并释放连接

*

* @param keys*

* @return 成功返回value 失败返回null

*/

public boolean mdel(List keys) {

Jedis jedis = null;

boolean flag = false;

try {

jedis = pool.getResource();//从连接借用Jedis对象

Pipeline pipe = jedis.pipelined();//获取jedis对象的pipeline对象

for(String key:keys){

pipe.del(key); //将多个key放入pipe删除指令中

}

pipe.sync(); //执行命令,完全此时pipeline对象的远程调用

flag = true;

} catch (Exception e) {

pool.returnBrokenResource(jedis);

e.printStackTrace();

} finally {

returnResource(pool, jedis);

}

return flag;

}

使用pipeline提交所有操作并返回执行结果:@Test

public void testPipelineSyncAll() {

// 工具类初始化

Jedis jedis = new Jedis(“192.168.1.111”, 6379);

jedis.auth(“12345678”);

// 获取pipeline对象

Pipeline pipe = jedis.pipelined();

pipe.multi();

pipe.set(“name”, “james”); // 调值

pipe.incr(“age”);// 自增

pipe.get(“name”);

pipe.discard();

// 将不同类型的操作命令合并提交,并将操作操作以list返回

List list = pipe.syncAndReturnAll();

for (Object obj : list) {

// 将操作结果打印出来

System.out.println(obj);

}

// 断开连接,释放资源

jedis.disconnect();

}

欢迎使用66资源网
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
7. 本站有不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别!

66源码网 » 原生批命令(mset, mget)与Pipeline对比

提供最优质的资源集合

立即查看 了解详情