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 net.itxm.cms.syscore.pojo;
/**
* redis连接属性
*
*/
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、解析redis集群配置

    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.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集群配置
*
*/
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 和 list
if(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的Map
private static Map<String,List<RedisCluster>> getMapByItemsGroup(Document document){
Map<String,List<RedisCluster>> itemmap=new HashMap<String,List<RedisCluster>>();
try{
//获得根节点
Element root=document.getRootElement();
//获得根节点下所有子节点clusterGroup的list
List itemsList=root.selectNodes("./clusterGroup");
for(int i=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){
}
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++){
//获得节点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", "张三", 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 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 {
// 数据库
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";// 初始化登录公钥 私钥对
// 固定key
public static final String ALL_MENU_KEY = "ALL_MENU_KEY";
public static final String BUY_SERVICE_KEY = "BUY_SERVICE_KEY";// 服务收费购买key
public 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";// 商户收费key
public 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);
RedisClustercluster = 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(Stringkey, 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包

Redis集群版在Java中的应用的更多相关文章

  1. springboot和Redis集群版的整合

    此篇接上一个文章springboot和Redis单机版的整合 https://www.cnblogs.com/lin530/p/12019023.html 下面接着介绍和Redis集群版的整合. 1. ...

  2. 快速搭建redis单机版和redis集群版

    单机版 第一步:需要安装redis所需的C语言环境,若虚拟机联网,则执行 yum install gcc-c++ 第二步:redis的源码包上传到linux系统 第三步:解压缩redis   tar ...

  3. Linux 安装Redis<集群版>(使用Mac远程访问)

    阅读本文需要先阅读安装Redis<准备> 一 架构细节 所有的redis节点彼此互联(PING-PONG机制) 内部使用二进制协议优化传输速度和带宽 节点的fail是通过集群中超过半数的节 ...

  4. redis集群搭建及java(jedis)链接

    1.创建一个redis-cluster 目录 mkdir -p /usr/local/redis-cluster 创建6台redis服务器(单机下学习) mkdir 7001.mkdir 7002.m ...

  5. Redis 集群版

    1.# yum install ruby -y 1.1 后面需要用到ruby脚本 2.# yum install rubygems -y 1.1 安装ruby包管理器 3.# gem install ...

  6. Java Spring mvc 操作 Redis 及 Redis 集群

    本文原创,转载请注明:http://www.cnblogs.com/fengzheng/p/5941953.html 关于 Redis 集群搭建可以参考我的另一篇文章 Redis集群搭建与简单使用 R ...

  7. redis整合Spring集群搭建及业务中的使用

    1.redis安装 Redis是c语言开发的. 安装redis需要c语言的编译环境.如果没有gcc需要在线安装.yum install gcc-c++ 安装步骤: 第一步:redis的源码包上传到li ...

  8. 使用jedis客户端连接redis,单机版和集群版

    单机版 1.入门实例 @Test public void testJedis(){ //创建一个jedis对象,需要指定服务的ip和端口号 Jedis jedis=new Jedis("19 ...

  9. (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版

    http://blog.csdn.net/yerenyuan_pku/article/details/72863323 我们知道Jedis在处理Redis的单机版和集群版时是完全不同的,有可能在开发的 ...

随机推荐

  1. <花荣《至尊狐狸》中国股市精英最优套利战术>读书笔记

    书在这里 第一定律:博弈分析是一切实战操作的基础,资金的机会利润由主力投机状态决定,资金的风险承受度由投资标的价值底线锁定 第二定律:套利战术应是背景性的.主动性的.互动性的,是最安全最保守的.最明确 ...

  2. libevent简述

    libevent是一个轻量级的基于事件驱动的高性能的开源网络库,并且支持多个平台,对多个平台的I/O复用技术进行了封装,当我们编译库的代码时,编译的脚本将会根据OS支持的处理事件机制,来编译相应的代码 ...

  3. es 加磁盘扩容

    elasticsearch多磁盘扩容   1.问题 由于早前elasticsearch集群数据存储路径只配置了一个,所以某天磁盘突然爆满,集群差点当机.需重新配置多路径存储路径,因为在生产环境,得保证 ...

  4. 阿里云扩容数据盘_Linux

    扩容数据盘_Linux 更新时间:2018-10-11 15:18:46 · 编辑者 编辑 · ★ 我的收藏 新手学堂 学习路径 本页目录 前提条件 注意事项 步骤 1. 在控制台上扩容数据盘的磁盘空 ...

  5. 三篇文章了解 TiDB 技术内幕——说计算

    在这我们将关系模型简单理解为 Table 和 SQL 语句,那么问题变为如何在 KV 结构上保存 Table 以及如何在 KV 结构上运行 SQL 语句. 假设我们有这样一个表的定义: CREATE ...

  6. 动态规划--电路布线(circuit layout)

    <算法设计与分析>  --王晓东 题目描述: 在一块电路板的上.下2端分别有n个接线柱.根据电路设计,要求用导线(i,a(i))将上端接线柱与下端接线柱相连,其中a(i)表示上端点i对应的 ...

  7. SpringMVC深度探险(一) —— SpringMVC前传

    在我们熟知的建立在三层结构(表示层.业务逻辑层.持久层)基础之上的J2EE应用程序开发之中,表示层的解决方案最多.因为在表示层自身的知识触角很多,需要解决的问题也不少,这也就难免造成与之对应的解决方案 ...

  8. 记录第一次使用jni编译so包的入门操作

    1.配置 下载自己相对应的ndk平台版本后配置到studio 在local.properties加入路径 在gradle.properties文件添加 2.创建工具类(注意方法都是native的) 3 ...

  9. 【转】IT族室内锻炼身体的小妙招

    上班族.久坐族近年的健康状况令人堪忧,由于缺乏运动加上长期面对辐射,使上班族身体状况越来越差.专家建议上班族应多加运动,只需小小的动作就能轻松获得健康! 梳头:用木梳从前额至头顶部向后部梳刷,逐渐加快 ...

  10. JSP之静态include指令、动态Include指令

    (一)使用静态include指令 <%@ page language="java" contentType="text/html; charset=gb2312&q ...