Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式)介绍
2016-03-16 14:11
791 查看
jedis是一个著名的key-value存储系统,而作为其官方推荐的java版客户端jedis也非常强大和稳定,支持事务、管道及有jedis自身实现的分布式。
在这里对jedis关于事务、管道和分布式的调用方式做一个简单的介绍和对比:
?
很简单吧,每次
看下面例子:
?
我们调用
?
?
但是经测试(见本文后续部分),发现其效率和单独使用事务差不多,甚至还略微差点。
这个是分布式直接连接,并且是同步调用,每步执行都返回执行结果。类似地,还有异步管道调用。
?
上面是同步方式,当然还有异步方式。
?
事务和管道都是异步的,个人感觉,在管道中再进行事务调用,没有必要,不如直接进行事务模式。
分布式中,连接池的性能比直连的性能略好(见后续测试部分)。
分布式调用中不支持事务。
因为事务是在服务器端实现,而在分布式中,每批次的调用对象都可能访问不同的机器,所以,没法进行事务。
?
另外,经测试分布式中用到的机器越多,调用会越慢。上面是2片,下面是5片:
?
下面是10片:
?
下面是100片:
?
分布式中,连接池方式调用不但线程安全外,根据上面的测试数据,也可以看出连接池比直连的效率更好。
在这里对jedis关于事务、管道和分布式的调用方式做一个简单的介绍和对比:
一、普通同步方式
最简单和基础的调用方式,?
set之后都可以返回结果,标记是否成功。
二、事务方式(Transactions)
redis的事务很简单,他主要目的是保障,一个client发起的事务中的命令可以连续的执行,而中间不会插入其他client的命令。看下面例子:
?
jedis.watch(…)方法来监控key,如果调用后key值发生变化,则整个事务会执行失败。另外,事务中某个操作失败,并不会回滚其他操作。这一点需要注意。还有,我们可以使用
discard()方法来取消事务。
三、管道(Pipelining)
有时,我们需要采用异步方式,一次发送多个指令,不同步等待其返回结果。这样可以取得非常好的执行效率。这就是管道,调用方法如下:?
四、管道中调用事务
就Jedis提供的方法而言,是可以做到在管道中使用事务,其代码如下:?
五、分布式直连同步调用
?六、分布式直连异步调用
?七、分布式连接池同步调用
如果,你的分布式调用代码是运行在线程中,那么上面两个直连调用方式就不合适了,因为直连方式是非线程安全的,这个时候,你就必须选择连接池调用。?
八、分布式连接池异步调用
?九、需要注意的地方
事务和管道都是异步模式。在事务和管道中不能同步查询结果。比如下面两个调用,都是不允许的:?
分布式中,连接池的性能比直连的性能略好(见后续测试部分)。
分布式调用中不支持事务。
因为事务是在服务器端实现,而在分布式中,每批次的调用对象都可能访问不同的机器,所以,没法进行事务。
十、测试
运行上面的代码,进行测试,其结果如下:?
?
?
?
十一、完整的测试代码
?相关文章推荐
- Redis java封装l类
- Redis 安装,主从配置及Sentinel配置自动Failover
- redis.conf 配置文件详解
- windows下安装redis
- Redis NOsql 缓存技术浅谈
- mysql2redis
- redis事务简介
- CentOS 6.5 下安装 Redis 2.8.7
- Redis 五种数据类型的使用场景
- redis扫盲
- srcache_nginx+redis构建缓存系统
- redis在linux服务器部署
- redis在应用中使用连接不释放问题解决
- redis使用例子
- redis与spring整合实例
- Redis缓存配置
- 第九章 Redis学习手册之主从复制
- centos7下安装配置redis3.0.4
- redis-集群(cluster)扫盲篇(一)
- redis常见的几种使用场景