Jedis 有4 种工作模式:单节点、分片(Sharded)、哨兵(Sentinel)、集群(Cluster)。单节点比较简单,本章我们先从分片开始讲解,后续将继续对哨兵(Sentinel)、集群(Cluster)进行源码分析。
哨兵(Sentinel)、集群(Cluster)请参考:
1、环境:
1、操作系统:Centos7.7
2、服务器配置如下:(本文采用了在单台机子上部署多个实例来模拟多机部署)
主机 | ip | 角色和端口 |
---|---|---|
node1 | 132.232.128.198 | 9526 |
node2 | 132.232.128.198 | 9527 |
2、启动redis服务
[root@m 9526]# ps -ef|grep redis
root 937 1 0 Apr14 ? 00:06:04 /usr/local/bin/redis-server 0.0.0.0:6379
root 9426 1 0 14:20 ? 00:00:03 ./redis-5.0.8/src/redis-server *:9526
root 9574 1 0 14:20 ? 00:00:03 ./redis-5.0.8/src/redis-server *:9527
root 18522 813 0 15:20 pts/2 00:00:00 grep --color=auto redis
3、测试代码
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.*;
import java.util.Arrays;
import java.util.List;
/**
* @Author: henry
* @Date: 2020/4/18 15:43
* @Description: 测试ShardedJedis
*/
public class ShardedJedisTest {
private ShardedJedisPool shardedJedisPool;
private ShardedJedis shardedJedis;
@Before
public void initJedis(){
JedisPoolConfig poolConfig = new JedisPoolConfig();
// Redis服务器
JedisShardInfo shardInfo1 = new JedisShardInfo("132.232.115.96", 9527);
JedisShardInfo shardInfo2 = new JedisShardInfo("132.232.115.96", 9526);
// 连接池
List<JedisShardInfo> infoList = Arrays.asList(shardInfo1, shardInfo2);
shardedJedisPool = new ShardedJedisPool(poolConfig, infoList);
}
//测试向redis中set值
@Test
public void testSet(){
try {
shardedJedis = shardedJedisPool.getResource();
for (int i = 0; i < 100; i++) {
shardedJedis.set("k" + i, "" + i);
//根据key获取主机的信息
Client client = shardedJedis.getShard("k"+i).getClient();
System.out.println("set值:"+i+ ",到:" + client.getHost() + ":" + client.getPort());
}
} catch (Exception e) {
e.printStackTrace();
}
}
//测试从redis中get值
@Test
public void testGet(){
try{
shardedJedis = shardedJedisPool.getResource();
for(int i=0; i<100; i++){
//根据key获取