文档章节

SpringMVC下Redis集群cluster的试水小测

Pig-man
 Pig-man
发布于 2016/08/15 15:50
字数 1963
阅读 226
收藏 3

第一步:resource.porperties文件写入cluster的参数

#redis
jedis_max_active=2048
jedis_max_idle=100
jedis_max_wait=10000
jedis_test_on_borrow=true


#cluster
cluster_url=192.168.7.60
cluster_port=6381
cluster_url2=192.168.7.60
cluster_port2=6380
cluster_url3=192.168.7.60
cluster_port3=6381
cluster_url4=192.168.7.60
cluster_port4=6379
cluster_url5=192.168.7.60
cluster_port5=6380
cluster_url6=192.168.7.60
cluster_port6=6383

第二步:封bean,spring-redis.xml

<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"  
    xmlns:context="http://www.springframework.org/schema/context"  
    xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"  
    xmlns:aop="http://www.springframework.org/schema/aop"  
    xsi:schemaLocation="  
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">  

    <context:property-placeholder location="classpath:resource.properties" />  

    <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxIdle" value="${jedis_max_idle}" />
        <property name="maxTotal" value="${jedis_max_active}" />
        <property name="maxWaitMillis" value="${jedis_max_wait}" />
        <property name="testOnBorrow" value="${jedis_test_on_borrow}" />
    </bean>

    <!-- 	 使用构造方法注入:public JedisCluster(Set<HostAndPort> nodes, int timeout, final GenericObjectPoolConfig poolConfig)  -->
    <bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
        <constructor-arg index="0">
            <set>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg type="java.lang.String" value="${cluster_url}" />
                    <constructor-arg type="int" value="${cluster_port}" />
                </bean>
                <bean class="redis.clients.jedis.HostAndPort">
                   <constructor-arg type="java.lang.String" value="${cluster_url2}" />
                   <constructor-arg type="int" value="${cluster_port2}" />
                </bean>-->
                <bean class="redis.clients.jedis.HostAndPort">-->
                    <constructor-arg type="java.lang.String" value="${cluster_url3}" />
                    <constructor-arg type="int" value="${cluster_port3}" />
                </bean>
                <bean class="redis.clients.jedis.HostAndPort">-->
                    <constructor-arg type="java.lang.String" value="${cluster_url4}" />
                    <constructor-arg type="int" value="${cluster_port4}" />
                </bean>
                <bean class="redis.clients.jedis.HostAndPort">-->
                    <constructor-arg type="java.lang.String" value="${cluster_url5}" />
                    <constructor-arg type="int" value="${cluster_port5}" />-->
                </bean>
                <bean class="redis.clients.jedis.HostAndPort">-->
                    <constructor-arg type="java.lang.String" value="${cluster_url6}" />
                    <constructor-arg type="int" value="${cluster_port6}" />
                </bean>
            </set>
        </constructor-arg>
        <constructor-arg index="1" value="60000" type="int"></constructor-arg>
        <constructor-arg index="2" ref="poolConfig"></constructor-arg>
    </bean>
</beans>

第三步 接口描述IRedisCommandService,及方法调用RedisCommandServiceImpl implements IRedisCommandService

package com.aneop.common.cluster;

import java.util.List;
import java.util.Map;
import java.util.Set;

public interface IRedisCommandService {
	//----------------String-------------------
	/**
	 * 给一个 KEY 设置一个 值 ,并且设置有效时间
	 * @param key 存储的KEY
	 * @param value 存储KEY的值
	 * @param expire 有效时间
	 * @return 操作成功完成时返回 OK
	 * @throws Exception 异常
	 */
	public String set(String key, Object value, int expire) throws Exception;
	/**
	 * 获取 KEY对应的值
	 * @param key 查询的KEY
	 * @param cls 返回的对象类型
	 * @return
	 * @throws Exception 异常
	 */
	public <T> T get(String key, Class<T> cls) throws Exception;

	
	//--------------Set-----------------------
	/**
	 * 返回Set中成员的数量,如果该Key并不存在,返回0。
	 * 
	 * @param key
	 * @return
	 * @throws Exception
	 */
	public Long scard(String key) throws Exception;

	/**
	 * 如果在插入的过程用,参数中有的成员在Set中已经存在,该成员将被忽略,而其它成员仍将会被正常插入。
	 * 如果执行该命令之前,该Key并不存在,该命令将会创建一个新的Set,此后再将参数中的成员陆续插入。
	 * 如果该Key的Value不是Set类型,该命令将返回相关的错误信息。
	 * 
	 * @param key
	 * @param members
	 * @return 本次操作实际插入的成员数量。
	 * @throws Exception 
	 */
	public Long sadd(String key, Object... members) throws Exception;

