Jedis連線redis客戶端
阿新 • • 發佈:2018-11-10
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 }