redis默认是不支持远程连接,需要手动开启,在redis.conf文件中,找到下方法代码:
#bind 127.0.0.1
这里只允许127.0.0.1登录,注释掉
开启密码校验,去掉requirepass的注析
requirepass password
//设置密码为password(自定义的,随便设)
改完之后,保存退出,启动redis
redis-server redis.conf
首先创建一个maven项目
Jedis的GitHub地址:https://github.com/xetorthio/jedis
项目创建成功后,添加Jedis依赖
redis.clients
jedis
3.2.0
jar
compile
创建测试方法
public class MyJedis {
public static void main(String[] args) {
//1.构造一个Jedis对象,因为这里使用的默认端口6379,所以不用配置端口,要填的是远程服务器的端口号
Jedis jedis = new Jedis("127.0.0.1");
//密码
jedis.auth("password");
//测试是否连接成功
String ping = jedis.ping();
//返回pong表示成功
System.out.println(ping);
}
}
对于Jedis而言,一旦连接上redis服务端,剩下的操作就很简单了
在Jedis中,由于方法的API和Redis的命令高度一致,所以,Jedis中的方法见名知意,直接使用即可
在实际应用中,Jedis实例我们一般都是通过连接池来获取,由于Jedis对象不是线程安全的,所以,当我们使用Jdeis对象时,从连接池获取Jedis,使用完成后,再还给连接池。
public class JedisPoolTest {
public static void main(String[] args) {
Jedis jedis = null;
//1.构造一个jedis连接池
JedisPool jedisPool = new JedisPool("127.0.0.1", 6379);
//2.从连接池中获取一个Jedis连接
jedis = jedisPool.getResource();
jedis.auth("password");
try {
//3.Jedis操作
String ping = jedis.ping();
System.out.println(ping);
} catch (Exception e) {
e.printStackTrace();
} finally {
//4.归还连接
if (jedis != null)
jedis.close();
}
}
}
通过finally确保jedis一定被关闭
利用JDK1.7中的try-with-resource特性,可以对上面的代码进行改造:
public class JedisPoolTest {
public static void main(String[] args) {
//1.构造一个jedis连接池
JedisPool jedisPool = new JedisPool("127.0.0.1", 6379);
//2.从连接池中获取一个Jedis连接
//版本低,可以在Project Structure的Modules的Language level哪里改为8
try(Jedis jedis = jedisPool.getResource()){
//3.Jedis操作
jedis.auth("password");
String ping = jedis.ping();
System.out.println(ping+":");
}
}
}
增加约束,封装
public interface CallWithJedis {
void call(Jedis jedis);
}
public class Redis {
private JedisPool pool;
public Redis(){
GenericObjectPoolConfig config=new GenericObjectPoolConfig();
//连接池最大空闲数
config.setMaxIdle(300);
//最大连接数
config.setMaxTotal(1000);
//连接最大等待时间,如果是-1表示没有限制
config.setMaxWaitMillis(30000);
//空闲时检查有效性
config.setTestOnBorrow(true);
/**
* 1.redis地址
* 2.redis
* 3.连接超时时间
* 4.密码
*/
pool=new JedisPool(config,"127.0.0.1",6379,30000,"password");
}
public void exectu(CallWithJedis callWithJedis){
try(Jedis jedis=pool.getResource()){
callWithJedis.call(jedis);
}
}
}
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
public class JedisPoolTest {
public static void main(String[] args) {
Redis redis = new Redis();
redis.exectu(jedis -> {
System.out.println(jedis.ping());
});
}
}
在这里插入代码片
github:github.com/lettuce-io/lettuce-core
lettuce和Jedis的一个比较
使用Lettuce,首先创建一个普通的maven项目,添加Lettuce依赖
io.lettuce
lettuce-core
5.2.2.RELEASE
实例:
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) {
RedisClient redisClient = RedisClient.create("redis://[email protected]");
StatefulRedisConnection<String, String> connect = redisClient.connect();
RedisCommands<String, String> sync = connect.sync();
sync.set("name","java");
String name=sync.get("name");
System.out.println(name);
}
}
这里的密码传递方式,密码直接写下连接地址里面