运行环境VMware15,Linux版本是CentOS7。
在安装Redis之前,使用到的操作命令需要提前自行安装,或者需要启动网卡,请确保必备的条件都满足之后再阅读此文并跟着进行操作。具体可参考之前的文章:Linux使用日记:Linux新安装时的设置及Linux常用操作.
Linux使用日记:Linux下安装Redis以及设置开机自启动
Linux下安装Redis
一、gcc依赖
由于 redis 是用 C 语言开发,安装之前必先确认是否安装 gcc 环境。使用命令[gcc -v]确认,如果没有安装,执行命令[ yum install -y gcc ]进行安装 。
gcc -v #确认gcc是否安装
yum install -y gcc #从默认指定的文件库中自动安装gcc依赖
二、下载Redis安装包
可使用命令[ wget http://download.redis.io/releases/redis-5.0.3.tar.gz ]远程下载Redis的安装包,此处下载的是5.0.3版本,可以根据自己所需下载指定版本。
注:wget默认下载路径即当前所在路径,一般是在/root 或者/home路径,可以用命令[ wget -p dir url ]指定将url中的资源下载到dir路径下。
下载完毕:
笔者是建立了个文件夹 /home/app,将redis的压缩包都下载到这个文件夹中了。当然,你也可以在下载完毕之后使用移动命令将压缩包移动进来。
#使用wget命令从网站上下载Redis压缩包,并下载到指定redis文件夹中
wget -p /home/app http://download.redis.io/releases/redis-5.0.3.tar.gz
##### 已经使用wget url命令直接下载的压缩包,移动至指定文件夹操作
mkdir /home/app #创建文件
#将已经下载的压缩包移动至redis文件夹中
mv /root/redis-5.0.3.tar.gz /home/app
三、解压、编译
首先进入压缩包所在文件夹[cd /home/app/redis],使用命令[ tar -zxvf redis-5.0.3.tar.gz ]进行解压,然后使用命令[ cd redis-5.0.3 ]转到解压后的目录之下,接着再使用命令[make]进行编译。
cd /home/app #进入压缩包所在目录
tar -zxvf redis-5.0.3.tar.gz #解压
cd redis-5.0.3 #进入解压后的目录
make #编译
编译完成:
没有gcc依赖编译报错
若Linux中没有gcc依赖,则将在编译阶段出现错误导致编译失败,编译时会提示CC命令找不到,需要先安装一下。
#自动安装gcc依赖
yum -y install gcc automake autoconf libtool make
安装完毕后,要先删掉刚才已经解压且编译的文件夹redis,然后重新解压后再次进行编译。
cd .. #可以直接返回上一级目录,因为刚才我们在下级目录中进行编译
cd /home/app #或者进入压缩包所在目录
rm -rf redis-5.0.3 #强制删除文件夹及其内容,不提示,具体三种删除可以参考之前的文章
tar -zxvf redis-5.0.3.tar.gz #重新解压
cd redis-5.0.3 #进入解压后的目录
make #编译
四、安装至指定目录
解析完毕后,使用命令[ make install PREFIX=/usr/local/redis ]安装Redis至指定目录。此时已将Redis安装至了/usr/local/redis目录下,文件夹中只有一个bin文件,即Redis启动的相关文件夹。
#安装redis至目录/usr/local/redis文件夹中
make install PREFIX=/usr/local/redis
五、启动Redis服务
可以选择在当前界面的主线程中启动Redis服务,也可以选择开启守护线程,让Redis服务可以挂载在后台自动运行。
直接启动服务
在当前工作界面中直接启动Redis服务的话,需要首先进入刚才安装的文件目录中,使用命令[ cd /usr/local/redis/bin/ ]进入,再使用命令[ ./redis-server ]即可启动Redis服务。
cd /usr/local/redis/bin/ #进入Redis安装的文件目录中
./redis-server #在当前工作界面(当前线程)启动Redis服务
#当然也可以不进入目录,直接指定全路径启动
./usr/local/redis/bin/redis-server
后台启动服务
从Redis解压文件夹中将配置文件redis.conf拷贝到安装文件夹中,使用命令[cp /home/app/redis-5.0.3/redis.conf /usr/local/redis/bin/ ],然后使用vi编辑器修改配置,打开守护进程参数, 把 daemonize no 改为 daemonize yes
#从Redis解压目录中拷贝redis.conf配置文件到安装目录bin下
cp /home/app/redis-5.0.3/redis.conf /usr/local/redis/bin/
vi redis.conf
按“i”或“inter”进入编辑模式修改参数daemonize no 为 daemonize yes
按“ESC”退出编辑模式
:wq #保存退出vi编辑器,:w不保存退出,没反应时Ctrl+z 终止当前线程操作
然后再使用命令[ ./redis-server redis.conf ]以配置文件的方式启动Redis,就会根据设置以守护进程的方式在后台运行服务。若想关闭进程可以使用命令[./redis-cli shutdown]进行关闭。
./redis-server redis.conf #使用配置文件启动Redis服务
./redis-cli shutdown #若使用完毕可以关闭Redis服务
在未关闭服务端之前,也可以启动客户端进行访问,使用命令[./redis-cli -h 127.0.0.1 -p 6379]访问刚才我们启动的ip为127.0.0.1 端口为6379的redis.conf的服务。使用完毕可以用命令[exit]退出客户端。
#前提是./redis-cli shutdown 未使用该命令之前
#启动客户端连接指定ip prot的Redis服务
./redis-cli -h 127.0.0.1 -p 6379
exit #退出客户端
六、设置Redis服务开机自启
- 在etc下创建redis配置文件
在/etc下新建redis文件夹,使用命令[mkdir /etc/redis]。然后拷贝Redis的配置文件,使用命令[cp /home/app/redis-5.0.3/redis.conf /etc/redis/redis-6379.conf ]从Redis的解压目录将配置文件拷贝过来,重命名为redis-6379.conf。
mkdir /etc/redis #在etc目录下创建redis文件夹
#从Redis的解压目录将配置文件拷贝过来,重命名为redis-6379.conf
cp /home/app/redis-5.0.3/redis.conf /etc/redis/redis-6379.conf
- 调整redis配置文件参数
修改配置参数,注释掉bind ip,不限制访问服务的ip,把daemonize设置为yes,让Redis进程可以在后台自动运行。
vi redis-6379.conf
按“i”或“inter”进入编辑模式修改参数
按“ESC”退出编辑模式
:wq #保存退出vi编辑器,:w不保存退出,没反应时Ctrl+z 终止当前线程操作
- 复制启动脚本并进行配置
Redis的启动脚本模板一般为解压目录的/utils文件夹下的redis_init_script。使用命令[cp /home/app/redis-5.0.3/utils/redis_init_script /etc/init.d/redis]将启动脚本模板拷贝至CentOS跟随机器启动的系统文件夹init.d中。
#拷贝Redis的启动脚本模板
cp /home/app/redis-5.0.3/utils/redis_init_script /etc/init.d/redis
然后使用vi编辑器修改相应的参数。需增加或修改的参数如下:
在头部增加配置(启动参数/描述):
# chkconfig: 2345 90 10
# description: Redis AutoStart and Stop
按照实际文件路径调整:
REDISPORT 即redis配置文件名称
EXEC 即redis服务所处路径
CLIEXEC 即redis客户端服务所处路径
最终的完整脚本redis_init_script如下:
#!/bin/sh
#
# Simple Redis init.d script conceived to work on Linux systems
# chkconfig: 2345 90 10
# description: Redis AutoStart and Stop
# as it does use of the /proc filesystem.
REDISPORT=redis-6379
EXEC=/usr/local/redis/bin/redis-server
CLIEXEC=/usr/local/redis/bin/redis-cli
PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/etc/redis/${REDISPORT}.conf"
case "$1" in
start)
if [ -f $PIDFILE ]
then
echo "$PIDFILE exists, process is already running or crashed"
else
echo "Starting Redis server..."
$EXEC $CONF
fi
;;
stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE does not exist, process is not running"
else
PID=$(cat $PIDFILE)
echo "Stopping ..."
$CLIEXEC -p $REDISPORT shutdown
while [ -x /proc/${PID} ]
do
echo "Waiting for Redis to shutdown ..."
sleep 1
done
echo "Redis stopped"
fi
;;
*)
echo "Please use start or stop as first argument"
;;
esac
- 开启自启服务
执行命令[ chkconfig redis on ] 设置开机执行redis脚本 ,然后再通过命令[ service redis start ]启动服务,使用命令[ ps -aux|grep redis ]可以查看脚本启动服务是否成功。
chkconfig redis on #设置开机执行redis脚本
service redis start #启动配置好的自启服务
ps -aux|grep redis #验证自启服务是否已启动
service redis stop #关闭服务
自启安全机制设置
redis作为一个高速数据库,在互联网上,必须有对应的安全机制来进行保护,方法有两种:绑定IP,设置密码。
绑定IP
在redis.conf文件设置bind ip参数,限制可以访问此服务的客户端IP。
# If you want you can bind a single interface, if the bind option is not
# specified all the interfaces will listen for incoming connections.
#
bind 127.0.0.1
这种情况下,我们在启动redis服务器的时候不能再用:redis-server,改为:redis-server path/redis.conf 即在启动的时候指定需要加载的配置文件,其中path/是你上面修改的redis配置文件所在目录。
这个方法有显著的缺点,在Redis集群中难免有多台机器访问一个redis服务。
设置密码
打开redis.conf配置文件,找到requirepass,设置登录验证密码。设置密码以后虽然依然可以登陆,但是无法执行命令了。需要进行密码验证之后才能进行操作。
requirepass yourpassword #设置此服务器的登录密码
#启动redis客户端,并连接服务器 redis默认端口6379
redis-cli -h yourIp -p yourPort -a youpassword
如果redis服务端没有配置密码,会得到nil,而如果配置了密码,但是redis客户端连接redis服务端时,没有用密码登录验证,会提示:operation not permitted,这时候可以用命令:auth yourpassword 进行验证密码,再执行 config set requirepass,就会显示yourpassword
由于redis并发能力极强,仅仅是设置了密码,攻击者可能在短期内发送大量猜密码的请求,很容易暴力破解,所以建议密码越长越好,比如20位。(密码在 conf文件里是明文,所以不用担心自己会忘记)