JAva操作redisクラスタ構成[パスワード設定可能]とツールクラス
9698 ワード
ガイド:
バージョン:jedis
2.9.0[このバージョンでは
パスワード設定を追加]+commons-pools 2.4.2
構成:
cache.propertiesを作成するには:
インターフェースJedisClientを作成するには、次の手順に従います.
JedisClient実装クラスJedisClientCluster:
テストクラスClusterTestを作成するには、次の手順に従います.
注意:Redisクラスタは、複数のkeysを処理するコマンドをサポートしていない.これは、異なるノード間でデータを移動する必要があるため、Redisのような性能に達することができず、高負荷の場合に予想できないエラーを引き起こす可能性がある.
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のような性能に達することができず、高負荷の場合に予想できないエラーを引き起こす可能性がある.