redis分布式环境配置

第一步:修改配置文件redis.conf的端口号

第二步:分别启动2个redis

第三步:书写RedisSharedPool类

package com.mmall.common;

import com.mmall.util.PropertiesUtil;
import redis.clients.jedis.*;
import redis.clients.util.Hashing;
import redis.clients.util.Sharded;

import java.util.ArrayList;
import java.util.List;

public class RedisSharedPool {
    //使用静态属性,表示加载这个类的时候就把属性加载了
    //用配置文件实现动态获取
   // private static JedisPool pool;//不是分布式使用jedis连接池
    private static ShardedJedisPool pool;//使用分布式用的连接池
    private static Integer maxTotal= Integer.parseInt(PropertiesUtil.getProperty("redis.max.total","20"));//最大连接数
    private static Integer maxIdle=Integer.parseInt(PropertiesUtil.getProperty("redis.max.idle","20"));//在jedispool种最大的idle状态jedis实例的个数
    private static Integer minIdle=Integer.parseInt(PropertiesUtil.getProperty("redis.min.idle","20"));//在jedispool种最小的idle状态jedis实例的个数
    private static Boolean testOnBorrow=Boolean.parseBoolean(PropertiesUtil.getProperty("redis.test.borrow","true"));//在borrow一个jedis实例的时候,是否要进行验证操作,如果为true,则得到的jedis实例肯定是可以使用的
    private static Boolean testOnReturn=Boolean.parseBoolean(PropertiesUtil.getProperty("redis.test.return","true"));//在return一个jedis实例的时候,是否要进行验证操作,如果为true,则返回的jedis实例肯定是可以使用的

    private static String redis1Ip = PropertiesUtil.getProperty("redis1.ip");
    private static Integer redis1Port=Integer.parseInt(PropertiesUtil.getProperty("redis1.port"));

    private static String redis2Ip = PropertiesUtil.getProperty("redis2.ip");
    private static Integer redis2Port=Integer.parseInt(PropertiesUtil.getProperty("redis2.port"));



    private static void initPool(){
        //对jedisPoolConfig进行设置
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(maxTotal);
        config.setMaxIdle(maxIdle);
        config.setMinIdle(minIdle);

        config.setTestOnBorrow(testOnBorrow);
        config.setTestOnReturn(testOnReturn);

        config.setBlockWhenExhausted(true);//连接耗尽的时候,是否阻塞,false会抛出异常,true会阻塞直到超时,默认为true

        JedisShardInfo info1=new JedisShardInfo(redis1Ip,redis1Port,1000*2);
        JedisShardInfo info2=new JedisShardInfo(redis2Ip,redis2Port,1000*2);

        List<JedisShardInfo> jedisShardInfoList=new ArrayList<>(2);
        jedisShardInfoList.add(info1);
        jedisShardInfoList.add(info2);

        pool=new ShardedJedisPool(config,jedisShardInfoList, Hashing.MURMUR_HASH, Sharded.DEFAULT_KEY_TAG_PATTERN);

    }
    //内部调用
    static{
        initPool();
    }
    //外部调用的方法
    //获得jedis实例
    public static ShardedJedis getJedis(){
        return pool.getResource();
    }
    //将jedis实例放回去
    public static void returnResource(ShardedJedis jedis){
        if(jedis!=null){
            pool.returnResource(jedis);
        }
    }
    public static void returnBrokenResource(ShardedJedis jedis){
        if(jedis!=null){
            pool.returnBrokenResource(jedis);
        }
    }
    //使用主函数进行测试[快捷键:psvm]
    public static void main(String[] args) {
        //1、拿一个jedis
        ShardedJedis jedis = pool.getResource();
        for(int i=0;i<10;i++){
            jedis.set("key"+i,"value"+i);
        }
        returnResource(jedis);
        System.out.println("end");
    }
}

第四步:将RedisPoolUtil改为SharedRedisPoolUtil

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值