1. 程式人生 > >使用jedis連線單機和叢集redis的兩種方式

使用jedis連線單機和叢集redis的兩種方式

       Redis伺服器的部署方式可分為單機和叢集的方式,使用Jedis的對應訪問介面也相應不用。如何使用Jedis操作兩種不同部署方式的Redis資料,以及在web工程裡如何快速的切換兩種不同的訪問方式,是本文要介紹的主要內容。

        本示例使用的相關框架版本如下:

         Jedis:jedis-2.8.1

         spring:spring 4.0.8

涉及的主要類圖如下:

類圖

       JedisClient與JedisClsterClient都實現了IJedisClinet介面,接口裡定義了操作redis的各種方法,這兩個Client實現類分別對應著單機和叢集兩種訪問方式。RedisOperate類是供其它類呼叫的Redis操作類,它持有IJedisClient介面的實現類物件,這個物件由spring注入,具體使用哪種連線方式取決於注入的IJedisClient的實現類型別。這裡使用的是策略模式。

       JedisClusterFactory實現了org.springframework.beans.factory.FactoryBean和org.springframework.beans.factory.InitializingBean介面,用於為JedisClusterClient提供redis.clients.jedis.JedisCluster操作類。JedisClient的操作類是redis.clients.jedis.Jedis,從redis.clients.jedis.JedisPool類中獲取。

Spring的配置如下:

<?xml version="1.0"
encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd"
default-lazy-init="true">
<description>Jedis Configuration</description><!-- 載入配置屬性檔案 --><context:property-placeholderignore-unresolvable="true"location="classpath:jeeplus.properties" /><!-- redis 單機連線方案 --><beanid="jedisPoolConfig"class="redis.clients.jedis.JedisPoolConfig"><propertyname="maxIdle"value="300" /><!-- 最大能夠保持idel狀態的物件數 --><propertyname="maxTotal"value="60000" /><!-- 最大分配的物件數 --><propertyname="testOnBorrow"value="true" /><!-- 當呼叫borrow Object方法時,是否進行有效性檢查 --></bean><beanid="jedisPool"class="redis.clients.jedis.JedisPool"><constructor-argindex="0"ref="jedisPoolConfig" /><constructor-argindex="1"value="${redis.host}" /><constructor-argindex="2"value="${redis.port}"type="int" /></bean><!-- redis 叢集連線方案 --><beanname="genericObjectPoolConfig"class="org.apache.commons.pool2.impl.GenericObjectPoolConfig"><propertyname="maxWaitMillis"value="-1" /><propertyname="maxTotal"value="8" /><propertyname="minIdle"value="0" /><propertyname="maxIdle"value="8" /></bean><beanid="jedisCluster"class="com.jeeplus.common.redis.JedisClusterFactory"><propertyname="connectionTimeout"value="3000" /><propertyname="soTimeout"value="3000" /><propertyname="maxRedirections"value="5" /><propertyname="genericObjectPoolConfig"ref="genericObjectPoolConfig" /><propertyname="jedisClusterNodes"><set><value>127.0.0.1:7000</value><value>127.0.0.1:7001</value><value>127.0.0.1:7002</value></set></property></bean><!-- 真正的redis操作類,具體連線方式由jedisClient的ref屬性決定 可選項為jedisClusterClient、jedisClient --><beanname="redisOperate"class="com.jeeplus.common.redis.RedisOperate"><propertyname="jedisClient"ref="jedisClusterClient" /></bean></beans>

在進行單機、叢集切換時,只需要修改<property name="jedisClient" ref="jedisClusterClient" />  配置即可。

下面看看程式碼:

 IJedisClient

