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