一个Redis配置文件redis.conf上的小问题:JedisDataException

问题来源

昨天因为电脑上的VMware不小心升级版本后,虚拟机莫名其妙运行不起来了,折腾了一晚上没搞定,索性重装了VMware和ubuntu虚拟机,自然的,原来安装在虚拟机上的一切服务都没有了。
在安装完Redis后,发现之前本地windows主机连接虚拟机Redis的Jedis测试代码连不上了,于是乎开始解决问题,其实第一次安装的时候就遇到过,不过太久远忘记了,这次正好记录下来,省的下次还要百度解决。

先是Connection refused: connect

redis.clients.jedis.exceptions.JedisConnectionException: java.net.ConnectException: Connection refused: connect
    at redis.clients.jedis.Connection.connect(Connection.java:134)
    at redis.clients.jedis.BinaryClient.connect(BinaryClient.java:69)
    at redis.clients.jedis.Connection.sendCommand(Connection.java:79)
    at redis.clients.jedis.Connection.sendCommand(Connection.java:75)
    at redis.clients.jedis.BinaryClient.auth(BinaryClient.java:499)
    at redis.clients.jedis.Jedis.auth(Jedis.java:1963)
    at com.lhx.redis.JedisTest.setup(JedisTest.java:23)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
    at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)
    at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:83)
    at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:579)
    at redis.clients.jedis.Connection.connect(Connection.java:129)
    ... 34 more

这个问题算是迅速反应过来了,第一反应就是查看redis默认监听的6379端口下的进程。
netstat -anp|grep 6379

lhx@ubuntu:/usr/local/redis/bin$ netstat -anp|grep 6379
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      792/redis-server *:
tcp        0      0 127.0.0.1:52752         127.0.0.1:6379          TIME_WAIT   -               
tcp6       0      0 :::6379                 :::*                    LISTEN      792/redis-server *:

可以看到只有127.0.0.1,说明配置文件redis.conf默认绑定了本地ip,该配置会导致,其他ip登录被拒绝,比如我的ubuntu虚拟机的ip地址192.168.241.128。

所以我们把绑定ip的语句注释掉,打开redis文件夹下的redis.conf,注释掉下图中红框代码即可。
这里写图片描述

修改完redis.conf,重启redis服务,再次运行Jedis连接的测试代码,遇到了第二个问题。

JedisDataException

Junit的报错信息发生了变化,如下图所示:
这里写图片描述

连接失败的错误是解决了,这个问题又是指什么呢?

看报错信息,我们不难发现,这个错误大概是说Redis目前在保护模式下运行,不允许非本地客户端链接,我们可以通过给Redis设置访问密码来让非本地客户端去访问它,然后客户端链接的时候,设置Jedis密码Auth就可以解决了。

设置服务端访问密码

127.0.0.1:6379> config set requirepass lhxaiee123
OK
127.0.0.1:6379> auth lhxaiee123
OK
127.0.0.1:6379> 

Jedis通过密码访问

@Before
public void setup() {
     //连接redis服务器,192.168.0.100:6379
     jedis = new Jedis("192.168.241.128", 6379);
     //权限认证
     jedis.auth("lhxaiee123");  
 }

记得以后每次通过SecureCRT连接Redis时要先输入访问密码咯。

127.0.0.1:6379> auth lhxaiee123

至此,windows本机代码对ubuntu虚拟机Redis的访问恢复如初。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值