windows Redis绑定ip无效,Redis设置密码无效,Windows Redis 配置不生效,

Windows Redis requirepass不生效

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

©Copyright 蕃薯耀 2017年7月11日

一、Redis下载地址:

https://github.com/MicrosoftArchive/redis/releases

1、Redis-x64-3.2.100.msi 为安装版

2、Redis-x64-3.2.100.zip 为压缩包

二、由于我使用的是安装版,本次问题也是安装版的问题

1、安装后的目录




Redis可以输入IP链接远程吗 redis 绑定ip_linux


2、安装版的Redis安装后服务会自动启动。

 


Redis可以输入IP链接远程吗 redis 绑定ip_redis_02


三、问题所在:

由于安装版的Redis服务自启动,是直接通过redis-server.exe启动的,但是,启动时并没有加载Redis的配置文件(redis.windows.conf),导致redis 中bind配置和密码设置不生效。这导致我折腾了很久,后来才意识到这个问题。

四、Redis自启动导致的常见的问题有:

1、在CMD命令加载配置文件(redis.windows.conf)进行启动是不成功的。提示如下:


Redis可以输入IP链接远程吗 redis 绑定ip_jedis_03


  1. D:\soft\Redis>redis-server.exe redis.windows.conf  
  2. [13760] 11 Jul 16:39:51.067 # Creating Server TCP listening socket 127.0.0.1:6379: bind: No error  


因为Redis服务已经自启动,这里是不会再新启动的,故加载配置文件是失败的。也没有出现Redis启动的小盒子(下面有图片,慢慢往下看)

2、密码失效

虽然在配置文件(redis.windows.conf)设置了密码,密码为123456:


Redis可以输入IP链接远程吗 redis 绑定ip_jedis_04


  1. ################################## SECURITY ###################################  
  2. ……省略……  
  3. # requirepass foobared  
  4. requirepass 123456  


但启动客户端进行Redis命令操作时,是不需要密码的,也没有提示无权限操作,这是一个严重的安全问题。


Redis可以输入IP链接远程吗 redis 绑定ip_jedis_05


  1. D:\soft\Redis>redis-cli.exe  
  2. 127.0.0.1:6379> get name  
  3. "haha"  
  4. 127.0.0.1:6379>  


3、Redis访问IP绑定(bind)无效

Redis默认绑定的ip为127.0.0.1,但如果想内网的机器都能访问,则需要设置内网的ip地址,如192.168.100.66,然后redis.host则可以设置为192.168.100.66访问Redis。

Redis ip地址绑定默认说明:


