1. 程式人生 > >Jedis連線redis客戶端

Jedis連線redis客戶端

1 單點的redis利用jedis客戶端連線

  如何連線

1 //1 利用jedis連線物件操作redis
2     @Test
3     public void test01(){
4         //構造一個具有連線資訊的jedis物件
5         //確定虛擬機器linux系統的埠是開放的? 防火牆
6         Jedis jedis=new Jedis("192.168.60.131", 6379);
7         jedis.set("name", "hanlaoshi");
8         jedis.expire("name", 60);
9 }

 

  模擬快取邏輯在系統中執行步驟

 1 //2 利用打樁語句,模擬快取的使用和資料庫的呼叫
 2     @Test
 3     public void test02(){
 4         //查詢商品為例,id=1的一個商品
 5         String id="1";
 6         System.out.println("使用者訪問http://www.jt.com/product/"+id);
 7     //1 利用使用者請求引數,生成當前業務邏輯的唯一key值 exists
 8     //企業中的key值一般都是字首,字尾 拼接id完成的
 9         String key="product_"+id;
10 Jedis jedis=new Jedis("192.168.60.131", 6379); 11 if(jedis.exists(key)){//有的話返回true,沒有返回false 12 //如果有資料,需要從redis中獲取value,列印返回 13 String value=jedis.get(key); 14 System.out.println("從快取獲取value:"+value); 15 }else{//快取沒有資料 16 System.out.println("快取無資料,資料從資料庫獲取");
17 //假設從資料庫獲取的資料 18 String value="id=1&productName=haha"; 19 System.out.println("資料獲取,value:"+value); 20 //返回之前,存在redis,供後續使用 21 jedis.set(key, value); 22 System.out.println("資料跟隨響應返回"); 23 } 24 }

 

  hash取餘的資料分片計算邏輯

        key值是一個取值範圍非常大的記憶體值;
        hash取餘公式 (key.hashCode()&Integer.MAX_VALUE)%N
        N是資料分片節點的數量(3) [0,1,2] 取值結果=0的儲存到6379=1的儲存到6380,=2儲存到6381

 

 1  1     @Test
 2  2         public void test04(){
 3  3             Jedis jedis1=new Jedis("192.168.60.131", 6379);
 4  4             Jedis jedis2=new Jedis("192.168.60.131", 6380);
 5  5             Jedis jedis3=new Jedis("192.168.60.131", 6381);
 6  6             for(int i=0;i<5000;i++){
 7  7                 String key="product_"+i;
 8  8                 String value="value_"+i;
 9  9                 //計算取餘結果,同一個key總會得到一個相同的取餘結果
10 10                 int result=(key.hashCode()&Integer.MAX_VALUE)%3;
11 11                 if(result==0){jedis1.set(key, value);}
12 12                 if(result==1){jedis2.set(key, value);}
13 13                 if(result==2){jedis3.set(key, value);}
14 14             }
15 15 }