Java连接Redis

1.jedis简介

  • Redis不仅是使用命令来操作,现在基本上主流的语言都有客户端支持,比如java、C、C#、C++、
    php、Node.js、Go等。
  • 在官方网站里列一些Java的客户端,有Jedis、Redisson、Jredis、JDBC-Redis、等其中官方推荐使用
    Jedis和Redisson
  • Jedis同样也是托管在github上,地址:https://github.com/xetorthio/jedis

2.java连接Redis

  • 添加依赖

    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>3.2.0</version>
    </dependency>
    

2.1 jedis连接单机版

  • 直接连接

    @Test
    public void testJedis() {
        Jedis jedis = new Jedis("192.168.0.111", 6379);
        jedis.set("name","zhangsan");
        String result = jedis.get("name");
        System.out.println(result);
        jedis.close();
    }
    
  • 连接池连接

    @Test
    public void testJedisPool() {
        JedisPool jedisPool = new JedisPool("192.168.0.111", 6379);
        Jedis jedis = jedisPool.getResource();
        jedis.set("name","zhangsan");
        String result = jedis.get("name");
        System.out.println(result);
        jedis.close();
        jedisPool.close();
    }
    

2.2 jedis连接哨兵集群(主从复制+哨兵)

  • 开启主从复制集群+哨兵

    public void testSentinel() {
        Set<String> sentinelSet = new HashSet<>();
        //以下端口是哨兵的端口
        sentinelSet.add("192.168.0.111:26379");
        sentinelSet.add("192.168.0.111:26380");
        sentinelSet.add("192.168.0.111:26381");
        //mymaster是master默认的名称
        JedisSentinelPool pool = new JedisSentinelPool("mymaster", sentinelSet);
        Jedis jedis = pool.getResource();
        jedis.set("name", "jack");
        String result = jedis.get("name");
        System.out.println(result);
        jedis.close();
        pool.close();
    }
    

2.3 jedis连接集群

  • 搭建集群省略。。

    public void clusterTest(){
        Set<HostAndPort> nodes=new HashSet<>();
        nodes.add(new HostAndPort("192.168.0.111",6381));
        nodes.add(new HostAndPort("192.168.0.111",6382));
        nodes.add(new HostAndPort("192.168.0.111",6383));
        nodes.add(new HostAndPort("192.168.0.111",6384));
        nodes.add(new HostAndPort("192.168.0.111",6385));
        nodes.add(new HostAndPort("192.168.0.111",6386));
        JedisCluster jedisCluster = new JedisCluster(nodes);
        jedisCluster.set("name","smith");
        String name = jedisCluster.get("name");
        System.out.println(name);
        jedisCluster.close();//关闭资源
    }
    

3.jedis连接池

  • jedis.properties配置文件

    #ip
    host=192.168.0.102
    #端口
    port=6379
    #池中可借的最大数
    maxTotal=50
    #允许池中空闲的最大连接数
    maxIdle=30
    #允许池中空闲的最小连接数
    minIdle=10
    #获取连接最大等待时间(毫秒)
    maxWaitMillis=12000
    #当 maxActive到达最大数,获取连接时的操作  0.抛异常 1.阻塞等待 2.创建新的  (maxActive将失效)
    whenExhaustedAction=1
    #在创建连接时,是否验证有效性
    testOnCreate=true
    #在获取连接时,是否验证有效性
    testOnBorrow=true
    #在归还连接时,是否验证有效性
    testOnReturn=true
    #当连接空闲时,是否验证有效性
    testWhileIdle=false
    #设定间隔没过多少毫秒进行一次后台连接清理的行动
    timeBetweenEvictionRunsMillis=3600000
    #每次检查的连接数
    numTestsPerEvictionRun=5
    #设定在进行后台对象清理时,视休眠时间超过了多少毫秒的对象为过期。过期的对象将被回收。如果这个值不是正数,那么对休眠时间没有特别的约束。
    minEvictableIdleTimeMillis=300000
    softMinEvictableIdleTimeMillis=300000
    
  • jedis连接池工具类

    /**
     * JedisPoolUtils工具类的使用
     */
    public class JedisPoolUtils {
        /**
        * JedisPool连接池对象
        */
        private static JedisPool jedisPool;
    
        /**
         * 初始化连接池
         */
        static{
            InputStream is = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties");
            Properties prop=new Properties();
            try {
                prop.load(is);
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            String host=prop.getProperty("host");
            int port=Integer.parseInt(prop.getProperty("port"));
            int maxTotal=Integer.parseInt(prop.getProperty("maxTotal"));
            int maxIdle=Integer.parseInt(prop.getProperty("maxIdle"));
            //连接池配置
            JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
            jedisPoolConfig.setMaxTotal(maxTotal);
            jedisPoolConfig.setMaxIdle(maxIdle);
            //初始化连接池
            jedisPool = new JedisPool(jedisPoolConfig,host,port);
        }
    
        /**
         * 获取 Jedis连接对象
         * @return
         */
        public static Jedis getJedis(){
            return jedisPool.getResource();
        }
    
        /**
         * 关闭jedis
         */
        public static void closeJedis(Jedis jedis){
            if(null!=jedis){
                jedis.close();
            }
        }
    }
    
  • 测试

    public void jedisTest(){
        Jedis jedis = JedisPoolUtils.getJedis();
        jedis.set("id","100");
        String id = jedis.get("id");
        System.out.println(id);
        JedisPoolUtils.closeJedis(jedis);
    }