<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Redis解讀(2):Redis的Java客戶端

      Redis的Java客戶端

      Redis不僅使用命令客戶端來操作,而且可以使用程序客戶端操作,其實(shí)配置和實(shí)現(xiàn)起來也非常容易。

      現(xiàn)在基本上主流的語言都有客戶端支持,比如Java、C、C#、C++、php、Node.js、Go等。在官方網(wǎng)站里列一些Java的客戶端,有Jedis、Redisson、Jredis、JDBC-Redis等,其中官方推薦使用Jedis和Redisson,在企業(yè)中用的最多的就是Jedis。

      開啟遠(yuǎn)程連接

      Redis 默認(rèn)是不支持遠(yuǎn)程連接的,需要手動(dòng)開啟。

      一共修改兩個(gè)地方:

      • 注釋掉 bind: 127.0.0.1
      • 開啟密碼校驗(yàn),去掉 requirepass 的注釋

      改完之后,保存退出,啟動(dòng) Redis。

      Jedis

      1.基本使用

      Jedis 的 GitHub 地址:https://github.com/xetorthio/jedis

      首先創(chuàng)建一個(gè)普通的 Maven 項(xiàng)目,項(xiàng)目創(chuàng)建成功后,添加 Jedis 依賴:

      <dependencies>
          <dependency>
              <groupId>redis.clients</groupId>
              <artifactId>jedis</artifactId>
              <version>3.5.2</version>
              <type>jar</type>
              <scope>compile</scope>
          </dependency>
      </dependencies>
      

      創(chuàng)建測(cè)試類:

      import redis.clients.jedis.Jedis;
      
      /**
       * @author taoguoguo
       * @description MyJedis
       * @website http://www.rzrgm.cn/doondo
       * @create 2021-04-09 15:21
       */
      public class MyJedis {
          public static void main(String[] args) {
              //1.構(gòu)造一個(gè)Jedis對(duì)象 默認(rèn)端口6379也可省略
              Jedis jedis = new Jedis("192.168.199.229", 6379);
              //2.密碼認(rèn)證
              jedis.auth("123456");
              //3.測(cè)試是否連接成功
              String ping = jedis.ping();
              //4.返回pong表示連接成功
              System.out.println(ping);
          }
      }
      
      

      對(duì)于 Jedis 而言,一旦連接上 Redis 服務(wù)端,剩下的操作都很容易了。
      在 Jedis 中,由于方法的 API 和 Redis 的命令高度一致,所以,Jedis 中的方法見名知意,直接使用即可。

      2.連接池

      在實(shí)際應(yīng)用中,Jedis 實(shí)例我們一般都是通過連接池來獲取,由于 Jedis 對(duì)象不是線城安全的,所以,當(dāng)
      我們使用 Jedis 對(duì)象時(shí),從連接池獲取 Jedis,使用完成之后,再還給連接池。

      package org.taoguoguo.redis;
      
      import redis.clients.jedis.Jedis;
      import redis.clients.jedis.JedisPool;
      
      /**
       * @author taoguoguo
       * @description JedisPoolTest
       * @website http://www.rzrgm.cn/doondo
       * @create 2021-04-09 15:44
       */
      public class JedisPoolTest {
          public static void main(String[] args) {
              //1.構(gòu)造一個(gè)Jedis連接池
              JedisPool pool = new JedisPool("192.168.199.229", 6379);
              //2.從連接池中
              Jedis jedis = pool.getResource();
              //3.Jedis操作
              String ping = jedis.ping();
              System.out.println(ping);
              //4.歸還連接
              jedis.close();
          }
      }
      
      

      如果第三步拋出異常的話,會(huì)導(dǎo)致第四步無法執(zhí)行,所以,我們要對(duì)代碼進(jìn)行改進(jìn),確保第四步能夠執(zhí)行。

      package org.taoguoguo.redis;
      import redis.clients.jedis.Jedis;
      import redis.clients.jedis.JedisPool;
      
      /**
       * @author taoguoguo
       * @description JedisPoolTest
       * @website http://www.rzrgm.cn/doondo
       * @create 2021-04-09 15:44
       */
      public class JedisPoolTest {
          public static void main(String[] args) {
              //1.構(gòu)造一個(gè)Jedis連接池
              JedisPool pool = new JedisPool("192.168.199.229", 6379);
              //2.從連接池中
              Jedis jedis = pool.getResource();
              try {
                  //3.Jedis操作
                  String ping = jedis.ping();
                  System.out.println(ping);
              } catch (Exception e) {
                  e.printStackTrace();
              } finally {
                  //4.歸還連接
                  if (jedis!=null) {
                      jedis.close();
                  }
              }
          }
      }
      
      

      通過 finally 我們可以確保 jedis 一定被關(guān)閉。
      利用 JDK1.7 中的 try-with-resource 特性,可以對(duì)上面的代碼進(jìn)行改造

      package org.taoguoguo.redis;
      import redis.clients.jedis.Jedis;
      import redis.clients.jedis.JedisPool;
      
      /**
       * @author taoguoguo
       * @description JedisPoolTest
       * @website http://www.rzrgm.cn/doondo
       * @create 2021-04-09 15:44
       */
      public class JedisPoolTest {
          public static void main(String[] args) {
              //1.構(gòu)造一個(gè)Jedis連接池
              JedisPool pool = new JedisPool("192.168.199.229", 6379);
              try(Jedis jedis = pool.getResource()){
                  //3.Jedis操作
                  jedis.auth("123456");
                  String ping = jedis.ping();
                  System.out.println(ping);
              }
          }
      }
      

      這段代碼的作用和上面的是一致的。
      但是,上面這段代碼無法實(shí)現(xiàn)強(qiáng)約束。我們可以做進(jìn)一步的改進(jìn),通過接口約定規(guī)范調(diào)用:

      package org.taoguoguo.redis;
      
      import redis.clients.jedis.Jedis;
      
      /**
       * @author taoguoguo
       * @description CallWithRedis
       * @website http://www.rzrgm.cn/doondo
       * @create 2021-04-09 16:51
       */
      public interface CallWithRedis {
          void call(Jedis jedis);
      }
      
      package org.taoguoguo.redis;
      
      import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
      import redis.clients.jedis.Jedis;
      import redis.clients.jedis.JedisPool;
      
      /**
       * @author taoguoguo
       * @description Redis
       * @website http://www.rzrgm.cn/doondo
       * @create 2021-04-09 16:52
       */
      public class Redis {
          private JedisPool pool;
      
          //無參構(gòu)造方法中初始化
          public Redis() {
              GenericObjectPoolConfig config = new GenericObjectPoolConfig();
              //連接池最大空閑數(shù)
              config.setMaxIdle(300);
              //最大連接數(shù)
              config.setMaxTotal(1000);
              //連接最大等待時(shí)間,如果是 -1 表示沒有限制
              config.setMaxWaitMillis(30000);
              //在空閑時(shí)檢查有效性
              config.setTestOnBorrow(true);
              /**
               * 1. Redis 地址
               * 2. Redis 端口
               * 3. 連接超時(shí)時(shí)間
               * 4. 密碼
               */
              pool = new JedisPool(config,"192.168.199.229",6379,30000,"123456");
          }
      
          public void execute(CallWithRedis callWithRedis){
              try(Jedis jedis = pool.getResource()){
                  callWithRedis.call(jedis);
              }
          }
      }
      
      
      package org.taoguoguo.redis;
      /**
       * @author taoguoguo
       * @description JedisPoolTest
       * @website http://www.rzrgm.cn/doondo
       * @create 2021-04-09 15:44
       */
      public class JedisPoolTest {
          public static void main(String[] args) {
              //1.構(gòu)造一個(gè)Jedis連接池
              /*JedisPool pool = new JedisPool("192.168.199.229", 6379);
              try(Jedis jedis = pool.getResource()){
                  //2.認(rèn)證
                  jedis.auth("123456");
                  //3.Jedis操作
                  String ping = jedis.ping();
                  System.out.println(ping);
              }*/
              Redis redis = new Redis();
              redis.execute(jedis -> {
                  System.out.println(jedis.ping());
              });
          }
      }
      
      

      Lettuce

      GitHub:https://github.com/lettuce-io/lettuce-core

      Lettuce 和 Jedis 的一個(gè)比較:

      1. Jedis 在實(shí)現(xiàn)的過程中是直接連接 Redis 的,在多個(gè)線程之間共享一個(gè) Jedis 實(shí)例,這是線城不安
        全的,如果想在多線程場(chǎng)景下使用 Jedis,就得使用連接池,這樣,每個(gè)線城都有自己的 Jedis 實(shí)
        例,但這樣也會(huì)帶來不好的一點(diǎn)會(huì)消耗更多的物理資源。
      2. Lettuce 基于目前很火的 Netty NIO 框架來構(gòu)建,所以克服了 Jedis 中線程不安全的問題,Lettuce
        支持同步、異步 以及 響應(yīng)式調(diào)用,多個(gè)線程可以共享一個(gè)連接實(shí)例。
        使用 Lettuce,首先創(chuàng)建一個(gè)普通的 Maven 項(xiàng)目,添加 Lettuce 依賴:

      1.基本使用

      使用 Lettuce,首先創(chuàng)建一個(gè)普通的 Maven 項(xiàng)目,添加 Lettuce 依賴:

      <dependencies>
          <dependency>
              <groupId>io.lettuce</groupId>
              <artifactId>lettuce-core</artifactId>
              <version>5.2.2.RELEASE</version>
          </dependency>
      </dependencies>
      

      然后來一個(gè)簡(jiǎn)單的測(cè)試案例:

      package org.taoguoguo;
      
      import io.lettuce.core.RedisClient;
      import io.lettuce.core.api.StatefulRedisConnection;
      import io.lettuce.core.api.sync.RedisCommands;
      
      /**
       * @author taoguoguo
       * @description LettuceTest
       * @website http://www.rzrgm.cn/doondo
       * @create 2021-04-11 16:00
       */
      public class LettuceTest {
          public static void main(String[] args) {
              RedisClient redisClient = RedisClient.create("redis://123456@192.168.0.104");
              //2.獲取連接對(duì)象
              StatefulRedisConnection<String, String> connect = redisClient.connect();
              //3.獲取redis同步調(diào)用對(duì)象
              RedisCommands<String, String> sync = connect.sync();
              //4.操作redis
              sync.set("name", "taoguoguo");
              String name = sync.get("name");
              System.out.println(name);
          }
      }
      
      posted @ 2021-04-14 15:56  DOONDO  閱讀(331)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 8AV国产精品爽爽ⅤA在线观看| 成人欧美日韩一区二区三区| 人妻少妇精品视频专区| 亚洲日韩av无码一区二区三区| 最新av中文字幕无码专区| 成人性影院| 国产大尺度一区二区视频| 欧美牲交a欧美牲交aⅴ图片| 里番全彩爆乳女教师| av高清无码 在线播放| 国产精品自在自线视频| 久久人与动人物a级毛片| 爱啪啪av导航| 欧洲一区二区中文字幕| 99久久久国产精品消防器材| 丁香婷婷在线观看| 久久人人爽人人爽人人av| 怀宁县| 亚洲中文字幕av天堂| 午夜在线不卡| 熟妇无码熟妇毛片| 亚洲精品日本一区二区| 宁武县| 国产av黄色一区二区三区| 久久ww精品w免费人成| 国产精品久久无码不卡黑寡妇| 国产精品无码不卡在线播放| 亚洲国产一区二区三区四| 精品无码黑人又粗又大又长 | 亚洲欧美国产精品专区久久| 国产99在线 | 免费| 欧美高清一区三区在线专区| 亚洲精品国产男人的天堂| 亚洲女人天堂| 国产精品亚洲av三区色| 亚洲国产成人综合自在线| 亚洲 a v无 码免 费 成 人 a v| 亚洲综合色网一区二区三区| 我国产码在线观看av哈哈哈网站| 亚洲欧美日韩国产手机在线| 无遮挡午夜男女xx00动态|