栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

通过jedis/lettuce远程连接到redis

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

通过jedis/lettuce远程连接到redis

通过jedis/lettuce远程连接到redis
  • 1.jedis连接到redis
    • 1.1 pom.xml(maven工程)
    • 1.2 通过vi redis.conf命令打开redis的配置文件,注释掉绑定本地地址和开启密码验证
    • 1.3 测试能否远程连接到redis,我的redis是装在虚拟机上的,所以以下ip地址为虚拟机ip地址
    • 1.4 通过连接池获取jedis对象,jedis对象的方法名和redis的一些常用命令很相似,可以见名思义地使用jedis的方法
  • 2.lettuce连接到redis
    • 2.1 pom.xml(maven工程)
    • 2.2 测试连接
  • 3.两种方式的比较

1.jedis连接到redis 1.1 pom.xml(maven工程)


    4.0.0

    org.example
    jedis
    1.0-SNAPSHOT

    
        
        
               redis.clients
               jedis
               3.2.0
               jar
               compile
        
    


1.2 通过vi redis.conf命令打开redis的配置文件,注释掉绑定本地地址和开启密码验证


1.3 测试能否远程连接到redis,我的redis是装在虚拟机上的,所以以下ip地址为虚拟机ip地址
package jedis;

import redis.clients.jedis.Jedis;

public class MyJedis {
    public static void main(String[] args) {
        //1.构造jedis对象,端口没写则默认为6379
        Jedis jedis = new Jedis("192.168.244.129");
        //Jedis jedis = new Jedis("192.168.244.129",6379);
        //密码认证
        jedis.auth("root123");
        //测试是否连接成功
        String str = jedis.ping();
        //返回一个"pong"则表明连接成功
        System.out.println(str);

    }
}

结果:

1.4 通过连接池获取jedis对象,jedis对象的方法名和redis的一些常用命令很相似,可以见名思义地使用jedis的方法
package jedis;

import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

public class JedisUtils {
    private static JedisPool jedisPool = null;

    public static Jedis getJedisObject() {
        if (jedisPool == null) {
            GenericObjectPoolConfig config = new GenericObjectPoolConfig();
            //最大空闲数
            config.setMaxIdle(400);
            //最大连接数
            config.setMaxTotal(2000);
            //连接最大等待时间,-1代表没有限制
            config.setMaxWaitMillis(300000);
            
            jedisPool = new JedisPool(config,"192.168.244.129",6379,30000,"root123");
        }
        try {
            //通过连接池获取jedis对象
            Jedis jedis = jedisPool.getResource();
            jedis.auth("root123");
            return jedis;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

测试

package jedis;

import redis.clients.jedis.Jedis;

public class test {
    public static void main(String[] args) {
        Jedis jedisObject = JedisUtils.getJedisObject();
        try {
            String str = jedisObject.ping();
            System.out.println(str);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (jedisObject != null) {
                jedisObject.close();
            }
        }
    }
}

结果

2.lettuce连接到redis 2.1 pom.xml(maven工程)


    4.0.0

    org.example
    lettuce
    1.0-SNAPSHOT
    
        
               io.lettuce
               lettuce-core
               5.2.2.RELEASE
        
    


2.2 测试连接
package com.yl.config;

import io.lettuce.core.RedisClient;
import io.lettuce.core.api.StatefulRedisConnection;
import io.lettuce.core.api.sync.RedisCommands;

public class LettuceTest {
    public static void main(String[] args) {
        //创建client对象
        RedisClient redisClient = RedisClient.create("redis://root123@192.168.244.129");
        //获取连接对象
        StatefulRedisConnection connect = redisClient.connect();
        //获取同步调用的连接对象
        RedisCommands sync = connect.sync();
        //通过set,get往redis里存数据和取数据
        sync.set("name","yl");
        sync.set("age","23");
        System.out.println(sync.get("name"));
        System.out.println(sync.get("age"));

    }
}

结果

3.两种方式的比较

1.jedis在实现的过程中是直接连接到redis的,在多个线程之间共享一个jedis实例,这是线程不安全的,如果想在多线程的情况下使用jedis,就得使用jedis连接池,这就使得每一个线程都会相对应一个jedis连接池,比较耗内存空间

2.lettuce是基于目前很火的Netty NIO开发的,解决了jedis中线程不安全的问题,lettuce支持同步,异步,等,多个线程可以共享一个实例

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/294588.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号