Java中的Redis应用
1、配置redis集群
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?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连接属性实体类
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | packagenet.itxm.cms.syscore.pojo;  /** * redis连接属性 * */publicclassRedisCluster   {      privateString selectdb;      privateString hostIp;      privateString  port;      publicString getSelectdb() {          returnselectdb;      }      publicvoidsetSelectdb(String selectdb) {          this.selectdb = selectdb;      }      publicString getHostIp() {          returnhostIp;      }      publicvoidsetHostIp(String hostIp) {          this.hostIp = hostIp;      }      publicString getPort() {          returnport;      }      publicvoidsetPort(String port) {          this.port = port;      }  } | 
3、解析redis集群配置
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | packagenet.itxm.itreasury.test.jedis;  importjava.io.IOException;  importjava.util.ArrayList;  importjava.util.HashMap;  importjava.util.Iterator;  importjava.util.List;  importjava.util.Map;  importjava.util.Set;  importorg.dom4j.Document;  importorg.dom4j.DocumentException;  importorg.dom4j.Element;  importorg.dom4j.io.SAXReader;  importorg.springframework.core.io.ClassPathResource;   importorg.springframework.core.io.Resource;   importorg.springframework.core.io.support.EncodedResource;  /** * 解析redis集群配置 * */publicclassRedisConfig {  publicstaticMap<String,List<RedisCluster>> redisGroupMap = null;  //有参构造函数  publicRedisConfig()  {  }  //获取所有clusterGroup组的键值对  publicstaticMap<String,List<RedisCluster>> getRedisGroupMap(){      //读取xml文件      Document document=readXmlFile();      //获得clusterGroup节点的key 和 list      if(redisGroupMap == null)      {          redisGroupMap=getMapByItemsGroup(document);      }      returnredisGroupMap;  }  //读取redisConfig配置文件  privatestaticDocument readXmlFile(){      //创建读入对象      SAXReader reader = newSAXReader();      //创建document实例      Document doc=null;      try{      //从类路径下加载文件redisConfig.xml        Resource resource = newClassPathResource("redisClusterConfig.xml");       //指定文件资源对应的编码格式(UTF-8),这样才能正确读取文件的内容,而不会出现乱码      EncodedResource encodeResource = newEncodedResource(resource,"UTF-8");       doc = reader.read(encodeResource.getReader());      }       catch(IOException e) {          System.out.println("无法读取系统配置文件redisConfig.xml,可能该文件不存在");      } catch(DocumentException e) {          System.out.println("解析redisConfig.xml文件出现异常");      }      returndoc;  }  //读取xml节点,返回节点为redisGroup的Map  privatestaticMap<String,List<RedisCluster>> getMapByItemsGroup(Document document){      Map<String,List<RedisCluster>> itemmap=newHashMap<String,List<RedisCluster>>();      try{          //获得根节点          Element root=document.getRootElement();          //获得根节点下所有子节点clusterGroup的list          List itemsList=root.selectNodes("./clusterGroup");          for(inti=0;i<itemsList.size();i++){          //获得节点Items          Element 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){      }      returnitemmap;  }  //获得所有Item下节点的redis服务节点  privatestaticList<RedisCluster> getItemList(List itemList,String selectdb){      List<RedisCluster> redisClusterList = newArrayList<RedisCluster>();      for(inti=0;i<itemList.size();i++){          //获得节点server          Element item=(Element)itemList.get(i);          String hostIp =  item.attribute("host").getText();          String port = item.attribute("port").getText();          RedisCluster redisCluster =newRedisCluster();          redisCluster.setHostIp(hostIp);          redisCluster.setPort(port);          redisCluster.setSelectdb(selectdb);          redisClusterList.add(redisCluster);     }      returnredisClusterList;  }  publicstaticvoidmain(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数据库的工具类
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 | packagenet.itxm.cms.syscore.utils;  importjava.lang.reflect.Type;  importjava.util.List;  importjava.util.Set;  importjava.util.zip.CRC32;  importredis.clients.jedis.Jedis;  importredis.clients.jedis.exceptions.JedisConnectionException;  importcom.google.gson.Gson;  importcom.isoftstone.cms.syscore.pojo.RedisCluster;  publicclassJedisUtil {      // 数据库      publicstaticfinalString STORE_LOGINUSER = "4";// 商户登陆用户      publicstaticfinalString STORE_INFO = "5";// 商户状态 商户购买服务有效期      publicstaticfinalString CHECK_CODE = "6";// 验证码      publicstaticfinalString MENU = "7";// 全部菜单      publicstaticfinalString SERVICE = "8";// 服务收费信息      publicstaticfinalString STORE_LOGINKEY = "9";// 初始化登录公钥 私钥对      // 固定key      publicstaticfinalString ALL_MENU_KEY = "ALL_MENU_KEY";      publicstaticfinalString BUY_SERVICE_KEY = "BUY_SERVICE_KEY";// 服务收费购买key      publicstaticfinalString ALL_SERVICE_KEY = "ALL_SERVICE_KEY";//所有服务      publicstaticfinalString MENU_AUTHORITY = "MENU_AUTHORITY";// 菜单权限      publicstaticfinalString STORE_MENU_KEY = "STORE_MENU_KEY";// 需要商户分配的业务菜单      publicstaticfinalString STORE_SERVICE_KEY = "STORE_SERVICE_KEY";// 商户收费key      publicstaticfinalString SYSTE_MENU_KEY = "SYSTE_MENU_KEY";// 系统管理菜单key      // jedis服务组业务类型      publicstaticfinalString CONT_CLUSTERNAME_PUBLICDATA = "publicData";      publicstaticfinalString CONT_CLUSTERNAME_SESSIONROUTE = "sessionRoute";      publicstaticfinalString CONT_CLUSTERNAME_USERROUTE = "userRoute";      // 操作方式 0 插入 1获取 2 删除      publicstaticfinallongINSERT_OPERATION = 0;      publicstaticfinallongGET_OPERATION = 1;      publicstaticfinallongDELETE_OPERATION = 2;      // 验证码过期秒数      publicstaticfinalintCHECKCODE_EXPIRESECONDS = 5*60;      // session过期秒数      publicstaticfinalintEXPIRESECONDS = 30* 60;      privatestaticvoidcloseJedis(Jedis jedis) {          try{              jedis.quit();          } catch(JedisConnectionException e) {              e.printStackTrace();          }          jedis.disconnect();      }      /**     * 根据Key获取字符串     *     * @param key     * @param jedisGroup     */    publicstaticString getString(String key, String selectdb) {          Jedis jedis = getPublicDataJedis(key, GET_OPERATION, selectdb);          returnjedis.get(key);      }      /**     * 获取所有数据set     * @param selectdb     * @return     */    publicstaticSet getAllSet(String selectdb) {          Jedis jedis = getDataJedis(GET_OPERATION, selectdb);          returnjedis.keys("*");      }      /**     * 默认取配置文件的第一个数据库     * @param operation     * @param selectdb     * @return     */    privatestaticJedis getDataJedis(longoperation, String selectdb) {          if(RedisConfig.redisGroupMap == null) {              RedisConfig.redisGroupMap = RedisConfig.getRedisGroupMap();          }          List<RedisCluster> clustersList = RedisConfig.redisGroupMap.get(CONT_CLUSTERNAME_PUBLICDATA);          intclusterNo = 0;//默认存到第一个          RedisCluster cluster = clustersList.get(clusterNo);          Jedis jedis = newJedis(cluster.getHostIp(), Integer.valueOf(cluster.getPort()));          jedis.select(Integer.valueOf(selectdb));          returnjedis;      }      /**     * 删除数据     *     * @param key     * @param jedisGroup     */    publicstaticvoiddeleteObject(String key, String jedisGroup) {          Jedis jedis = getJedis(key, jedisGroup, DELETE_OPERATION);          jedis.del(key);          closeJedis(jedis);      }      /**     * 删除公共数据     *     * @param key     * @param objClass     * @param selectdb     */    publicstaticvoiddeletePublicDataObject(String key, String selectdb) {          Jedis jedis = getPublicDataJedis(key, DELETE_OPERATION, selectdb);          jedis.del(key);          closeJedis(jedis);      }      /**     * 获取jedis的库实例     *     * @param key     * @param jedisGroup     * @param operation     * @return     */    privatestaticJedis getJedis(String key, String jedisGroup, longoperation) {          if(RedisConfig.redisGroupMap == null) {              RedisConfig.redisGroupMap = RedisConfig.getRedisGroupMap();          }          List<RedisCluster> clustersList = RedisConfig.redisGroupMap.get(jedisGroup);          intarrayLength = clustersList.size();          // 根据key值算出该信息应该存入到那个          intclusterNo = getRedisNo(key, arrayLength);          RedisCluster cluster = clustersList.get(clusterNo);          Jedis jedis = newJedis(cluster.getHostIp(), Integer.valueOf(cluster.getPort()));          jedis.select(Integer.valueOf(cluster.getSelectdb()));          returnjedis;      }      /**     * redis key值获取对象     *     * @param key     * @param objClass     * @param jedisGroup     * @return     */    publicstaticObject getObject(String key, Class objClass, String jedisGroup) {          Jedis jedis = getJedis(key, jedisGroup, GET_OPERATION);          String sObj = jedis.get(key);          closeJedis(jedis);          Gson gson = newGson();          returngson.fromJson(sObj, objClass);      }      /**     * 获取公共数据jedis的库实例     *     * @param key     * @param jedisGroup     * @param operation     * @return     */    privatestaticJedis getPublicDataJedis(String key, longoperation, String selectdb) {          if(RedisConfig.redisGroupMap == null) {              RedisConfig.redisGroupMap = RedisConfig.getRedisGroupMap();          }          List<RedisCluster> clustersList = RedisConfig.redisGroupMap.get(CONT_CLUSTERNAME_PUBLICDATA);          intarrayLength = clustersList.size();          // 根据key值算出该信息应该存入到那个          intclusterNo = getRedisNo(key, arrayLength);          <a href="http://www.itxm.net/"target="_blank">RedisCluster </a>cluster = clustersList.get(clusterNo);          Jedis jedis = newJedis(cluster.getHostIp(), Integer.valueOf(cluster.getPort()));          jedis.select(Integer.valueOf(selectdb));          returnjedis;      }      /**     * publicdata redis key值获取对象     *     * @param key     * @param objClass     * @param jedisGroup     * @return     */    publicstaticObject getPublicDataObject(String key, Class objClass, String selectdb) {          Jedis jedis = getPublicDataJedis(key, GET_OPERATION, selectdb);          String sObj = jedis.get(key);          closeJedis(jedis);          Gson gson = newGson();          returngson.fromJson(sObj, objClass);      }      /**     * publicdata redis key值获取对象 List<Entity>     *     * @param key     * @param objClass     * @param jedisGroup     * @return     */    publicstaticObject getPublicDataObjectByType(String key, Type type, String selectdb) {          Jedis jedis = getPublicDataJedis(key, GET_OPERATION, selectdb);          String sObj = jedis.get(key);          closeJedis(jedis);          Gson gson = newGson();          returngson.fromJson(sObj, type);      }      /**     * 获取redis服务器库编号     *     * @param hashKey     * @return     */    publicstaticintgetRedisNo(String key, intarraySize) {          longhashKey = hash(key);          intredisNo = (int) (hashKey % arraySize);          returnredisNo;      }      /**     * 根据key值算出hash值     *     * @param k     * @return     */    publicstaticlonghash(String k) {          CRC32 crc32 = newCRC32();          crc32.update(k.getBytes());          returncrc32.getValue();      }      /**     * redis 根据key值将对象插入到不同的库中     *     * @param key     * @param insertObj     * @param jedisGroup     */    publicstaticvoidinsertObject(String key, Object insertObj, String jedisGroup) {          Jedis jedis = getJedis(key, jedisGroup, INSERT_OPERATION);          Gson gson = newGson();          jedis.set(key, gson.toJson(insertObj));          closeJedis(jedis);      }      /**     * redis 根据key值将对象插入到不同的库中     *     * @param key     * @param insertObj     * @param jedisGroup     * @param expire     */    publicstaticvoidinsertObject(String key, Object insertObj, String jedisGroup, intexpireSeconds) {          Jedis jedis = getJedis(key, jedisGroup, INSERT_OPERATION);          Gson gson = newGson();          jedis.setex(key, expireSeconds, gson.toJson(insertObj));          closeJedis(jedis);      }      /**     * publicdata redis 根据key值将对象插入到不同的库中     *     * @param key     * @param insertObj     * @param jedisGroup     */    publicstaticvoidinsertPublicDataObject(<a href="http://www.itxm.net/"target="_blank">String </a>key, Object insertObj, String selectdb) {          Jedis jedis = getPublicDataJedis(key, INSERT_OPERATION, selectdb);          Gson gson = newGson();          jedis.set(key, gson.toJson(insertObj));          closeJedis(jedis);      }      /**     * publicdata redis 根据key值将对象插入到不同的库中,     *     * @param key     * @param insertObj     * @param jedisGroup     * @param expireSeconds     */    publicstaticvoidinsertPublicDataObject(String key, Object insertObj, String selectdb, intexpireSeconds) {          Jedis jedis = getPublicDataJedis(key, INSERT_OPERATION, selectdb);          Gson gson = newGson();          jedis.setex(key, expireSeconds, gson.toJson(insertObj));          closeJedis(jedis);      }      /**     * 更新redis中key的超时时间     *     * @param key     * @param jedisGroup     * @param expireSeconds     */    publicstaticvoidresetExpireSeconds(String key, String jedisGroup, intexpireSeconds) {          Jedis jedis = getJedis(key, jedisGroup, GET_OPERATION);          jedis.expire(key, expireSeconds);          closeJedis(jedis);      }  } | 
5、所需jar包
本文来自博客园,作者:小珍珠在河里敲代码,转载请注明原文链接:https://www.cnblogs.com/Jansens520/p/7825636.html
 

 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号