public interfaceIJedisClient{

	/**
	 * 獲取快取
	 * @param key 鍵
	 * @return 值
	 */

	public String get(String key);

	/**
	 * 獲取快取
	 * @param key 鍵
	 * @return 值
	 */
	public Object getObject(String key);

	/**
	 * 設定快取
	 * @param key 鍵
	 * @param value 值
	 * @param cacheSeconds 超時時間,0為不超時
	 * @return
	 */
	public String set(String key, String value, int cacheSeconds);

	/**
	 * 設定快取
	 * @param key 鍵
	 * @param value 值
	 * @param cacheSeconds 超時時間,0為不超時
	 * @return
	 */
	public String setObject(String key, Object value, int cacheSeconds);

	/**
	 * 獲取List快取
	 * @param key 鍵
	 * @return 值
	 */
	public List<String> getList(String key);

	/**
	 * 獲取List快取
	 * @param key 鍵
	 * @return 值
	 */
	public List<Object> getObjectList(String key);

	/**
	 * 設定List快取
	 * @param key 鍵
	 * @param value 值
	 * @param cacheSeconds 超時時間,0為不超時
	 * @return
	 */
	publiclongsetList(String key, List<String> value, int cacheSeconds);

	/**
	 * 設定List快取
	 * @param key 鍵
	 * @param value 值
	 * @param cacheSeconds 超時時間,0為不超時
	 * @return
	 */
	publiclongsetObjectList(String key, List<Object> value, int cacheSeconds);

	/**
	 * 向List快取中新增值
	 * @param key 鍵
	 * @param value 值
	 * @return
	 */
	publiclonglistAdd(String key, String... value);

	/**
	 * 向List快取中新增值
	 * @param key 鍵
	 * @param value 值
	 * @return
	 */
	publiclonglistObjectAdd(String key, Object... value);

	/**
	 * 獲取快取
	 * @param key 鍵
	 * @return 值
	 */
	public Set<String> getSet(String key);

	/**
	 * 獲取快取
	 * @param key 鍵
	 * @return 值
	 */
	public Set<Object> getObjectSet(String key);

	/**
	 * 設定Set快取
	 * @param key 鍵
	 * @param value 值
	 * @param cacheSeconds 超時時間,0為不超時
	 * @return
	 */
	publiclongsetSet(String key, Set<String> value, int cacheSeconds);

	/**
	 * 設定Set快取
	 * @param key 鍵
	 * @param value 值
	 * @param cacheSeconds 超時時間,0為不超時
	 * @return
	 */
	publiclongsetObjectSet(String key, Set<Object> value, int cacheSeconds);

	/**
	 * 向Set快取中新增值
	 * @param key 鍵
	 * @param value 值
	 * @return
	 */
	publiclongsetSetAdd(String key, String... value);

	/**
	 * 向Set快取中新增值
	 * @param key 鍵
	 * @param value 值
	 * @return
	 */
	publiclongsetSetObjectAdd(String key, Object... value);

	/**
	 * 獲取Map快取
	 * @param key 鍵
	 * @return 值
	 */
	public Map<String, String> getMap(String key);

	/**
	 * 獲取Map快取
	 * @param key 鍵
	 * @return 值
	 */
	public Map<String, Object> getObjectMap(String key);

	/**
	 * 設定Map快取
	 * @param key 鍵
	 * @param value 值
	 * @param cacheSeconds 超時時間,0為不超時
	 * @return
	 */
	public String setMap(String key, Map<String, String> value, int cacheSeconds);

	/**
	 * 設定Map快取
	 * @param key 鍵
	 * @param value 值
	 * @param cacheSeconds 超時時間,0為不超時
	 * @return
	 */
	public String 
            
           

相關推薦

使用jedis連線單機叢集redis方式

       Redis伺服器的部署方式可分為單機和叢集的方式,使用Jedis的對應訪問介面也相應不用。如何使用Jedis操作兩種不同部署方式的Redis資料,以及在web工程裡如何快速的切換兩種不同的訪問方式,是本文要介紹的主要內容。         本示例使用的相關框架版本如下:        

測試redis叢集方式:分片哨兵

import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import redis.clients.jedis.Jedi

spring boot配置同時支援單機叢集redis

正式環境都是用叢集版redis,開發用的單機版,領導要求通過配置檔案來確定是單機還是叢集,由於單機版已經實現了,那麼準備就在單機版基礎上進行開發,然後發現spring boot1.2版本已經比較老,就升級版本,由於升級了spring boot版本,對應其他配置也進行了修改。最

虛擬機器下 solr7.1 cloud 叢集搭建 (手動解壓官方指令碼方式

準備工作:   vmware workstation 12,OS使用的是ubuntu16.04,三臺虛擬機器搭建一個solr叢集,zookeeper共用這三臺虛擬機器組成zookeeper叢集。   zookeeper的版本為3.4.10,solr版本為7.1,不使用

P5.JS 手繪碼繪方式“運動”主題作品的對比研究

這次作業我針對的主題是“斐波那契螺旋線” 背景知識:斐波那契螺旋線,也稱“黃金螺旋”,是根據斐波那契數列畫出來的螺旋曲線,自然界中存在許多斐波那契螺旋線的圖案,是自然界最完美的經典黃金比例。作圖規則是在以斐波那契數為邊的正方形拼成的長方形中畫一個90度的扇形,連起來的弧線就是斐波那契螺旋線。在這

fastDFS+LibreOffice多檔案上傳(二)後端部分:檔案資訊轉json字串儲存資料庫(Gsonorg.json方式)

需要注意的地方: 1)如果你複製我的程式碼到你的程式上報錯,可以看看我第一篇文章實體類跟配置檔案的設定:https://blog.csdn.net/qq_36688143/article/details/84162924 第二篇檔案上傳前端頁面的程式碼: https://blog.c

智聯招聘抓取---scrapy框架requests庫方式實現

#首先分析目標站點,分析得出結果是在json接口裡,然後抓取企業資訊需要再次請求頁面進行抓取 #1.直接requests請求進行抓取儲存 ##需要注意點: 可能不同企業單頁排版不一樣,需要判斷採取不同形式 儲存為csv檔案注意格式,保證資料表格不換行需要新增

ubuntu 安裝redis方式 教程

方式一: 下載地址:http://redis.io/download,下載最新文件版本。 本教程使用的最新文件版本為 2.8.17,下載並安裝: $ wget http://download.redis.io/releases/redis-2.8.17.tar.gz $ tar xzf

獲取後臺資料使用JQ-AJAX Vue-Axios 方式的使用對比

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content=

遞迴迭代方式實現歸併排序(Java版)

遞迴版 package MergeSort; import Utils.SortUtils; /** * 歸併排序遞迴版 * @author liguodong */ pub

基於陣列連結串列方式實現棧

棧是一種先進後出的資料結構,在實際程式設計棧有很廣泛的用處,Java棧已經幫我們實現好了stack類。 實現棧的兩種方式,基於陣列實現和基於連結串列實現。 1.stack介面 public interface StackADT { //入棧操作 public voi

手繪碼繪方式創作“運動”主題

藝術的展現形式有多種多樣,繪畫的方式也有很多。這篇文章主要來比較一下手繪與碼繪。 什麼是碼繪?用程式語言即程式碼來畫畫。一般人更多接觸到的是手繪,只有從事或研究相關方面的才會比較瞭解碼繪。聽說現在的藝術生都要學點程式設計呢。 上面兩張就是用processing作的

SpringMvc 上傳excel(註解非註解方式

1、第一種方式: A:JSP頁面: <form name="importForm" action="${ctx }/service/userService/BatchImport.do" method="post" enctype="multipar

用陣列連結串列方式實現佇列

手寫陣列實現佇列 1 int queue[20]; 2 int front,rear; 3 4 void clear() 5 { 6 front = rear = -1; 7 } 8 9 int size() 10 { 11 return (rear-front)

Linux(CentOS)安裝Node.JSnpm的方式(yum安裝原始碼安裝)

宣告版本: Linux版本:CentOS release 6.9 / 64位 yum安裝 yum安裝是將yum源中的rpm包下載到本地,安裝這個rpm包。這個rpm包是別人編譯安裝好的二進位制包。這種方式方便快捷,特別是不用考慮包依賴。 0、

通過JVM記憶體模型深入理解值傳遞引用傳遞方式

值傳遞和引用傳遞分析Java中資料型別分為兩大類:基本型別和引用型別(也就是物件型別)。基本型別:boolean、char、byte、short、int、long、float、double引用型別:類、介面、陣列因此,變數型別也可分為兩大類:基本型別和引用型別。在分析值傳遞

Oracle資料庫的匯入匯出的方式

首先,我們匯入匯出資料,肯定是要通過oracle自帶的可執行程式來完成資料的匯入匯出工作,imp.exe 和exp.exe這兩個可執行檔案都放在oracle安裝目錄下的BIN目錄下。 1.以cmd命令操作符匯入匯出 先以cmd命令操作符來演示,比如我的B

Android ScrollView監聽滑動到頂部底部的方式

import android.content.Context; import android.util.AttributeSet; import android.widget.ScrollView; /** * 監聽ScrollView滾動到頂部或者底部做相關事件攔截 */ public class S

ubuntu 安裝redis方式

本教程使用的最新文件版本為 2.8.17,下載並安裝: $ wget http://download.redis.io/releases/redis-2.8.17.tar.gz $ tar xzf redis-2.8.17.tar.gz $ cd redis-2.8.17

C++使用迭代遞迴方式實現連結串列逆序演算法

1.連結串列逆序的兩種演算法       C++實現一個連結串列逆序演算法 2.連結串列逆序演算法實現原理 如A->B->C->D->E,一般會有以下兩種思路,如下 思路1: 先取出連結串列的最後一個E,然後將E作為新連結串列的頭, 現在狀