【运维】Redis远程连接

96
吾非言
2017.11.26 18:26* 字数 1185

作者:邹峰立,微博:zrunker,邮箱:zrunker@yahoo.com,微信公众号:书客创作,个人平台:www.ibooker.cc

本文选自书客创作平台第142篇文章。阅读原文

书客创作

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。

CMD命令连接Redis

在了解Redis远程连接之前,首先要知道怎么通过CMD命令去连接Redis?

Redis目录结构图

当打开Redis的安装目录之后,可以找到redis-cli.exe的应用程序,它是Redis的客户端,而CMD就是通过该应用程序进行远程连接。所以只需要切换到Redis的安装目录,操作redis-cli.exe执行相应的命令。

redis>redis-cli.exe -h ip地址 -p 端口号 -a 密码
  • -h <ip地址>,默认是127.0.0.1
  • -p <端口>,默认是6379
  • -a <密码>,如果redis加锁,需要传递密码

本地远程Redis

当在服务端安装好Redis并开启Redis服务之后,本地进行远程连接,却发现本地无法远程连接到服务端的Redis。运行结果图如下:

Redis-cli远程连接图

按照常理讲,采用公网IP和端口号(Redis的默认端口号为6379)应该可以访问到,但是Redis为了数据安全默认设置设置只允许本地(127.0.0.1)访问,其他IP访问时拒绝,当然也会拒绝外网进行访问。

所以要想远程连接到Redis,还需要做以下几步操作。这里以Windows为例:

修改IP绑定

在Redis的安装目录中找到Redis的配置文件redis.conf(或redis.windows.conf),打开配置文件找到NETWORK部分,可以发现如下代码:

# By default, if no "bind" configuration directive is specified, Redis listens
# for connections from all the network interf-aces available on the server.
# It is possible to listen to just one or multiple selected interf-aces using
# the "bind" configuration directive, followed by one or more IP addresses.
#
# Examples:
#
# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1 ::1
#
# ~~~ WARNING ~~~ If the computer running Redis is directly exposed to the
# internet, binding to all the interf-aces is dangerous and will expose the
# instance to everybody on the internet. So by default we uncomment the
# following bind directive, that will force Redis to listen only into
# the IPv4 lookback interf-ace address (this means Redis will be able to
# accept connections only from clients running into the same computer it
# is running).
#
# IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERF-ACES
# JUST COMMENT THE FOLLOWING LINE.
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bind 127.0.0.1

从代码意思上可以看出,要想设置多个IP进行访问,可以通过bind来进行设置。当不设置bind的时候就允许所有IP访问,但是这样做不安全。

注意:这里有一个产生歧义的地址,多个IP访问不是指进行访问Redis服务器的IP,而是指安装Redis服务器自身的IP地址。而Redis服务器的IP地址常用的也就是三个,外网IP,内网IP和本地IP(127.0.0.1)。

在这里将bind注释掉,不使用。即允许所以IP进行访问,但是为了数据安全,要设置Redis密码。

设置Redis密码

设置Redis密码可以设置临时密码,也可以设置永久密码。

设置临时密码

登录到服务端,打开Redis服务(双击Redis安装目录下的应用程序redis-server.exe),之后打开redis-cli.exe,执行如下命令:

config set requirepass "yourpassword"
// 设置当前密码,服务重新启动后又会置为默认,即无密码;

临时密码指针对于当前Redis服务,所以个人并不推荐。

补充,可以输入以下代码获取当前设置密码:

config get requirepass // 获取当前密码
设置永久密码

在Redis的安装目录中找到Redis的配置文件redis.conf(或redis.windows.conf),打开配置文件找到SECURITY部分,可以发现如下代码:

# Require clients to issue AUTH <PASSWORD> before processing any other
# commands.  This might be useful in environments in which you do not trust
# others with access to the host running redis-server.
#
# This should stay commented out for backward compatibility and because most
# people do not need auth (e.g. they run their own servers).
#
# Warning: since Redis is pretty fast an outside user can try up to
# 150k passwords per second against a good box. This means that you should
# use a very strong password otherwise it will be very easy to break.
#
# requirepass foobared

添加requirepass yourpassword(此处注意,行前不能有空格),保存之后,重启Redis服务。

存在问题

当设置好永久密码之后,通过redis-server.exe启动Redis服务,却发现密码设置无效,这是为什么呢?

这是因为通过redis-server.exe启动Redis服务默认记载配置文件为redis.conf,这个文件并不是我们修改过的那个配置文件,这里有两种解决方案:

1、CMD手动启动Redis服务

打开CMD,进入Redis安装目录,输入以下命令,执行即可。

redis-server.exe redis.windows.conf
CMD手动启动Redis服务

2、自定义启动文件startup.bat

在Redis安装目录下,创建startup.bat文件,打开文件,输入redis-server.exe redis.windows.conf,以后启动Redis服务双击该文件即可。

startup.bat文件内容

相关设置到这里就完成了,这时候再测试本地是否能够远程连接Redis,当不设置密码的时候,操作Redis会发生错误警告,只有填写好正确的密码才能够连接上远程的Redis。

远程连接Redis结构图

注:auth是设置密码,keys * 是用来查看Redis内键值。

阅读原文


微信公众号:书客创作
书客创作
Web note ad 1