当前位置: 首页 > news >正文

致力于做服务更好的网站建设公司什么网站允许搭建

致力于做服务更好的网站建设公司,什么网站允许搭建,我的世界做封面网站,wordpress外链产品一、普通同步方式二、事务方式(Transactions)三、管道(Pipelining)四、管道中调用事务五、分布式直连同步调用六、分布式直连异步调用七、分布式连接池同步调用八、分布式连接池异步调用九、需要注意的地方十、测试十一、完整的测试代码jedis是一个著名的key-value存储系统而作为其官方推荐的java版客户端jedis也非常强大和稳定支持事务、管道及有jedis自身实现的分布式。 在这里对jedis关于事务、管道和分布式的调用方式做一个简单的介绍和对比 一、普通同步方式 最简单和基础的调用方式 ? 1 2 3 4 5 6 7 8 9 10 11 Test public void test1Normal() {     Jedis jedis  new Jedis(localhost);     long start  System.currentTimeMillis();     for (int i  0; i  100000; i) {         String result  jedis.set(n  i, n  i);     }     long end  System.currentTimeMillis();     System.out.println(Simple SET:   ((end - start)/1000.0)   seconds);     jedis.disconnect(); } 很简单吧每次set之后都可以返回结果标记是否成功。 二、事务方式(Transactions) redis的事务很简单他主要目的是保障一个client发起的事务中的命令可以连续的执行而中间不会插入其他client的命令。 看下面例子 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 Test public void test2Trans() {     Jedis jedis  new Jedis(localhost);     long start  System.currentTimeMillis();     Transaction tx  jedis.multi();     for (int i  0; i  100000; i) {         tx.set(t  i, t  i);     }     ListObject results  tx.exec();     long end  System.currentTimeMillis();     System.out.println(Transaction SET:   ((end - start)/1000.0)   seconds);     jedis.disconnect(); } 我们调用jedis.watch(…)方法来监控key如果调用后key值发生变化则整个事务会执行失败。另外事务中某个操作失败并不会回滚其他操作。这一点需要注意。还有我们可以使用discard()方法来取消事务。 三、管道(Pipelining) 有时我们需要采用异步方式一次发送多个指令不同步等待其返回结果。这样可以取得非常好的执行效率。这就是管道调用方法如下 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 Test public void test3Pipelined() {     Jedis jedis  new Jedis(localhost);     Pipeline pipeline  jedis.pipelined();     long start  System.currentTimeMillis();     for (int i  0; i  100000; i) {         pipeline.set(p  i, p  i);     }     ListObject results  pipeline.syncAndReturnAll();     long end  System.currentTimeMillis();     System.out.println(Pipelined SET:   ((end - start)/1000.0)   seconds);     jedis.disconnect(); } 四、管道中调用事务 就Jedis提供的方法而言是可以做到在管道中使用事务其代码如下 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Test public void test4combPipelineTrans() {     jedis  new Jedis(localhost);      long start  System.currentTimeMillis();     Pipeline pipeline  jedis.pipelined();     pipeline.multi();     for (int i  0; i  100000; i) {         pipeline.set(  i,   i);     }     pipeline.exec();     ListObject results  pipeline.syncAndReturnAll();     long end  System.currentTimeMillis();     System.out.println(Pipelined transaction:   ((end - start)/1000.0)   seconds);     jedis.disconnect(); } 但是经测试见本文后续部分发现其效率和单独使用事务差不多甚至还略微差点。 五、分布式直连同步调用 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 Test public void test5shardNormal() {     ListJedisShardInfo shards  Arrays.asList(             new JedisShardInfo(localhost,6379),             new JedisShardInfo(localhost,6380));     ShardedJedis sharding  new ShardedJedis(shards);     long start  System.currentTimeMillis();     for (int i  0; i  100000; i) {         String result  sharding.set(sn  i, n  i);     }     long end  System.currentTimeMillis();     System.out.println(SimpleSharing SET:   ((end - start)/1000.0)   seconds);     sharding.disconnect(); } 这个是分布式直接连接并且是同步调用每步执行都返回执行结果。类似地还有异步管道调用。 六、分布式直连异步调用 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Test public void test6shardpipelined() {     ListJedisShardInfo shards  Arrays.asList(             new JedisShardInfo(localhost,6379),             new JedisShardInfo(localhost,6380));     ShardedJedis sharding  new ShardedJedis(shards);     ShardedJedisPipeline pipeline  sharding.pipelined();     long start  System.currentTimeMillis();     for (int i  0; i  100000; i) {         pipeline.set(sp  i, p  i);     }     ListObject results  pipeline.syncAndReturnAll();     long end  System.currentTimeMillis();     System.out.println(PipelinedSharing SET:   ((end - start)/1000.0)   seconds);     sharding.disconnect(); } 七、分布式连接池同步调用 如果你的分布式调用代码是运行在线程中那么上面两个直连调用方式就不合适了因为直连方式是非线程安全的这个时候你就必须选择连接池调用。 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Test public void test7shardSimplePool() {     ListJedisShardInfo shards  Arrays.asList(             new JedisShardInfo(localhost,6379),             new JedisShardInfo(localhost,6380));     ShardedJedisPool pool  new ShardedJedisPool(new JedisPoolConfig(), shards);     ShardedJedis one  pool.getResource();     long start  System.currentTimeMillis();     for (int i  0; i  100000; i) {         String result  one.set(spn  i, n  i);     }     long end  System.currentTimeMillis();     pool.returnResource(one);     System.out.println(SimplePool SET:   ((end - start)/1000.0)   seconds);     pool.destroy(); } 上面是同步方式当然还有异步方式。 八、分布式连接池异步调用 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 Test public void test8shardPipelinedPool() {     ListJedisShardInfo shards  Arrays.asList(             new JedisShardInfo(localhost,6379),             new JedisShardInfo(localhost,6380));     ShardedJedisPool pool  new ShardedJedisPool(new JedisPoolConfig(), shards);     ShardedJedis one  pool.getResource();     ShardedJedisPipeline pipeline  one.pipelined();     long start  System.currentTimeMillis();     for (int i  0; i  100000; i) {         pipeline.set(sppn  i, n  i);     }     ListObject results  pipeline.syncAndReturnAll();     long end  System.currentTimeMillis();     pool.returnResource(one);     System.out.println(PipelinedPool SET:   ((end - start)/1000.0)   seconds);     pool.destroy(); } 九、需要注意的地方 事务和管道都是异步模式。在事务和管道中不能同步查询结果。比如下面两个调用都是不允许的 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19  Transaction tx  jedis.multi();  for (int i  0; i  100000; i) {      tx.set(t  i, t  i);  }  System.out.println(tx.get(t1000).get());  //不允许  ListObject results  tx.exec();  …  …  Pipeline pipeline  jedis.pipelined();  long start  System.currentTimeMillis();  for (int i  0; i  100000; i) {      pipeline.set(p  i, p  i);  }  System.out.println(pipeline.get(p1000).get()); //不允许  ListObject results  pipeline.syncAndReturnAll(); 事务和管道都是异步的个人感觉在管道中再进行事务调用没有必要不如直接进行事务模式。 分布式中连接池的性能比直连的性能略好(见后续测试部分)。 分布式调用中不支持事务。 因为事务是在服务器端实现而在分布式中每批次的调用对象都可能访问不同的机器所以没法进行事务。 十、测试 运行上面的代码进行测试其结果如下 ? 1 2 3 4 5 6 7 8 9 10 11 Simple SET: 5.227 seconds Transaction SET: 0.5 seconds Pipelined SET: 0.353 seconds Pipelined transaction: 0.509 seconds SimpleSharing SET: 5.289 seconds PipelinedSharing SET: 0.348 seconds SimplePool SET: 5.039 seconds PipelinedPool SET: 0.401 seconds 另外经测试分布式中用到的机器越多调用会越慢。上面是2片下面是5片 ? 1 2 3 4 SimpleSharing SET: 5.494 seconds PipelinedSharing SET: 0.51 seconds SimplePool SET: 5.223 seconds PipelinedPool SET: 0.518 seconds 下面是10片 ? 1 2 3 4 SimpleSharing SET: 5.9 seconds PipelinedSharing SET: 0.794 seconds SimplePool SET: 5.624 seconds PipelinedPool SET: 0.762 seconds 下面是100片 ? 1 2 3 4 SimpleSharing SET: 14.055 seconds PipelinedSharing SET: 8.185 seconds SimplePool SET: 13.29 seconds PipelinedPool SET: 7.767 seconds 分布式中连接池方式调用不但线程安全外根据上面的测试数据也可以看出连接池比直连的效率更好。 十一、完整的测试代码 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 package com.example.nosqlclient; import java.util.Arrays; import java.util.List; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPoolConfig; import redis.clients.jedis.JedisShardInfo; import redis.clients.jedis.Pipeline; import redis.clients.jedis.ShardedJedis; import redis.clients.jedis.ShardedJedisPipeline; import redis.clients.jedis.ShardedJedisPool; import redis.clients.jedis.Transaction; import org.junit.FixMethodOrder; import org.junit.runners.MethodSorters; FixMethodOrder(MethodSorters.NAME_ASCENDING) public class TestJedis {     private static Jedis jedis;     private static ShardedJedis sharding;     private static ShardedJedisPool pool;     BeforeClass     public static void setUpBeforeClass() throws Exception {         ListJedisShardInfo shards  Arrays.asList(                 new JedisShardInfo(localhost,6379),                 new JedisShardInfo(localhost,6379)); //使用相同的ip:port,仅作测试         jedis  new Jedis(localhost);          sharding  new ShardedJedis(shards);         pool  new ShardedJedisPool(new JedisPoolConfig(), shards);     }     AfterClass     public static void tearDownAfterClass() throws Exception {         jedis.disconnect();         sharding.disconnect();         pool.destroy();     }     Test     public void test1Normal() {         long start  System.currentTimeMillis();         for (int i  0; i  100000; i) {             String result  jedis.set(n  i, n  i);         }         long end  System.currentTimeMillis();         System.out.println(Simple SET:   ((end - start)/1000.0)   seconds);     }     Test     public void test2Trans() {         long start  System.currentTimeMillis();         Transaction tx  jedis.multi();         for (int i  0; i  100000; i) {             tx.set(t  i, t  i);         }         //System.out.println(tx.get(t1000).get());         ListObject results  tx.exec();         long end  System.currentTimeMillis();         System.out.println(Transaction SET:   ((end - start)/1000.0)   seconds);     }     Test     public void test3Pipelined() {         Pipeline pipeline  jedis.pipelined();         long start  System.currentTimeMillis();         for (int i  0; i  100000; i) {             pipeline.set(p  i, p  i);         }         //System.out.println(pipeline.get(p1000).get());         ListObject results  pipeline.syncAndReturnAll();         long end  System.currentTimeMillis();         System.out.println(Pipelined SET:   ((end - start)/1000.0)   seconds);     }     Test     public void test4combPipelineTrans() {         long start  System.currentTimeMillis();         Pipeline pipeline  jedis.pipelined();         pipeline.multi();         for (int i  0; i  100000; i) {             pipeline.set(  i,   i);         }         pipeline.exec();         ListObject results  pipeline.syncAndReturnAll();         long end  System.currentTimeMillis();         System.out.println(Pipelined transaction:   ((end - start)/1000.0)   seconds);     }     Test     public void test5shardNormal() {         long start  System.currentTimeMillis();         for (int i  0; i  100000; i) {             String result  sharding.set(sn  i, n  i);         }         long end  System.currentTimeMillis();         System.out.println(SimpleSharing SET:   ((end - start)/1000.0)   seconds);     }     Test     public void test6shardpipelined() {         ShardedJedisPipeline pipeline  sharding.pipelined();         long start  System.currentTimeMillis();         for (int i  0; i  100000; i) {             pipeline.set(sp  i, p  i);         }         ListObject results  pipeline.syncAndReturnAll();         long end  System.currentTimeMillis();         System.out.println(PipelinedSharing SET:   ((end - start)/1000.0)   seconds);     }     Test     public void test7shardSimplePool() {         ShardedJedis one  pool.getResource();         long start  System.currentTimeMillis();         for (int i  0; i  100000; i) {             String result  one.set(spn  i, n  i);         }         long end  System.currentTimeMillis();         pool.returnResource(one);         System.out.println(SimplePool SET:   ((end - start)/1000.0)   seconds);     }     Test     public void test8shardPipelinedPool() {         ShardedJedis one  pool.getResource();         ShardedJedisPipeline pipeline  one.pipelined();         long start  System.currentTimeMillis();         for (int i  0; i  100000; i) {             pipeline.set(sppn  i, n  i);         }         ListObject results  pipeline.syncAndReturnAll();         long end  System.currentTimeMillis();         pool.returnResource(one);         System.out.println(PipelinedPool SET:   ((end - start)/1000.0)   seconds);     } } 参考:http://www.open-open.com/lib/view/open1410485827242.html 转载于:https://www.cnblogs.com/songjinduo/p/5151139.html
http://www.huolong8.cn/news/209381/

