天天看點

在CentOS7.5下安裝配置RedisRedis添加系統服務遠端連接配接配置擴充-基于接口形式的redis使用者登入授權效驗的簡單實作

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的内容就到這裡了!