- 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.2 通过vi redis.conf命令打开redis的配置文件,注释掉绑定本地地址和开启密码验证4.0.0 org.example jedis 1.0-SNAPSHOT redis.clients jedis 3.2.0 jar compile
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);
}
}
结果:
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.2 测试连接4.0.0 org.example lettuce 1.0-SNAPSHOT io.lettuce lettuce-core 5.2.2.RELEASE
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"));
}
}
结果
1.jedis在实现的过程中是直接连接到redis的,在多个线程之间共享一个jedis实例,这是线程不安全的,如果想在多线程的情况下使用jedis,就得使用jedis连接池,这就使得每一个线程都会相对应一个jedis连接池,比较耗内存空间
2.lettuce是基于目前很火的Netty NIO开发的,解决了jedis中线程不安全的问题,lettuce支持同步,异步,等,多个线程可以共享一个实例



