Redis集群解决方案----JAVA应用

3 篇文章 0 订阅
3 篇文章 0 订阅

   上篇文章 Redis集群解决方案 已经已经介绍了Redis应用场景及性能、Redis单机部署以及集群部署的操作,下面将讲解如何使用JAVA客户端调用搭建好的Redis集群环境。

    先搭建一个Java工程JRedisUtils,导入Redis3.0相应的jar,点击此处下载commons-pool2-2.4.2.jar jedis-3.0.0.jar jedis-3.0.0-javadoc.jar jedis-3.0.0-sources.jar)

   现在直接贴上代码:

 

package com.jredis.util;

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

import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;


/**
 * Redis分布式调用API
 * @author pengtian
 * @Date 2016年11月17日18:10:52
 */
public class JRedisClient {
	
	
	
    private static String RESULT_OK = "OK";
	private static Set<HostAndPort> clusterNodes = null;
	private static JedisPoolConfig config = null;
	private static JedisCluster jedisCluster=null;
	
	private JRedisClient() {}  
    private static JRedisClient jredisClient=null;  
    //静态工厂方法   
    public static synchronized  JRedisClient getInstance() {  
         if (jredisClient == null) {    
        	 jredisClient = new JRedisClient();  
        	 jredisClient.clusterInit();
         } else{
        	 System.out.println("JRedisClient已经实列化");
         }   
         return jredisClient;  
    }  
	
   /**
    * 获取操作redis的客户端
    * @return
    */
    public JedisCluster getJedisCluster(){
    	if(jedisCluster==null){
    		JRedisClient.getInstance();
    	}
    	return jedisCluster;
    }

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		/*//JRedisClient jRedisClient =new JRedisClient("192.168.113.134",7006);
		System.out.println("set===>"+jRedisClient.set("key3", "key3333333333333333333"));
		System.out.println("get===>"+jRedisClient.get("key3"));*/
		
		JRedisClient jredisClient =JRedisClient.getInstance();
		jredisClient =JRedisClient.getInstance();
		/*System.out.println(jredisClient.set("FP_100000","FP_100000000000000"));
		System.out.println(jredisClient.get("FP_100000"));
		List<String> list = new ArrayList<String>();
		list.add("LIST1");
		list.add("LIST2");
		list.add("LIST3");
		jredisClient.list("LIST", 3600, list);*/
		
	/*	System.out.println("===>"+jredisClient.lrange("LIST", 0, -1));
		System.out.println("===>"+jredisClient.lrange("LIST", 0, 1));
		List<String> listGet = jredisClient.lrange("LIST",0, 2);
		for(int i=0;i<listGet.size();i++){
			System.out.println("===>"+listGet.get(i).toString());
		}
		*/
		for(int i=1;i<=10;i++){
			jredisClient.set("kEY_"+i,1000,i+"");
		}
		
		for(int i=1;i<=10;i++){
			System.out.println(i+"==>"+jredisClient.get("kEY_"+i));
		}
		
		/*for(int i=1;i<=10000;i++){
			System.out.println(i+"==>"+jredisClient.del("kEY_"+i));
		}*/
		