	/**
	 * 从与Key关联的Set中删除参数中指定的成员,不存在的参数成员将被忽略,如果该Key并不存在,将视为空Set处理。
	 * 
	 * @param key
	 * @param members
	 * @return 从Set中实际移除的成员数量,如果没有则返回0。
	 * @throws Exception 
	 */
	public Long srem(String key, Object... members) throws Exception;

	/**
	 * 查询set 里面的成员
	 * 
	 * @param key
	 * @throws Exception 
	 */
	public <T> Set<T> smembers(String key, Class<T> t) throws Exception;

	/**
	 * 删除 set key的数据
	 * @throws Exception 
	 */
	public Long sremove(String key) throws Exception;
	
	//--------------Map-----------------------
	/**
	 *  Map集合存储值(为MAP新增key-value)
	 * @param key map的key
	 * @param mapKey map里面value对应的key
	 * @param value 要存储的值(JSON字符串)
	 * @throws Exception 异常
	 */
	public void setMap(String key, String mapKey, String value) throws Exception;

	/**
	 *  Map存储List(map(key,List))
	 * @param key map的key
	 * @param mapKey map里面value对应的key
	 * @param value 要存储的值
	 * @throws Exception 异常
	 */
	public void setMapList(String key, String mapKey, List<?> list) throws Exception;
	
	/**
	 * 获取缓存中,map集合中mapkey存放的对象
	 * @param name  以对象形式存储的名字
	 * @param mapKey map中key值
	 * @param t 返回实体对象类型
	 * @throws Exception
	 */
	public <T> T getMapValue(String key, String mapKey, Class<T> t) throws Exception;

	public String getMapValue(String key, String string) throws Exception;
	/**
	 * 获取缓存中,map集合中的值
	 * @param name 以对象形式存储的名字
	 * @param t 返回实体对象类型
	 * @throws Exception
	 */
	public <T> List<T> getMapValues(String key, Class<T> t) throws Exception;
	
	/**
	 * 删除 map里面的某一个值
	 * @param key map的外层key
	 * @param valueKey 值对应的key
	 * @return
	 * @throws Exception
	 */
	public Long removeMap(String key, String valueKey) throws Exception;
	
	/**
	 * 获取 map里面 所有 key对应的 value
	 * @param name 以对象形式存储的key
	 * @throws Exception 
	 */
	public Map<String, String> getMaps(String key) throws Exception;
	
	//--------------List----------------------
	
	//--------------common--------------------
	/**
	 * 删除 KEY -----此处可以删除 任意数据类型的KEY数据
	 * @param key 要删除的KEY
	 * @return 影响的数据行
	 * @throws Exception 异常
	 */
	public Long remove(String key) throws Exception;
	/**
	 * 检测 KEY在缓存中是否存在
	 * @param key 检测的KEY
	 * @return
	 * @throws Exception
	 */
	public boolean exists(String key) throws Exception;
	/**
	 * 设置有效期
	 * @param key 有效期的key
	 * @param seconds 有效时间 秒
	 * @return 影响行
	 */
	public Long expire(String key, int seconds) throws Exception;
    
	/**
	 * 
	* @Title: type 
	* @Description: 返回 key 所储存的值的类型。
	* @param @param key
	* @param @return
	* @param @throws Exception 
	* @return String 	none (key不存在)
						string (字符串)
						list (列表)
						set (集合)
						zset (有序集)
						hash (哈希表)
	* @throws
	 */
	public String type(String key)throws Exception;
    
	
	public long rPush(String key, List<?> list);
	
	public String lPop(String key);
	
	public List<String> lrange(String key);
}
  
package com.aneop.common.cluster.impl;

import com.alibaba.fastjson.JSON;
import com.aneop.common.cluster.IRedisCommandService;
import org.springframework.stereotype.Service;
import redis.clients.jedis.JedisCluster;

import javax.annotation.Resource;
import java.util.*;

@Service("redisCommandService")
public class RedisCommandServiceImpl implements IRedisCommandService {
	@Resource(name="jedisCluster")
	public JedisCluster jedisCluster;

	@Override
	public String set(String key, Object value, int expire) throws Exception {
		try {
			String result = jedisCluster.set(key, JSON.toJSONString(value));
			if (expire > 0)
				jedisCluster.expire(key, expire);
			return result;
		} catch (Exception e) {
			throw e;
		}

	}

