JAva操作redisクラスタ構成[パスワード設定可能]とツールクラス

9698 ワード

ガイド:

            redis.clients
            jedis
            2.9.0
        
        
            org.apache.commons
            commons-pool2
            2.4.2
        

バージョン:jedis
2.9.0[このバージョンでは
パスワード設定を追加]+commons-pools 2.4.2
構成:
  
  
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    


    
    
        
        
    

    
        
        
    

    
        
        
    

    
        
        
    

    
        
        
    

    
        
        
    

    
        
            
                
                
                
                
                
                
            
        
        
        
        
        password" value="${redis.clusterpassword}"/>
        
            
        
    
    

cache.propertiesを作成するには:
redis.host =192.168.xx.xxx
redis.port1=7001

redis.port2=7002

redis.port3=7003

redis.port4=7004

redis.port5=7005

redis.port6=7006

redis.clusterpassword=xxxxxxx

インターフェースJedisClientを作成するには、次の手順に従います.
import org.codehaus.jackson.type.TypeReference;

import java.util.List;

/**
 * Created by gzy on 2017/11/17 17:16.
 */

public interface JedisClient {
    String get(String key);

     T get(String key, TypeReference clazz);

     T get(String key, Class clazz);

    String get(String key, int select);

    void setAndExpire(String key, Object o, int expire);

    Long rpush(String key, String string);

    //    Long del(String... keys);
    Long lpush(String key, String string);

    void set(String key, Object o);

    String set(String key, String value);

    String hget(String hkey, String key);

    long hset(String hkey, String key, String value);

    long incr(String key);

    long expire(String key, int second);

    long ttl(String key);

    long del(String key);

    long hdel(String hkey, String key);

    Boolean exists(String key);

    Long decr(String key);

    List brpop(int timeout, String key);

}

JedisClient実装クラスJedisClientCluster:
/**
 * Created by gzy on 2017/11/17 17:17.
 */

import org.codehaus.jackson.type.TypeReference;
import com.thinkgem.jeesite.common.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;

import redis.clients.jedis.JedisCluster;

import java.util.List;

public class JedisClientCluster implements JedisClient {

    @Autowired
    private JedisCluster jedisCluster;

    public  T get(String key, TypeReference clazz) {
        String json = jedisCluster.get(key);
        if (StringUtils.isNotEmpty(json)) {
            return JsonUtil.Json2Object(json, clazz);
        } else {
            return null;
        }
    }

    public  T get(String key, Class clazz) {
        String json = jedisCluster.get(key);
        if (StringUtils.isNotEmpty(json)) {
            return JsonUtil.Json2Object(json, clazz);
        } else {
            return null;
        }
    }

    public void set(String key, Object o) {
        String json = JsonUtil.Object2Json(o);
        jedisCluster.set(key, json);
    }

    public void setAndExpire(String key, Object o, int expire) {
        String json = JsonUtil.Object2Json(o);
        jedisCluster.set(key, json);
        jedisCluster.expire(key, expire);
    }

//    public long del(String key) {
//        return jedisCluster.del(key);
//    }

    public String get(String key) {
        return jedisCluster.get(key);
    }

    public String get(String key, int select) {
        jedisCluster.select(select);
        return jedisCluster.get(key);
    }

    @Override
    public String set(String key, String value) {
        return jedisCluster.set(key, value);
    }

    @Override
    public String hget(String hkey, String key) {
        return jedisCluster.hget(hkey, key);
    }

    @Override
    public long hset(String hkey, String key, String value) {
        return jedisCluster.hset(hkey, key, value);
    }

    @Override
    public long incr(String key) {
        return jedisCluster.incr(key);
    }

    public Long decr(String key) {
        return jedisCluster.decr(key);
    }

    @Override
    public long expire(String key, int second) {
        return jedisCluster.expire(key, second);
    }

    @Override
    public long ttl(String key) {
        return jedisCluster.ttl(key);
    }

    @Override
    public long del(String key) {
        return jedisCluster.del(key);
    }

    @Override
    public long hdel(String hkey, String key) {

        return jedisCluster.hdel(hkey, key);
    }

    public Long rpush(String key, String string) {
        return jedisCluster.rpush(key, string);
    }

    public Long lpush(String key, String string) {
        return jedisCluster.lpush(key, string);
    }

    public Boolean exists(String key) {
        return jedisCluster.exists(key);
    }

    public List brpop(int timeout, String key) {
        return jedisCluster.brpop(timeout, key);
    }

}

テストクラスClusterTestを作成するには、次の手順に従います.
import xx.xx.xxx.xxxx.JedisClient;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

/**
 * Created by gzy on 2017/11/20 15:22.
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring-context-cache.xml")
public class ClusterTest {
   // private static JedisClientCluster redisCluster = SpringContextHolder.getBean("jedisClientCluster");
    @Autowired
    private JedisClient jedisClient;

    @Test
    public void testJCluster() {
	jedisClient.set("test:phone:" + "11111111","hhha");
	String result = jedisClient.get("test:phone:" + "11111111")
 	System.out.println("result==="+result)

}}

注意:Redisクラスタは、複数のkeysを処理するコマンドをサポートしていない.これは、異なるノード間でデータを移動する必要があるため、Redisのような性能に達することができず、高負荷の場合に予想できないエラーを引き起こす可能性がある.