		/*TreeSet<String> keys = jredisClient.keys("kEY_*"); 
		if(keys.size()>0){  
		   System.out.println("SIZE:"+keys.size());  
		   for(String str:keys){
			   System.out.println("==============>"+str);   
		   }
		} else{
			System.out.println("No keys");  
		}*/
		

	}
	
	
	



	/**
	 * 配置Redis分布式节点
	 */
	private void genClusterNode() {
	    clusterNodes = new HashSet<HostAndPort>();
	    clusterNodes.add(new HostAndPort("192.168.113.133", 7000));
	    clusterNodes.add(new HostAndPort("192.168.113.133", 7011));
	    clusterNodes.add(new HostAndPort("192.168.113.133", 7001));
	    clusterNodes.add(new HostAndPort("192.168.113.134", 7006));
	    clusterNodes.add(new HostAndPort("192.168.113.134", 7007));
	    clusterNodes.add(new HostAndPort("192.168.113.131", 7009));
	    clusterNodes.add(new HostAndPort("192.168.113.131", 7008));
	}
	
	/**
	 * 实列化JRedis 线程池相关配置
	 */
	private void genJedisConfig() {
		 config = new JedisPoolConfig();
		 //pool 最大线程数
	     config.setMaxTotal(100000);
	     // 控制一个pool最多有多少个状态为idle(空闲的)的jedis实例。
	     config.setMaxIdle(100);
	     //表示当borrow(引入)一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException;
	     config.setMaxWaitMillis(180);
	     // 在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;
	     config.setTestOnBorrow(true);
	}
	
    /**
     * JRedis分布式初始化
     */
	private void clusterInit() {
		if(jedisCluster == null){
			/*  配置Redis分布式节点 **/
		    genClusterNode();
		    /* 实列化JRedis 线程池相关配置 **/
		    genJedisConfig();
		    
		    jedisCluster = new JedisCluster(clusterNodes, 5000, config);
		}
	}
	
	
	/**
	 * 字符串类型数据存储
	 * @param key
	 * @param value
	 * @return
	 */
	public boolean  set(String key, String value)
    {
		return this.set(key,0,value);
	}
	
	/**
	 * 字符串数据类型存储并设置有效期
	 * @param key
	 * @param value
	 * @return
	 */
	public boolean  set(String key, int seconds,String value)
    {
		boolean isOk = false;
		String returnResult = "";
		if(seconds>0){
			returnResult= jedisCluster.setex(key, seconds, value);
		}else{
			returnResult = jedisCluster.set(key, value);
		}
		if(RESULT_OK.equals(returnResult)){
			isOk = true;
		}
		return isOk;
	}
    
	/**
	 * 获取存储的字符串类型数据
	 * @param key
	 * @return
	 */
	public String get(String key) {
		return jedisCluster.get(key);
	}
	
	/**
	 * Map<String,String>类型数据存储
	 * @param key
	 * @param value
	 * @return
	 */
	public boolean hmset(String key, Map<String,String> hashMap){
		return this.hmset(key, 0, hashMap);
	}
	
	/**
	 * Map<String,String>类型数据存储,并设置有效期
	 * @param key
	 * @param value
	 * @return
	 */
	public boolean hmset(String key,int seconds, Map<String,String> hashMap){
		boolean isOk = false;
		String returnResult = "";
		returnResult = jedisCluster.hmset(key, hashMap);
		if(seconds>0){
		 this.expire(key, seconds);
		}
		if(RESULT_OK.equals(returnResult)){
			isOk = true;
		}
		return isOk;
	}
	/**
	 * 获取Map中的指定KEY值
	 * @param key
	 * @param field
	 * @return String
	 */
	public String  hget(String key,String field){
		return jedisCluster.hget(key, field);
	}
	
	/**
	 * 获取指定key中Map
	 * @param key
	 * @return Map
	 */
	public Map  hget(String key){
		return jedisCluster.hgetAll(key);
	}
	
	/**
	 * 计数递增
	 * @param key
	 * @return
	 */
	public long incr(String key){
	
		return jedisCluster.incr(key);
	}
	
	/**
	 * 计数递减
	 * @param key
	 * @return
	 */
	public long decr(String key){
		return 	jedisCluster.decr(key);
	}
	
	
	
	/**
	 * 设置KEY的有效期
	 * @param key
	 * @param seconds
	 * @return
	 */
	public long expire(String key,int seconds){
		return jedisCluster.expire(key, seconds);
	}
	
	/**
	 * 删除指定KEY
	 * @param key
	 * @return
	 */
	public long del(String key){
		return jedisCluster.del(key);
	}
	
	/**
	 * 存储List<String>数据
	 * @param key
	 * @param seconds
	 * @param list
	 */
	public long list(String key,List<String> list){
		return this.list(key, 0, list);
		
	}
	
	/**
	 * 存储List<String>数据并设置有效期
	 * @param key
	 * @param seconds
	 * @param list
	 */
	public long list(String key,int seconds,List<String> list){
		long returnResult = 0;
		String[] strArray = null;
		if(list!=null&&!list.isEmpty()){
			strArray = new String[list.size()];
			for(int i=0;i<list.size();i++){
				strArray[i]=list.get(i).toString();
			}
		}
		returnResult = jedisCluster.lpush(key,strArray);
		if(seconds>0){
			 this.expire(key, seconds);
		}
		return returnResult;
	}
	
	/**
	 * 获取List<String>
	 * @param key
	 * @param start
	 * @param end
	 * @return
	 */
	public List<String> lrange(String key,long start,long end){
		return jedisCluster.lrange(key, start, end);
	}
	
	/**
	 * KEYS 获取String数据类型的值
	 * @param pattern
	 * @return
	 */
    public TreeSet<String> keys(String pattern){  
        TreeSet<String> keys = new TreeSet<String>();  
        Map<String, JedisPool> clusterNodes = jedisCluster.getClusterNodes();  
        for(String k : clusterNodes.keySet()){  
            JedisPool jp = clusterNodes.get(k);  
            Jedis connection = jp.getResource();  
            try {  
                keys.addAll(connection.keys(pattern));  
            } catch(Exception e){  
            	e.printStackTrace();
            } finally{  
                connection.close();//用完一定要close这个链接!!!  
            }  
        }  
        return keys;  
    }  

	
	
 

}

单元执行Main函数,控制台打印如下内容,代表搭建的Redis集群正常:

JRedisClient已经实列化
1==>1
2==>2
3==>3
4==>4
5==>5
6==>6
7==>7
8==>8
9==>9
10==>10

接下来去Redis集群中查看下是否有数据:


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值