	@Override
	public <T> T get(String key, Class<T> cls) throws Exception {
		try {
			String jsonValue = jedisCluster.get(key);
			return JSON.parseObject(jsonValue, cls);
		} catch (Exception e) {
			throw e;
		}
	}

	@Override
	public Long scard(String key) throws Exception {
		Long count = 0l;
		try {
			count = jedisCluster.scard(key);
		} catch (Exception e) {
			throw e;
		}

		return count;
	}

	@Override
	public Long sadd(String key, Object... members) throws Exception {
		Long rows = 0l;
		try {
			String[] item = new String[members.length];
			int i = 0;
			for (Object obj : members) {
				item[i] = JSON.toJSONString(obj);
				i++;
			}
			rows = jedisCluster.sadd(key, item);
		} catch (Exception e) {
			throw e;
		}

		return rows;
	}

	@Override
	public Long srem(String key, Object... members) throws Exception {
		Long rows = 0l;
		try {
			String[] item = new String[members.length];
			int i = 0;
			for (Object obj : members) {
				item[i] = JSON.toJSONString(obj);
				i++;
			}
			rows = jedisCluster.srem(key, item);
		} catch (Exception e) {
			throw e;
		}
		return rows;
	}

	@Override
	public <T> Set<T> smembers(String key, Class<T> t) throws Exception {
		try {
			Set<String> sItem = jedisCluster.smembers(key);

			Set<T> result = new HashSet<T>();
			Iterator<String> rt = sItem.iterator();
			while (rt.hasNext()) {
				result.add(JSON.parseObject(rt.next(), t));
			}
			return result;
		} catch (Exception e) {
			throw e;
		}
	}

	@Override
	public Long sremove(String key) throws Exception {
		Long result = 0L;
		try {
			result = jedisCluster.del(key);
		} catch (Exception e) {
			throw e;
		}
		return result;
	}

	// -------------------map--------------------------
	@Override
	public void setMap(String key, String mapKey, String value)
			throws Exception {
		try {
//			String jsonValue = JSON.toJSONString(value);
			jedisCluster.hset(key, mapKey, value);
		} catch (Exception e) {
			throw e;
		}
	}

	@Override
	public void setMapList(String key, String mapKey, List<?> list)
			throws Exception {
		try {
			jedisCluster.hset(key, mapKey, JSON.toJSONString(list));
		} catch (Exception e) {
			throw e;
		}		
	}

	@Override
	public <T> T getMapValue(String key, String mapKey, Class<T> t)
			throws Exception {
		List<String> list = null;
		try {

			list = jedisCluster.hmget(key, mapKey);
		} catch (Exception e) {
			throw e;
		}
		if (list == null || list.size() == 0) {
			return null;
		}

		String value = list.get(0);
		if (value != null) {
			return JSON.parseObject(value, t);
		}
		return null;
	}

	
	
	@Override
	public String getMapValue(String key, String mapKey) throws Exception {
		// TODO Auto-generated method stub
		String value = null;
		try {
			value = jedisCluster.hget(key, mapKey);
		} catch (Exception e) {
			throw e;
		}
		return value;
	}

	@Override
	public <T> List<T> getMapValues(String key, Class<T> t) throws Exception {
		List<String> list = new ArrayList<String>();
		List<T> rList = null;

		try {

			list = jedisCluster.hvals(key);
		} catch (Exception e) {
			throw e;
		}

		if (list != null && list.size()>0) {
			rList = new ArrayList<T>();
			for (int i = 0; i < list.size(); i++) {
				rList.add(JSON.parseObject(list.get(i), t));
			}
		}

		return rList;
	}

	@Override
	public Long removeMap(String key, String valueKey) throws Exception {
		Long result = 0L;

		try {
			result = jedisCluster.hdel(key, valueKey);
		} catch (Exception e) {
			throw e;
		}
		return result;
	}

	@Override
	public Map<String, String> getMaps(String key) throws Exception {

		Map<String, String> rList = new HashMap<String, String>();
		try {

			rList = jedisCluster.hgetAll(key);
		} catch (Exception e) {
			throw new Exception(e);
		}
		return rList;
	}

	// -------------------common--------------------------
	@Override
	public Long remove(String name) throws Exception {
		Long result = 0L;

		try {

			result = jedisCluster.del(name);
		} catch (Exception e) {
			throw e;
		}
		return result;
	}

	@Override
	public boolean exists(String key) throws Exception {

		try {

			return jedisCluster.exists(key);
		} catch (Exception e) {
			throw e;
		}
	}

