1.普通连接池
对稳定性、数据量要求不大小型应用可以使用它,连接池只能配置一个redis服务
/**
* 测试普通连接池使用方式
*/
@Test
public void test2() {
//1.实例化Jedis连池配置对象
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(10);
config.setMaxWaitMillis(30);
//2.实例化连接池
JedisPool pool = new JedisPool(config,"192.168.245.112", 6381);
//3.拿到连接
Jedis redis = pool.getResource();
//4.使用连接
redis.set("user_name", "Messi");
}
2.分片连接池
先说说分片的概念:在分布式系统中,根据输入定位数据存放服务器的计算过程,其中计算用到算法非常重要,会极大的影响存储、后期维护、数据迁移等
分片连接池和普通连接池适用场景刚好相反,高可用、高并发的大型应用需要使用分片连接池,可以配置整个redis集群的服务器,连接池根据哈希一致性算法,将数据存放到不同的Redis内存数据库中
/**
* 测试分片连接池的使用方式
*/
@Test
public void test1() {
//1.实例化Jedis分片对象,并放入到一个List当中
List<JedisShardInfo> list = new ArrayList<>();
list.add(new JedisShardInfo("192.168.245.111", 6381));
list.add(new JedisShardInfo("192.168.245.111", 6382));
list.add(new JedisShardInfo("192.168.245.111", 6383));
//2.实例化Jedis连池配置对象
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(10);
config.setMaxWaitMillis(30);
//3.实例化Jedis连接池
ShardedJedisPool pool = new ShardedJedisPool(config, list);
//4.拿到一个连接
ShardedJedis redis = pool.getResource();
//5.添加数据
for(int i=0;i<1000;i++) {
redis.set("item_"+i, Double.toString(Math.random()));
}
//6.获取数据
for(int i=0;i<10;i++) {//获取数据意思一下就行,不需要全部取出来看一遍
System.out.println(redis.get("item_"+i));
}
}
如果对Redis还有更高要求的,可以看看哈希一致性、哈希取余、自定义轮询分片的比较
以上两种方式都不是现在企业所采用的,现在已经都使用Redis集群了,集群的内部数据存储方式为哈希槽,其使用方式可以参考Redis集群搭建与使用方法