Application of Redis cluster version in Java, redis cluster version in java
1. Configure the redis Cluster
<?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. Create a redis connection property entity class
Package net. itxm. cms. syscore. pojo;/*** redis connection attribute **/public class RedisCluster {private String selectdb; private String hostIp; private String port; 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. parse redis cluster configuration
Package net. itxm. 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. extends entexception; import org. dom4j. element; import org. dom4j. io. SAXReader; import org. springframework. core. io. classPathResource; import org. s Pringframework. core. io. resource; import org. springframework. core. io. support. encodedResource;/*** resolve redis cluster configuration **/public class RedisConfig {public static Map <String, List <RedisCluster> redisGroupMap = null; // The constructor public RedisConfig () {}// obtain the public static Map key-value pairs of all tertergroup groups <String, List <RedisCluster> getRedisGroupMap () {// read the xml file Document document = readXmlFile (); // obtain the key and List if (redisGroupMap = null) {redisGroupMap = getMapByItemsGroup (document);} return redisGroupMap;} // read the redisConfig configuration file private static Document readXmlFile () {// create the read object SAXReader reader = new SAXReader (); // create the document instance Document doc = null; try {// load the file redisConfig from the class path. xml Resource resource = new ClassPathResource ("redisClusterConfig. xml "); // specifies the encoding format (UTF-8) corresponding to the file resource so that the file content can be correctly read without garbled EncodedReso Urce encodeResource = new EncodedResource (resource, "UTF-8"); doc = reader. read (encodeResource. getReader ();} catch (IOException e) {System. out. println ("the system configuration file redisConfig cannot be read. xml, the file may not exist ");} catch (incluentexception e) {System. out. println ("parse redisConfig. xml file exception ");} return doc;} // read the xml node and return the Map private static Map <String, List <RedisCluster> getMapByItemsGroup (Document document) of the redisGroup node) {Map <String, List <RedisCluster> itemmap = new HashMap <String, List <RedisCluster> (); try {// obtain the root node Element root = document. getRootElement (); // obtain the list List itemsList = root of all sub-nodes under the root node clusterGroup. selectNodes (". /clusterGroup "); for (int I = 0; I <itemsList. size (); I ++) {// get the node Items Element items = (Element) itemsList. get (I); String groupName = items. attribute ("name "). getText (); String selectdb = items. attribute ("selec Tdb ") = null? "": Items. attribute ("selectdb"). getText (); // if (groupName! = Null & groupName. equals (this. getGroupName () {// obtain the list List itemList = items of all sub-node services under clusterGroup. elements (); // obtain the service node Value List <RedisCluster> redisClusterList = getItemList (itemList, selectdb); itemmap. put (groupName, redisClusterList); // }}catch (Exception e) {} return itemmap ;} // obtain the apsaradb for redis service node private static List <RedisCluster> getItemList (List itemList, String selectdb) {List <RedisCluster> redisClusterList = new ArrayList <RedisCluster> (); for (int I = 0; I <itemList. size (); I ++) {// obtain the node server Element 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", "zhangsan", JedisUtil. ONLINE_USER); // JedisUtil. insertPublicDataObject ("user2", "Li Si", JedisUtil. ONLINE_USER); // JedisUtil. insertPublicDataObject ("user3", "Wang Wu", 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. Tools used to operate redis Databases
Package net. itxm. 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 {// database public static final String STORE_LOGINUSER = "4"; // merchant login user public static final String STORE_INFO = "5 "; // Merchant status the validity period of the service purchased by the merchant is public static final String CHECK_CODE = "6"; // verification code: public static final String MENU = "7 "; // All menu public static final String SERVICE = "8"; // SERVICE billing information public static final String STORE_LOGINKEY = "9 "; // initialize the private key pair of the logon public key // fixed key public static final String ALL_MENU_KEY = "ALL_MENU_KEY"; public static final String BUY_SERVICE_KEY = "BUY_SERVICE_KEY "; // service charge purchase key public static final String ALL_SERVICE_KEY = "ALL_SERVICE_KEY"; // all services public static final String MENU_AUTHORITY = "MENU_AUTHORITY "; // menu permission public static final String STORE_MENU_KEY = "STORE_MENU_KEY"; // business menu to be allocated by the merchant public static final String STORE_SERVICE_KEY = "STORE_SERVICE_KEY "; // merchant's billing key public static final String SYSTE_MENU_KEY = "SYSTE_MENU_KEY"; // System Management menu key // jedis Service Group business type public static final String CONT_CLUSTERNAME_PUBLICDATA = "publicData "; public static final String CONT_CLUSTERNAME_SESSIONROUTE = "sessionRoute"; public static final String CONT_CLUSTERNAME_USERROUTE = "userRoute"; // operation method 0 insert 1 get 2 delete public static final long INSERT_OPERATION = 0; public static final long GET_OPERATION = 1; public static final long DELETE_OPERATION = 2; // verification code expiration seconds public static final int CHECKCODE_EXPIRESECONDS = 5*60; // session expiration seconds public static final int EXPIRESECONDS = 30*60; private static void closeJedis (Jedis jedis) {try {jedis. quit ();} catch (JedisConnectionException e) {e. printStackTrace ();} jedis. disconnect ();}/*** obtain the String based on the Key ** @ param key * @ param jedisGroup */public static String getString (String key, String selectdb) {Jedis jedis = getPublicDataJedis (key, GET_OPERATION, selectdb); return jedis. get (key);}/*** get all data set * @ param selectdb * @ return */public static Set getAllSet (String selectdb) {Jedis jedis = getDataJedis (GET_OPERATION, selectdb); return jedis. keys ("*");} /*** the first database in the configuration file is used by default * @ 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; // The first RedisCluster cluster = clustersList is saved by default. get (clusterNo); Jedis jedis = new Jedis (cluster. getHostIp (), Integer. valueOf (cluster. getPort (); jedis. select (Integer. valueOf (selectdb); return jedis;}/*** delete data ** @ param key * @ param jedisGroup */public static void deleteObject (String key, String jedisGroup) {Jedis jedis = getJedis (key, jedisGroup, DELETE_OPERATION); jedis. del (key); closeJedis (jedis );} /*** Delete public data ** @ 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 );} /*** obtain the jedis database instance ** @ 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 (); // calculate the int clusterNo = getRedisNo (key, arrayLength) according to the key value; RedisCluster cluster = clustersList. get (clusterNo); Jedis jedis = new Jedis (cluster. getHostIp (), Integer. valueOf (cluster. getPort (); jedis. select (Integer. valueOf (cluster. getSelectdb (); return jedis ;} /*** obtain the redis key value Object ** @ 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 );} /*** database instance for obtaining public data 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 (); // calculate the int clusterNo = getRedisNo (key, arrayLength) according to the key value; RedisCluster cluster = clustersList. get (clusterNo); Jedis jedis = new Jedis (cluster. getHostIp (), Integer. valueOf (cluster. getPort (); jedis. select (Integer. valueOf (selectdb); return jedis ;} /*** obtain the publicdata redis key value Object ** @ 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 );} /*** obtain the publicdata redis key Value 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);}/*** get the redis Server Database Number ** @ param hashKey * @ return */public static int getRedisNo (String key, int arraySize) {long hashKey = hash (key); int redisNo = (int) (hashKey % arraySize); return redisNo ;} /*** calculate the hash value based on the key value ** @ param k * @ return */public static long hash (String k) {CRC32 crc32 = new CRC32 (); crc32.update (k. getBytes (); return crc32.getValue ();} /*** redis inserts an object into different databases based on the key value ** @ 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 inserts an object into different databases based on the key value ** @ 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 inserts the object to different databases based on the key value ** @ 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 inserts the object into different databases based on the key value, ** @ 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 );} /*** update redis key timeout time ** @ 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. Required jar packages