	@Override
	public Long expire(String key, int seconds) throws Exception {
		try {
			return jedisCluster.expire(key, seconds);
		} catch (Exception e) {
			throw e;
		}
	}

	@Override
	public String type(String key) throws Exception {
		try {
			return jedisCluster.type(key);
		} catch (Exception e) {
			throw e;
		}
	}

	@Override
	public long rPush(String key, List<?> list) {
		try {
			return jedisCluster.rpush(key, JSON.toJSONString(list));
		} catch (Exception e) {
			//throw e;
			return 0l;
		}
	}

	@Override
	public String lPop(String key) {
		try {
			return jedisCluster.lpop(key);
		} catch (Exception e) {
			//throw e;
			return null;
		}
	}

	@Override
	public List<String> lrange(String key) {
		return jedisCluster.lrange(key, 0, -1);
	}

}

第四部,数据的吞吐实例

 IRedisCommandService redisCommandService = (IRedisCommandService) ApplicationContextUtil.getBean("redisCommandService");
        String reParams = this.turnToExpParams(tmsOrder);
        try {
            redisCommandService.setMap("redis_test", map.key(), map.value();
        } catch (Exception e) {
            e.printStackTrace();
        }
  IRedisCommandService redisCommandService = (IRedisCommandService) ApplicationContextUtil.getBean("redisCommandService");
        Map<String, String> newMap = null;//从redis中取出数据
        try {
           newMap = redisCommandService.getMaps("redis_test");
        } catch (Exception e) {
            e.printStackTrace();
        }

 

© 著作权归作者所有

共有 人打赏支持
Pig-man
粉丝 19
博文 62
码字总数 47800
作品 0
青浦
程序员
私信 提问
redis的集群模式和哨兵模式

redis的集群模式和哨兵模式 redis中集群模式 redis集群模式配置支持3.0及以上的版本。目的提高redis的可用性,但是只能保证一定程度的高可用。 redis-cluster原理 Redis 集群有16384个哈希槽...

狂奔的熊二
11/30
0
0
推荐几个自己写的Java后端相关的范例项目(转载)

http://wosyingjun.iteye.com/blog/2312553 这里推荐几个自己写的范例项目,主要采用SSM(Spring+SpringMVC+Mybatis)框架,分布式架构采用的是(dubbo+zookeeper)。范例项目的好处是简单易...

指尖的舞者
2016/09/27
147
0
springmvc整合redis集群连接拒绝java.net.ConnectException: Connection refused: connect

springmvc整合redis集群,带密码连接时,连接拒绝(公网)是什么情况?(redis集群环境是Centos7)linux的防火墙也关闭了,所有的redis节点的配置文件都开启了公网访问(protected-mode)也去...

KK98
09/13
149
1
Java之品优购部署_day01(10)

4.3 连接 Redis-Cluster4.3.1 客户端工具连接 Redis-cli 连接集群: file:///C:UsersuserAppDataLocalTempksohtmlwpsD57E.tmp.png -c:代表连接的是 redis 集群 测试值的存取: (1)从本地连...

我是小谷粒
07/11
0
0
Redis Cluster(集群)的搭建

Redis Cluster(集群)的搭建 一、Redis的下载、安装、启动(单实例) 我们统一将Redis安装在/opt目录下,执行命令如下: 安装完成,下面我们启动Redis服务: Redis启动成功,将采用Redis的默...

Java同学会
06/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

RestClientUtil和ConfigRestClientUtil区别说明

RestClientUtil directly executes the DSL defined in the code. ConfigRestClientUtil gets the DSL defined in the configuration file by the DSL name and executes it. RestClientUtil......

bboss
今天
11
0

中国龙-扬科
昨天
2
0
Linux系统设置全局的默认网络代理

更改全局配置文件/etc/profile all_proxy="all_proxy=socks://rahowviahva.ml:80/"ftp_proxy="ftp_proxy=http://rahowviahva.ml:80/"http_proxy="http_proxy=http://rahowviahva.ml:80/"......

临江仙卜算子
昨天
9
0
java框架学习日志-6(bean作用域和自动装配)

本章补充bean的作用域和自动装配 bean作用域 之前提到可以用scope来设置单例模式 <bean id="type" class="cn.dota2.tpye.Type" scope="singleton"></bean> 除此之外还有几种用法 singleton:......

白话
昨天
8
0
在PC上测试移动端网站和模拟手机浏览器的5大方法

总结很全面,保存下来以备不时之需。原文地址:https://www.cnblogs.com/coolfeng/p/4708942.html

kitty1116
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部