redis 的基本知识学了后,我们就要用java连接了。首先redis 在远程的服务器上,我们的项目在windows上。
首次连接redis 时报错:
Exception in thread "main" redis.clients.jedis.exceptions.JedisConnectionException:
java.net.SocketException: Software caused connection abort: recv failedat
redis.clients.util.RedisInputStream.ensureFill(RedisInputStream.java:202)
at redis.clients.util.RedisInputStream.readByte(RedisInputStream.java:40)
at redis.clients.jedis.Protocol.process(Protocol.java:151)
at redis.clients.jedis.Protocol.read(Protocol.java:215)
at redis.clients.jedis.Connection.readProtocolWithCheckingBroken(Connection.java:340)
at redis.clients.jedis.Connection.getStatusCodeReply(Connection.java:239)
at redis.clients.jedis.Jedis.set(Jedis.java:121)
at com.hy.redis_maven.App.main(App.java:17)
Caused by: java.net.SocketException: Software caused connection abort: recv failedat
java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at redis.clients.util.RedisInputStream.ensureFill(RedisInputStream.java:196)... 7 more
出现这个问题的原因是redis.conf文件中bind 127.0.0.1,这导致redis只映射本机
解决办法,打开redis6379.conf 将bind 127.0.0.1注释就行.
修改以后要重启服务。
注意,首先要在服务器上开启端口6379
public class test {
public static void main(String[] args) {
Jedis jedis = new Jedis("xx.xxx.xxx.xxx", 6379); //此处为你的ip地址
System.out.println(jedis.ping());
jedis.set("username", "liyicheng");
System.out.println(jedis.get("username"));
}
}
JedisPool 的使用
public class JedisPoolUtil {
private static volatile JedisPool jedisPool = null;
private JedisPoolUtil(){}
public static JedisPool getJedisPoolInstance(){
if(jedisPool == null){
synchronized (JedisPool.class) {
if(jedisPool == null){
JedisPoolConfig jsConfig = new JedisPoolConfig();
jsConfig.setMaxWait(100*1000);
jsConfig.setMaxActive(1000);
jsConfig.setMaxIdle(32);
jsConfig.setTestOnReturn(true);
jedisPool = new JedisPool(jsConfig,"你的ip地址", 6379);
}
}
}
return jedisPool;
}
//释放对象
public static void release(JedisPool jedisPool,Jedis jedis){
if(jedis != null){
jedisPool.returnResourceObject(jedis);
}
}
}
测试类测试一下
public class testPool {
public static void main(String[] args) {
Jedis jedis = null;
JedisPool jedisPool = JedisPoolUtil.getJedisPoolInstance();
try {
jedis = jedisPool.getResource();
jedis.set("pool", "newpool");
} catch (Exception e) {
e.printStackTrace();
}finally{
JedisPoolUtil.release(jedisPool, jedis);
}
}
}
在jedis 命令行里可以查看到结果。