相关文章:

  • 黑客以网站做跳板入侵方法山东青岛网站建设公司哪家专业
  • 东莞网站搭建哪家强上海比较大的外贸公司有哪些
  • 响应式网站手机端尺寸网站维护包含哪些内容
  • 好看的单页面网站张店好的网站建设的公司
  • php网站开发实例教程网站开发一般用什么服务器
  • 网站设计属于什么经营范围优秀图网站
  • 宁波白云医院网站建设杭州网站维护公司
  • 郑州网站建设品牌郑州app开发哪家好
  • 网站开发项目进度完成表ui设计做兼职的网站有哪些
  • 郑州专业网站推广优化公司网站建设公司推荐金石下拉网络
  • 学做西餐网站网站建设 财务归类
  • 建站行业突破制作网站什么制作软件
  • 大兴高米店网站建设巩义网站建设报价
  • 长宁网站建设制作小型办公室网络组建
  • 网站SEO建设摘要微信在线登录网页版
  • 十里河网站建设公司ae
  • 国内哪家网站做的系统纯净商业网站开发选题的目的
  • 所得税汇算清缴在哪个网站做二手的家具哪个网站做的好
  • 扬州市建设局招标网站网站视频下载脚本
  • 网站标题收录合肥网站制作报
  • 济南住房和城乡建设局网站免费空间背景
  • 做网站的出路电商平面设计岗位职责
  • 网站如何做快排网站换空间会影响排名吗
  • 青浦郑州阳网站建设沈阳网站制作优化
  • 在线做c 题的网站最新新闻热点事件2022
  • .net网站开发岗位h5免费制作平台哪个好
  • 个人备案网站类型建设银行江苏分行网站
  • 做app网站的软件有哪些内容吗个人网页设计的主要内容和要求
  • 农产品电子商务网站建设网站建设及优化教程
  • 做的美食视频网站建设信息网站