By velin 杨伟聪
Redis
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API,对于前端来说,也可以简单的认为它是一个运行在服务端的Storage,用于快速储存的key-value数据库。
我们需要先在服务器上新建一个目录来存放Redis的安装文件
mkdir /home/redis
下载并解压redis安装包
wget http://download.redis.io/releases/redis-5.0.2.tar.gz
tar xzf redis-5.0.2.tar.gz
使用yum安装gcc依赖,遇到选择,输入y即可
yum install gcc
进入redis解压目录下
cd redis-5.0.2
编译代码
make MALLOC=libc
安装
cd src && make install
查看是否安装成功,在src目录下执行
./redis-server
如果一切正常的话,应该会输出
18685:C 13 Dec 12:56:12.507 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
18685:C 13 Dec 12:56:12.507 # Redis version=4.0.6, bits=64, commit=00000000, modified=0, pid=18685, just started
18685:C 13 Dec 12:56:12.507 # Warning: no config file specified, using the default config. In order to specify a config file use ./redis-server /path/to/redis.conf
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 4.0.6 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 6379
| `-._ `._ / _.-' | PID: 18685
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
18685:M 13 Dec 12:56:12.508 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
18685:M 13 Dec 12:56:12.508 # Server initialized
18685:M 13 Dec 12:56:12.508 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
18685:M 13 Dec 12:56:12.508 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
18685:M 13 Dec 12:56:12.508 * Ready to accept connections
ok!到此Redis已经基本安装完成,但是现在的运行方式是前台运行,会占用整个终端控制台,所以我们需要它可以以后台方式运行,并且设置开机自启,那么接着看后面的操作,首先,Ctrl+C
添加系统服务
需要先回到根目录下修改redis.conf文件
cd ../
vim redis.conf
将 daemonize no
修改为 daemonize yes
然后创建并编辑redis启动文件,赋予相关权限
touch /etc/init.d/redis
chmod a+x /etc/init.d/redis
vim /etc/init.d/redis
输入以下内容
#! /bin/bash
# chkconfig: - 85 15
PATH=/home/redis/redis-5.0.2
DESC="redis daemon"
NAME=redis
DAEMON=$PATH/src/redis-server
STOP=$PATH/src/redis-cli
CONFIGFILE=$PATH/$NAME.conf
PIDFILE=$PATH/logs/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
set -e
[ -x "$DAEMON" ] || exit 0
do_start() {
$DAEMON $CONFIGFILE || echo -n "redis already running"
}
do_stop() {
$STOP shutdown || echo -n "redis not running"
}
do_reload() {
do_stop
do_start
}
case "$1" in
start)
echo -n "Starting $DESC: $NAME"
do_start
echo "."
;;
stop)
echo -n "Stopping $DESC: $NAME"
do_stop
echo "."
;;
reload|graceful)
echo -n "Reloading $DESC configuration..."
do_reload
echo "."
;;
restart)
echo -n "Restarting $DESC: $NAME"
do_stop
do_start
echo "."
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|reload|restart}" >&2
exit 3
;;
esac
exit 0
Shift+:
输入wq
保存退出
进入init.d目录
cd /etc/init.d/
注册成服务,并设置开机启动
chkconfig --add redis
chkconfig redis on
最后查看开机启动列表是否设置成功
chkconfig --list
最后执行启动服务命令验证是否成功
#启动服务
service redis start
#停止服务
service redis stop
如果没有报错。证明已经顺利将redis安装完成,并加入到开机启动服务列表内了。
但是目前只能在服务器上连接到redis,并不能远程连接(虽然为了安全,个人感觉不是很推荐直接放开远程访问权限,比较安全的办法是采用绑定IP的方式来进行控制,或者有需要直接上服务器看就好,哈哈。我一定很愚昧...),那么接着我们来配置远端连接相关操作
远程连接配置
首先,我们先配置我们访问需要的密码。打开redis根目录下的redis.conf文件
cd /home/redis/redis-5.0.0
vim ./redis.conf
Shift+:
输入/AUTH <PASSWORD>
,查找到修改密码的配置,将requirepass
前面的#
号去掉,并在后面输入你的密码,如
requirepass xxxxx
至此,密码设置就完成了,接下来我们需要配置远程访问权限。远程访问有两种方式,我分别介绍一下
一、较为保守安全的方法
在redis.conf文件内,查找到如下配置
# bind 127.0.0.1
把# bind 127.0.0.1前面的 注释#号去掉,然后把127.0.0.1改成你允许访问你的redis服务器的ip地址,表示只允许该ip进行访问。
二、较为方便不确定ip访问的方法
将上面开启的ip注释回去,不需要绑定ip地址。
接下来我们只需要查找到protected-mode
, 将该配置后面改为no
,表示允许公网访问。
接着Shift+:
输入wq
保存退出,重新启动Redis服务即可
service redis stop
service redis start
到这里,我们已经开启了redis的远程访问以及配置好了redis远程访问的密码
最后,国际惯例,开启远程访问端口,redis的默认端口为6379
firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --reload
别忘了在服务器提供商后台页面开启安全组哦~
我们可以尝试一下远程连接。推荐的工具是RedisDesktopManager
,我提供了下载地址
链接:https://pan.baidu.com/s/10wdMp9ibgZJyWy_CvstnIg
提取码:whzk
使用方式可以自行百度了,就是输入服务器ip地址,端口号,以及密码,点击TEST Connect,如果一切顺利的话,就会提示连接成功!
扩展-基于接口形式的redis用户登录授权效验的简单实现
我们知道现在前后端分离的开发方式已经很普及了,但是可能有些人会比较困惑,这种前后端分离的方式,如何对后端接口做登录效验呢?接口如果没有登录授权效验,那不是谁都可以直接从接口获取数据了?
当然,目前有很多解决方案可以解决该问题,这里我只是分享下我的理解,如有错误,请指出。
其实我实现的思路很简单,就是使用redis定时删除值的方法,在用户登录的时候,将用户id注册进redis内,并设置过期时间。并且用户在规定的时间内再次访问,就更新redis的过期时间。这样,接口就只能在用户登录成功并注册进redis后才能成功调用了。我使用的是eggjs,自己封装了状态管理类和中间件来处理相关登录授权操作。
就这样,关于Redis的内容就到这里了!