<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [TOC] # maven ~~~ <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency> ~~~ # 建立jedis連接池 ~~~ import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; public class JedisPoolUtils { private static JedisPool pool; //建立連接池 private static void createJedisPool() { //建立連接池配置參數 JedisPoolConfig config = new JedisPoolConfig(); //設置最大連接數 config.setMaxTotal(100); //設置最大空閑連接數 config.setMaxIdle(5); //設置最小空閑連接數 config.setMinIdle(2); //連接耗盡時是否阻塞, false報異常,true阻塞直到超時, 默認true config.setBlockWhenExhausted(true); //獲取連接時的最大等待毫秒數(如果設置為阻塞時BlockWhenExhausted),如果超時就拋異常, 小于零:阻塞不確定的時間, 默認-1(單位為毫秒) config.setMaxWaitMillis(1000); //是否啟用pool的jmx管理功能, 默認true config.setJmxEnabled(true); //是否啟用后進先出, 默認true config.setLifo(true); //逐出連接的最小空閑時間 默認1800000毫秒(30分鐘) config.setMinEvictableIdleTimeMillis(1800000); //在獲取連接的時候檢查有效性, 默認false config.setTestOnBorrow(true); //在空閑時檢查有效性, 默認false config.setTestWhileIdle(false); //讀取超時,2000 pool = new JedisPool(config, "127.0.0.1", 6379, 2000, "root"); } //多線程環境下,同步初始化 private static synchronized void poolInit() { if (pool == null) { createJedisPool(); } } //獲取一個jedis對象 public static Jedis getJedis() { if (pool == null) { poolInit(); } return pool.getResource(); } //歸還一個連接 public static void returnRes(Jedis jedis) { pool.returnResource(jedis); } } ~~~ # jedis實現分片 Jedis分片采用Hash算法和基于的Key模式匹配。Jedis定義一個Hash接口,如果覺得自帶的不爽,可以自己實現一個Hash算法。Jedis自帶的Hash的算法是MurmurHash 2.0 。 ~~~ /** * 創建分片對象 */ public static ShardedJedis createShardJedis() { //建立服務器列表 List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>(); //添加第一臺服務器信息 JedisShardInfo si = new JedisShardInfo("localhost", 6379); si.setPassword("123"); shards.add(si); //添加第二臺服務器信息 si = new JedisShardInfo("localhost", 6399); si.setPassword("123"); shards.add(si); //建立分片連接對象 ShardedJedis jedis = new ShardedJedis(shards); //建立分片連接對象,并指定Hash算法 //ShardedJedis jedis = new ShardedJedis(shards,selfHash); return jedis; } ~~~ 分片也可以支持連接池,具體如下 ~~~ private static void createPool() { List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>(); JedisShardInfo si = new JedisShardInfo("localhost", 6379); si.setPassword("123"); shards.add(si); si = new JedisShardInfo("localhost", 6399); si.setPassword("123"); shards.add(si); pool = new ShardedJedisPool(new JedisPoolConfig(), shards); } ~~~ # 分布式直連同步調用 這個是分布式直接連接,并且是同步調用,每步執行都返回執行結果。類似地,還有異步管道調用。 其實就是分片 ~~~ public void jedisShardNormal() { 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("sn" + i, "n" + i); } long end = System.currentTimeMillis(); System.out.println("Simple@Sharing SET: " + ((end - start)/1000.0) + " seconds"); sharding.disconnect(); } ~~~ # 分布式直連異步調用 ~~~ public void jedisShardpipelined() { 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 < 100000; i++) { pipeline.set("sp" + i, "p" + i); } List<Object> results = pipeline.syncAndReturnAll(); long end = System.currentTimeMillis(); System.out.println("Pipelined@Sharing SET: " + ((end - start)/1000.0) + " seconds"); sharding.disconnect(); } ~~~ # 分布式連接池同步調用 如果,你的分布式調用代碼是運行在線程中,那么上面兩個直連調用方式就不合適了,因為直連方式是非線程安全的,這個時候,你就必須選擇連接池調用。 連接池的調用方式,適合大規模的redis集群,并且多客戶端的操作 ~~~ public void jedisShardSimplePool() { List<JedisShardInfo> 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("Simple@Pool SET: " + ((end - start)/1000.0) + " seconds"); pool.destroy(); } ~~~ # 分布式連接池異步調用 ~~~ public void jedisShardPipelinedPool() { List<JedisShardInfo> 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); } List<Object> results = pipeline.syncAndReturnAll(); long end = System.currentTimeMillis(); pool.returnResource(one); System.out.println("Pipelined@Pool SET: " + ((end - start)/1000.0) + " seconds"); pool.destroy(); } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看