Redis可以输入IP链接远程吗 redis 绑定ip_java_06


    1. ################################## NETWORK #####################################  
    2.   
    3. # By default, if no "bind" configuration directive is specified, Redis listens  
    4. # for connections from all the network interfaces available on the server.  
    5. # It is possible to listen to just one or multiple selected interfaces using  
    6. # the "bind" configuration directive, followed by one or more IP addresses.  
    7. #  
    8. # Examples:  
    9. #  
    10. # bind 192.168.1.100 10.0.0.1  
    11. # bind 127.0.0.1 ::1  
    12. #  
    13. # ~~~ WARNING ~~~ If the computer running Redis is directly exposed to the  
    14. # internet, binding to all the interfaces is dangerous and will expose the  
    15. # instance to everybody on the internet. So by default we uncomment the  
    16. # following bind directive, that will force Redis to listen only into  
    17. # the IPv4 lookback interface address (this means Redis will be able to  
    18. # accept connections only from clients running into the same computer it  
    19. # is running).  
    20. #  
    21. # IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES  
    22. # JUST COMMENT THE FOLLOWING LINE.  
    23. # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
    24. bind 127.0.0.1


     主要是意思是,如果设置了bind,只能通过绑定的地址访问Redis。

    如果不设置bind,则所有地址都可以访问,如果在项目部署外网,所有人都可以访问到,所以这里也是个注意的地址,还是设置bind比较安全。

    绑定多个ip地址:


    Redis可以输入IP链接远程吗 redis 绑定ip_redis_07


    1. bind 127.0.0.1 192.168.100.66  


     127.0.0.1和192.168.100.66之间通过空格分隔,不是逗号。

    但如果Redis是自启动的,没有加载配置文件(redis.windows.conf)启动,这里的设置也是无效的。

    如果不绑定ip地址(192.168.100.66),直接设置redis.host=192.168.100.66是访问不了的,出现以下的错误:


    Redis可以输入IP链接远程吗 redis 绑定ip_java_08


    1. redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool  


    所以说,Redis由Windows自启动的,配置文件的设置都是无效的

    五、解决方案:

    1、禁用Redis的自启动,设置为手动

    2、不要使用Redis安装版,使用压缩版

    3、通过命令行CMD加载配置文件(redis.windows.conf)启动


    Redis可以输入IP链接远程吗 redis 绑定ip_java_09


    1. D:\soft\Redis>redis-server.exe redis.windows.conf  


    通过Cmd启动的界面都是不一样的,如下:


    Redis可以输入IP链接远程吗 redis 绑定ip_linux_10


    看到了正常启动的盒子。

    4、再新打开一个cmd(不要关闭之前打的Cmd窗口),启动Redis客户端:


    Redis可以输入IP链接远程吗 redis 绑定ip_redis_11


    1. D:\soft\Redis>redis-cli.exe  


    5、获取Redis中某个key的值,提示无权限。


    Redis可以输入IP链接远程吗 redis 绑定ip_linux_12


    1. 127.0.0.1:6379> get name  
    2. (error) NOAUTH Authentication required.  
    3. 127.0.0.1:6379>


     这样才是对的。

    6、通过密码进入访问,使用 auth + 密码,如下:


    Redis可以输入IP链接远程吗 redis 绑定ip_java_13


      1. 127.0.0.1:6379> get name  
      2. (error) NOAUTH Authentication required.  
      3. 127.0.0.1:6379> auth 123456  
      4. OK  
      5. 127.0.0.1:6379> get name  
      6. "haha"  
      7. 127.0.0.1:6379>


      如果Redis设置了密码,Spring整合Redis也是需要设置密码的,具体的一些配置:

      7、Spring整合Redis的一些配置(JedisPool单机版):

      Spring.xml文件配置的JedisPool池:


      Redis可以输入IP链接远程吗 redis 绑定ip_linux_14


      1. <bean id="jedisPool" class="redis.clients.jedis.JedisPool">  
      2. "poolConfig" ref="jedisPoolConfig"></constructor-arg>  
      3. "host" value="${redis.host}" />  
      4. "port" value="${redis.port}" type="int" />  
      5. "timeout" value="${redis.timeout}" type="int" />  
      6. "password" value="#{'${redis.password}'!=''?'${redis.password}':null}" />  
      7. "database" value="${redis.db.index}" type="int" /> -->  
      8.     </bean>


      redis.properties配置文件


      Redis可以输入IP链接远程吗 redis 绑定ip_Redis可以输入IP链接远程吗_15

      1. #*****************jedis连接参数设置*********************#  
      2. #redis服务器ip#    
      3. redis.host=192.168.100.66  
      4. #redis服务器端口号#  
      5. redis.port=6379  
      6. #超时时间:单位ms#    
      7. redis.timeout=3000  
      8. #授权密码,没有密码则不设置,但属性要保留#  
      9. redis.password=123456

      六、如果不是安装版的Redis,又想让Redis自启动的时候,可以向Windows添加自启动服务:

      1、进入到Redis的安装目录


      Redis可以输入IP链接远程吗 redis 绑定ip_Redis可以输入IP链接远程吗_16


      1. D:\soft\Redis>  


       2、执行命令:


      Redis可以输入IP链接远程吗 redis 绑定ip_redis_17


        1. redis-server --service-install redis.windows.conf --loglevel notice --service-name Redis


        3、完整示例:


        Redis可以输入IP链接远程吗 redis 绑定ip_Redis可以输入IP链接远程吗_18

        1. D:\soft\Redis>redis-server --service-install redis.windows.conf --loglevel notice --service-name Redis  
          
         --service-install redis.windows.conf  指定redis配置文件
        --loglevel notice 指定日志级别
        --service-name Redis 指定服务名称
        运行结果如下( Redis successfully installed as a service.):

        Redis可以输入IP链接远程吗 redis 绑定ip_redis_19


          1. D:\soft\Redis>redis-server --service-install redis.windows.conf --loglevel notice --service-name Redis  
          2. [7176] 12 Jul 09:34:50.730 # Granting read/write access to 'NT AUTHORITY\NetworkService' on: "D:\soft\Redis" "D:\soft\Redis\"  
          3. [7176] 12 Jul 09:34:50.730 # Redis successfully installed as a service.


          4、安装服务后,默认不是马上启动的,但启动类型是自启动,如果想马上启动,请执行命令:


          Redis可以输入IP链接远程吗 redis 绑定ip_Redis可以输入IP链接远程吗_20

          1. redis-server --service-start


          Redis可以输入IP链接远程吗 redis 绑定ip_jedis_21

          1. 服务成功启动显示如下:  
          2. [9876] 12 Jul 09:57:41.251 # Redis service successfully started.

          或者重启电脑。

          停止服务:


          Redis可以输入IP链接远程吗 redis 绑定ip_linux_22

          1. redis-server --service-stop

          5、删除Redis服务:


          Redis可以输入IP链接远程吗 redis 绑定ip_java_23

          1. redis-server --service-uninstall