java操作redis資料庫執行個體(redis叢集)

來源:互聯網
上載者:User

標籤:

1、配置redis叢集
<?xml version="1.0" encoding="UTF-8"?><redisCluster><!--userRoute --><clusterGroup name="userRoute" selectdb="1"><server host="10.177.129.16" port="6379"></server><server host="10.177.129.15" port="6379"></server></clusterGroup><!--sessionRoute --><clusterGroup name="sessionRoute" selectdb="2"><server host="10.177.129.16" port="6379"></server><server host="10.177.129.15" port="6379"></server></clusterGroup><!--publicData --><clusterGroup name="publicData"><server host="10.177.129.16" port="6379"></server><server host="10.177.129.15" port="6379"></server></clusterGroup></redisCluster>

2、建立redis串連屬性實體類
package com.isoftstone.cms.syscore.pojo;/** * redis串連屬性 * @author xiakai * */public class RedisCluster {private String selectdb;private String hostIp;private Stringport;public String getSelectdb() {return selectdb;}public void setSelectdb(String selectdb) {this.selectdb = selectdb;}public String getHostIp() {return hostIp;}public void setHostIp(String hostIp) {this.hostIp = hostIp;}public String getPort() {return port;}public void setPort(String port) {this.port = port;}}

3、解析redis叢集配置
package com.iss.itreasury.test.jedis;import java.io.IOException;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import org.springframework.core.io.support.EncodedResource;/** * 解析redis叢集配置 * @author xiakai * */public class RedisConfig {public static Map<String,List<RedisCluster>> redisGroupMap = null;//有參建構函式public RedisConfig(){}//擷取所有clusterGroup組的索引值對public static Map<String,List<RedisCluster>> getRedisGroupMap(){//讀取xml檔案Document document=readXmlFile();//獲得clusterGroup節點的key 和 listif(redisGroupMap == null){redisGroupMap=getMapByItemsGroup(document);}return redisGroupMap;}//讀取redisConfig設定檔private static Document readXmlFile(){    //建立讀入對象    SAXReader reader = new SAXReader();    //建立document執行個體    Document doc=null;    try {    //從類路徑下負載檔案redisConfig.xml    Resource resource = new ClassPathResource("redisClusterConfig.xml");     //指定檔案資源對應的編碼格式(UTF-8),這樣才能正確讀取檔案的內容,而不會出現亂碼    EncodedResource encodeResource = new EncodedResource(resource,"UTF-8");     doc = reader.read(encodeResource.getReader());}     catch (IOException e) {    System.out.println("無法讀取系統設定檔redisConfig.xml,可能該檔案不存在");} catch (DocumentException e) {System.out.println("解析redisConfig.xml檔案出現異常");}return doc;}//讀取xml節點,返回節點為redisGroup的Mapprivate  static Map<String,List<RedisCluster>> getMapByItemsGroup(Document document){Map<String,List<RedisCluster>> itemmap=new HashMap<String,List<RedisCluster>>();try{//獲得根節點Element root=document.getRootElement();//獲得根節點下所有子節點clusterGroup的listList itemsList=root.selectNodes("./clusterGroup");for(int i=0;i<itemsList.size();i++){//獲得節點ItemsElement items=(Element)itemsList.get(i);String groupName=items.attribute("name").getText();String selectdb = items.attribute("selectdb")==null?"":items.attribute("selectdb").getText();//if(groupName!=null&&groupName.equals(this.getGroupName())){ //獲得clusterGroup下所有子節點service的list List itemList=items.elements(); //獲得service節點的值 List<RedisCluster> redisClusterList = getItemList(itemList,selectdb);  itemmap.put(groupName, redisClusterList);//}    }}catch(Exception e){}return itemmap;}//獲得所有Item下節點的redis服務節點private static List<RedisCluster> getItemList(List itemList,String selectdb){List<RedisCluster> redisClusterList = new ArrayList<RedisCluster>();for(int i=0;i<itemList.size();i++){//獲得節點serverElement item=(Element)itemList.get(i);String hostIp =  item.attribute("host").getText();String port = item.attribute("port").getText();RedisCluster redisCluster =new RedisCluster();redisCluster.setHostIp(hostIp);redisCluster.setPort(port);redisCluster.setSelectdb(selectdb);redisClusterList.add(redisCluster);   }return redisClusterList;}public static void main(String[] args) {getRedisGroupMap();//JedisUtil.insertPublicDataObject("user1", "張三", JedisUtil.ONLINE_USER);//JedisUtil.insertPublicDataObject("user2", "李四", JedisUtil.ONLINE_USER);//JedisUtil.insertPublicDataObject("user3", "王五", JedisUtil.ONLINE_USER);  Set s = JedisUtil.getAllSet(JedisUtil.ONLINE_USER);  Iterator it = s.iterator();   while (it.hasNext()) {   String key = (String) it.next();   String value = JedisUtil.getString(key,JedisUtil.ONLINE_USER);   System.out.println(key + value);  }String test = JedisUtil.getString("user1",JedisUtil.ONLINE_USER);System.out.println(test);}}


4、操作redis資料庫的工具類
package com.isoftstone.cms.syscore.utils;import java.lang.reflect.Type;import java.util.List;import java.util.Set;import java.util.zip.CRC32;import redis.clients.jedis.Jedis;import redis.clients.jedis.exceptions.JedisConnectionException;import com.google.gson.Gson;import com.isoftstone.cms.syscore.pojo.RedisCluster;public class JedisUtil {// 資料庫public static final String STORE_LOGINUSER = "4";// 商戶登陸使用者public static final String STORE_INFO = "5";// 商戶狀態 商戶購買服務有效期間public static final String CHECK_CODE = "6";// 驗證碼public static final String MENU = "7";// 全部菜單public static final String SERVICE = "8";// 服務收費資訊public static final String STORE_LOGINKEY = "9";// 初始化登入公開金鑰 私密金鑰對// 固定keypublic static final String ALL_MENU_KEY = "ALL_MENU_KEY";public static final String BUY_SERVICE_KEY = "BUY_SERVICE_KEY";// 服務收費購買keypublic static final String ALL_SERVICE_KEY = "ALL_SERVICE_KEY";//所有服務public static final String MENU_AUTHORITY = "MENU_AUTHORITY";// 菜單許可權public static final String STORE_MENU_KEY = "STORE_MENU_KEY";// 需要商戶分配的業務菜單public static final String STORE_SERVICE_KEY = "STORE_SERVICE_KEY";// 商戶收費keypublic static final String SYSTE_MENU_KEY = "SYSTE_MENU_KEY";// 系統管理菜單key// jedis服務組業務類型public static final String CONT_CLUSTERNAME_PUBLICDATA = "publicData";public static final String CONT_CLUSTERNAME_SESSIONROUTE = "sessionRoute";public static final String CONT_CLUSTERNAME_USERROUTE = "userRoute";// 操作方式 0 插入 1擷取 2 刪除public static final long INSERT_OPERATION = 0;public static final long GET_OPERATION = 1;public static final long DELETE_OPERATION = 2;// 驗證碼到期秒數public static final int CHECKCODE_EXPIRESECONDS = 5*60;// session到期秒數public static final int EXPIRESECONDS = 30 * 60;private static void closeJedis(Jedis jedis) {try {jedis.quit();} catch (JedisConnectionException e) {e.printStackTrace();}jedis.disconnect();}/** * 根據Key擷取字串 * * @param key * @param jedisGroup */public static String getString(String key, String selectdb) {Jedis jedis = getPublicDataJedis(key, GET_OPERATION, selectdb);return jedis.get(key);}/** * 擷取所有資料set * @param selectdb * @return */public static Set getAllSet(String selectdb) {Jedis jedis = getDataJedis(GET_OPERATION, selectdb);return jedis.keys("*");}/** * 預設取設定檔的第一個資料庫 * @param operation * @param selectdb * @return */private static Jedis getDataJedis(long operation, String selectdb) {if (RedisConfig.redisGroupMap == null) {RedisConfig.redisGroupMap = RedisConfig.getRedisGroupMap();}List<RedisCluster> clustersList = RedisConfig.redisGroupMap.get(CONT_CLUSTERNAME_PUBLICDATA);int clusterNo = 0;//預設存到第一個RedisCluster cluster = clustersList.get(clusterNo);Jedis jedis = new Jedis(cluster.getHostIp(), Integer.valueOf(cluster.getPort()));jedis.select(Integer.valueOf(selectdb));return jedis;}/** * 刪除資料 * * @param key * @param jedisGroup */public static void deleteObject(String key, String jedisGroup) {Jedis jedis = getJedis(key, jedisGroup, DELETE_OPERATION);jedis.del(key);closeJedis(jedis);}/** * 刪除公用資料 * * @param key * @param objClass * @param selectdb */public static void deletePublicDataObject(String key, String selectdb) {Jedis jedis = getPublicDataJedis(key, DELETE_OPERATION, selectdb);jedis.del(key);closeJedis(jedis);}/** * 擷取jedis的庫執行個體 * * @param key * @param jedisGroup * @param operation * @return */private static Jedis getJedis(String key, String jedisGroup, long operation) {if (RedisConfig.redisGroupMap == null) {RedisConfig.redisGroupMap = RedisConfig.getRedisGroupMap();}List<RedisCluster> clustersList = RedisConfig.redisGroupMap.get(jedisGroup);int arrayLength = clustersList.size();// 根據key值算出該資訊應該存入到那個int clusterNo = getRedisNo(key, arrayLength);RedisCluster cluster = clustersList.get(clusterNo);Jedis jedis = new Jedis(cluster.getHostIp(), Integer.valueOf(cluster.getPort()));jedis.select(Integer.valueOf(cluster.getSelectdb()));return jedis;}/** * redis key值擷取對象 * * @param key * @param objClass * @param jedisGroup * @return */public static Object getObject(String key, Class objClass, String jedisGroup) {Jedis jedis = getJedis(key, jedisGroup, GET_OPERATION);String sObj = jedis.get(key);closeJedis(jedis);Gson gson = new Gson();return gson.fromJson(sObj, objClass);}/** * 擷取公用資料jedis的庫執行個體 * * @param key * @param jedisGroup * @param operation * @return */private static Jedis getPublicDataJedis(String key, long operation, String selectdb) {if (RedisConfig.redisGroupMap == null) {RedisConfig.redisGroupMap = RedisConfig.getRedisGroupMap();}List<RedisCluster> clustersList = RedisConfig.redisGroupMap.get(CONT_CLUSTERNAME_PUBLICDATA);int arrayLength = clustersList.size();// 根據key值算出該資訊應該存入到那個int clusterNo = getRedisNo(key, arrayLength);RedisCluster cluster = clustersList.get(clusterNo);Jedis jedis = new Jedis(cluster.getHostIp(), Integer.valueOf(cluster.getPort()));jedis.select(Integer.valueOf(selectdb));return jedis;}/** * publicdata redis key值擷取對象 * * @param key * @param objClass * @param jedisGroup * @return */public static Object getPublicDataObject(String key, Class objClass, String selectdb) {Jedis jedis = getPublicDataJedis(key, GET_OPERATION, selectdb);String sObj = jedis.get(key);closeJedis(jedis);Gson gson = new Gson();return gson.fromJson(sObj, objClass);}/** * publicdata redis key值擷取對象 List<Entity> * * @param key * @param objClass * @param jedisGroup * @return */public static Object getPublicDataObjectByType(String key, Type type, String selectdb) {Jedis jedis = getPublicDataJedis(key, GET_OPERATION, selectdb);String sObj = jedis.get(key);closeJedis(jedis);Gson gson = new Gson();return gson.fromJson(sObj, type);}/** * 擷取redis伺服器庫編號 * * @param hashKey * @return */public static int getRedisNo(String key, int arraySize) {long hashKey = hash(key);int redisNo = (int) (hashKey % arraySize);return redisNo;}/** * 根據key值算出hash值 * * @param k * @return */public static long hash(String k) {CRC32 crc32 = new CRC32();crc32.update(k.getBytes());return crc32.getValue();}/** * redis 根據key值將對象插入到不同的庫中 * * @param key * @param insertObj * @param jedisGroup */public static void insertObject(String key, Object insertObj, String jedisGroup) {Jedis jedis = getJedis(key, jedisGroup, INSERT_OPERATION);Gson gson = new Gson();jedis.set(key, gson.toJson(insertObj));closeJedis(jedis);}/** * redis 根據key值將對象插入到不同的庫中 * * @param key * @param insertObj * @param jedisGroup * @param expire */public static void insertObject(String key, Object insertObj, String jedisGroup, int expireSeconds) {Jedis jedis = getJedis(key, jedisGroup, INSERT_OPERATION);Gson gson = new Gson();jedis.setex(key, expireSeconds, gson.toJson(insertObj));closeJedis(jedis);}/** * publicdata redis 根據key值將對象插入到不同的庫中 * * @param key * @param insertObj * @param jedisGroup */public static void insertPublicDataObject(String key, Object insertObj, String selectdb) {Jedis jedis = getPublicDataJedis(key, INSERT_OPERATION, selectdb);Gson gson = new Gson();jedis.set(key, gson.toJson(insertObj));closeJedis(jedis);}/** * publicdata redis 根據key值將對象插入到不同的庫中, * * @param key * @param insertObj * @param jedisGroup * @param expireSeconds */public static void insertPublicDataObject(String key, Object insertObj, String selectdb, int expireSeconds) {Jedis jedis = getPublicDataJedis(key, INSERT_OPERATION, selectdb);Gson gson = new Gson();jedis.setex(key, expireSeconds, gson.toJson(insertObj));closeJedis(jedis);}/** * 更新redis中key的逾時時間 * * @param key * @param jedisGroup * @param expireSeconds */public static void resetExpireSeconds(String key, String jedisGroup, int expireSeconds) {Jedis jedis = getJedis(key, jedisGroup, GET_OPERATION);jedis.expire(key, expireSeconds);closeJedis(jedis);}}


5、所需jar包

java操作redis資料庫執行個體(redis叢集)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.