標籤:
package cn.com;import java.util.Arrays;import java.util.List;import redis.clients.jedis.Jedis;import redis.clients.jedis.JedisShardInfo;import redis.clients.jedis.Pipeline;import redis.clients.jedis.ShardedJedis;import redis.clients.jedis.ShardedJedisPipeline;public class Redis_Dispersed {/** * 分布式直連同步調用 * */public static void sync_dispersed(){List<JedisShardInfo> 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("userid" + i, "age" + i); } long end = System.currentTimeMillis(); System.out.println("執行實行: " + ((end - start)/1000.0) + " seconds"); sharding.disconnect(); }/** * 分布式直連非同步呼叫 * */public static void shardpipelined() { List<JedisShardInfo> 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 < 100; i++) { pipeline.set("userid" + i, "age" + i); } List<Object> results = pipeline.syncAndReturnAll(); long end = System.currentTimeMillis(); System.out.println("執行時間: " + ((end - start)/1000.0) + " seconds"); sharding.disconnect(); }/** * 管道 pipeline方式是將一些列命令打包一起發送到伺服器執行。 * 而服務端會處理完多條命令後會將多條命令的處理結果打包到一起返回給用戶端 * 注意:打包的命令越多,緩衝消耗記憶體也越多。所以並是不是打包的命令越多越好 * */public static void pipeline(){ Jedis jedis = new Jedis("localhost",6379); Pipeline pipeline = jedis.pipelined(); long start = System.currentTimeMillis(); for (int i = 0; i < 100000; i++) { pipeline.set("p" + i, "p" + i); } List<Object> results = pipeline.syncAndReturnAll(); long end = System.currentTimeMillis(); System.out.println("Pipelined SET: " + ((end - start)/1000.0) + " seconds"); //jedis.disconnect(); jedis.close();}/** * 管道中調用事務 * */public static void trans_pipeline(){Jedis jedis = new Jedis("localhost",6379); long start = System.currentTimeMillis(); Pipeline pipeline = jedis.pipelined(); pipeline.multi(); for (int i = 0; i < 100000; i++) { pipeline.set("" + i, "" + i); } pipeline.exec(); List<Object> results = pipeline.syncAndReturnAll(); long end = System.currentTimeMillis(); System.out.println("Pipelined transaction: " + ((end - start)/1000.0) + " seconds"); jedis.disconnect(); }public static void main(String [] args){shardpipelined();}}
Redis學習筆記(9)-管道/分布式