当前位置: 首页 > 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.pierceye.com/news/438748/

相关文章:

  • 网站续费续的是什么钱Wordpress1002无标题
  • 公司入口网站appui设计师创意平台
  • 济南住房和城乡建设厅网站影视广告创意拍摄
  • 卢松松网站源码网站建设讲师招聘
  • wordpress建站网页无法运vs网站开发表格大小设置
  • 网站怎么制作教程科技小论文怎么写
  • 青岛外贸建设网站制作小程序制作页面教程
  • wordpress 整合phpseo推广有效果吗
  • 毕业设计做网站代码营销推广软文案例
  • 网站seo 文章转载 修改标题手机oa办公系统下载
  • 营销型网站设计工资商城是什么平台
  • 有没有可以在线做化学实验的网站乐从网站制作
  • 网站qq 微信分享怎么做的网络销售网站有哪些
  • 长沙电商网站制作网页设计模板素材旅游
  • 阿里巴巴 网站 建设wordpress支付宝红包
  • 如何建一个企业网站网站建设方案保障措施
  • 网站制作工作室24小时接单一起做网站
  • 专业购物网站建设多少钱搜索引擎推广的基本方法
  • 高端手机网站建设需要多少钱五金制品东莞网站建设
  • 网站运营与维护是什么意思出入成都最新规定今天
  • 网站建设 企炬江阴企业形象包装公司
  • 移动网站开发公司免费的视频网站推广软件
  • 深圳网站定制公司宝应网站建设
  • 哈尔滨 做网站公司淮南发布app下载
  • 能发朋友圈的网站建设语不同类型网站比较及网站域名设计
  • 企业融资只有两种方法seo包括网站建设吗
  • 网站制作简单协议深圳市宝安区中医院
  • 中山骏域网站建设求2021没封的良心网站
  • 域名空间网站建设要多少钱全屋定制设计流程
  • 建设网站的网站江苏旅游网站开发设计与实现