windows Redis绑定ip无效,Redis设置密码无效,Windows Redis 配置不生效,
Windows Redisrequirepass不生效
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
©Copyright蕃薯耀 7月11日
/fanshuyao/
一、Redis下载地址:
/MicrosoftArchive/redis/releases
1、Redis-x64-3.2.100.msi 为安装版
2、Redis-x64-3.2.100.zip 为压缩包
二、由于我使用的是安装版,本次问题也是安装版的问题
1、安装后的目录
2、安装版的Redis安装后服务会自动启动。
三、问题所在:
由于安装版的Redis服务自启动,是直接通过redis-server.exe启动的,但是,启动时并没有加载Redis的配置文件(redis.windows.conf),导致redis 中bind配置和密码设置不生效。这导致我折腾了很久,后来才意识到这个问题。
四、Redis自启动导致的常见的问题有:
1、在CMD命令加载配置文件(redis.windows.conf)进行启动是不成功的。提示如下:
Java代码 D:\soft\Redis>redis-server.exeredis.windows.conf[13760]11Jul16:39:51.067#CreatingServerTCPlisteningsocket127.0.0.1:6379:bind:Noerror
因为Redis服务已经自启动,这里是不会再新启动的,故加载配置文件是失败的。也没有出现Redis启动的小盒子(下面有图片,慢慢往下看)
2、密码失效
虽然在配置文件(redis.windows.conf)设置了密码,密码为123456:
Java代码 ##################################SECURITY###################################……省略……#requirepassfoobaredrequirepass123456
但启动客户端进行Redis命令操作时,是不需要密码的,也没有提示无权限操作,这是一个严重的安全问题。
Java代码 D:\soft\Redis>redis-cli.exe127.0.0.1:6379>getname"haha"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地址绑定默认说明:
Java代码 ##################################NETWORK######################################Bydefault,ifno"bind"configurationdirectiveisspecified,Redislistens#forconnectionsfromallthenetworkinterfacesavailableontheserver.#Itispossibletolistentojustoneormultipleselectedinterfacesusing#the"bind"configurationdirective,followedbyoneormoreIPaddresses.##Examples:##bind192.168.1.10010.0.0.1#bind127.0.0.1::1##~~~WARNING~~~IfthecomputerrunningRedisisdirectlyexposedtothe#internet,bindingtoalltheinterfacesisdangerousandwillexposethe#instancetoeverybodyontheinternet.Sobydefaultweuncommentthe#followingbinddirective,thatwillforceRedistolistenonlyinto#theIPv4lookbackinterfaceaddress(thismeansRediswillbeableto#acceptconnectionsonlyfromclientsrunningintothesamecomputerit#isrunning).##IFYOUARESUREYOUWANTYOURINSTANCETOLISTENTOALLTHEINTERFACES#JUSTCOMMENTTHEFOLLOWINGLINE.#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~bind127.0.0.1
主要是意思是,如果设置了bind,只能通过绑定的地址访问Redis。
如果不设置bind,则所有地址都可以访问,如果在项目部署外网,所有人都可以访问到,所以这里也是个注意的地址,还是设置bind比较安全。
绑定多个ip地址:
Java代码 bind127.0.0.1192.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是访问不了的,出现以下的错误:
Java代码 redis.clients.jedis.exceptions.JedisConnectionException:Couldnotgetaresourcefromthepool
所以说,Redis由Windows自启动的,配置文件的设置都是无效的
五、解决方案:
1、禁用Redis的自启动,设置为手动
2、不要使用Redis安装版,使用压缩版
3、通过命令行CMD加载配置文件(redis.windows.conf)启动
Java代码 D:\soft\Redis>redis-server.exeredis.windows.conf
通过Cmd启动的界面都是不一样的,如下:
看到了正常启动的盒子。
4、再新打开一个cmd(不要关闭之前打的Cmd窗口),启动Redis客户端:
Java代码 D:\soft\Redis>redis-cli.exe
5、获取Redis中某个key的值,提示无权限。
Java代码 127.0.0.1:6379>getname(error)NOAUTHAuthenticationrequired.127.0.0.1:6379>
这样才是对的。
6、通过密码进入访问,使用 auth + 密码,如下:
Java代码 127.0.0.1:6379>getname(error)NOAUTHAuthenticationrequired.127.0.0.1:6379>auth123456OK127.0.0.1:6379>getname"haha"127.0.0.1:6379>
如果Redis设置了密码,Spring整合Redis也是需要设置密码的,具体的一些配置:
7、Spring整合Redis的一些配置(JedisPool单机版):
Spring.xml文件配置的JedisPool池:
Java代码 <beanid="jedisPool"class="redis.clients.jedis.JedisPool"><constructor-argname="poolConfig"ref="jedisPoolConfig"></constructor-arg><constructor-argname="host"value="${redis.host}"/><constructor-argname="port"value="${redis.port}"type="int"/><constructor-argname="timeout"value="${redis.timeout}"type="int"/><constructor-argname="password"value="#{'${redis.password}'!=''?'${redis.password}':null}"/><!--<constructor-argname="database"value="${redis.db.index}"type="int"/>--></bean>
redis.properties配置文件
Java代码 #*****************jedis连接参数设置*********************##redis服务器ip#redis.host=192.168.100.66#redis服务器端口号#redis.port=6379#超时时间:单位ms#redis.timeout=3000#授权密码,没有密码则不设置,但属性要保留#redis.password=123456
六、如果不是安装版的Redis,又想让Redis自启动的时候,可以向Windows添加自启动服务:
1、进入到Redis的安装目录
Java代码 D:\soft\Redis>
2、执行命令:
Java代码 redis-server--service-installredis.windows.conf--loglevelnotice--service-nameRedis
3、完整示例:
Java代码 D:\soft\Redis>redis-server--service-installredis.windows.conf--loglevelnotice--service-nameRedis
--service-install redis.windows.conf 指定redis配置文件
--loglevel notice 指定日志级别
--service-name Redis 指定服务名称
运行结果如下(Redis successfully installed as a service.):
Java代码 D:\soft\Redis>redis-server--service-installredis.windows.conf--loglevelnotice--service-nameRedis[7176]12Jul09:34:50.730#Grantingread/writeaccessto'NTAUTHORITY\NetworkService'on:"D:\soft\Redis""D:\soft\Redis\"[7176]12Jul09:34:50.730#Redissuccessfullyinstalledasaservice.
4、安装服务后,默认不是马上启动的,但启动类型是自启动,如果想马上启动,请执行命令:
Java代码 redis-server--service-start Java代码 服务成功启动显示如下:[9876]12Jul09:57:41.251#Redisservicesuccessfullystarted.
或者重启电脑。
停止服务:
Java代码 redis-server--service-stop
5、删除Redis服务:
Java代码 redis-server--service-uninstall
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
©Copyright蕃薯耀 7月11日
/fanshuyao/