在Linux下安裝Redis Server
因為有安裝Redis伺服器的需要所以寫了這篇,雖然說這個萬物Docker時代直接透過Docker下載Redis image就搞定,但考量到效能與細節設定,還是逐步老老實實地把Redis安裝起來比較恰當。
透過Ubuntu安裝Redis Server
首先,請先擁有一套乾淨的Ubuntu Server,這邊我預設安裝的是
Ubuntu Server Minimized
,所以後續過程會囉嗦點。切換到最高權限。
sudo -i
- 對apt-get下指令更新。
apt-get update
- 開始安裝Redis,全程YES到底就對了。
apt-get install redis -y
- 裝完後立刻執行Linux版本的
redis-cli
,不用帶任何參數,自動連線到本機127.0.0.1:6379
,接著下指令:
> ping
PONG //系統回應給你的回應
- 離開回到Linux作業系統後,輸入
service redis-server status
來觀察Redis運行狀態:
一大堆資訊中間會出現下列綠色文字:
Active: active (running) since ... ago
- 取得
nano編輯器
,準備後續幹活。
apt-get install nano
- 安裝完成後輸入下列指令,進行Redis設定編輯:
nano /etc/redis/redis.conf
- 在編輯器中,開啟外部網路監聽:
找到
bind 127.0.0.1 ::1
改成
bind 0.0.0.0
- 在編輯器中,開啟密碼連線功能,以防止未知的連線亂入:
找到
requirepass foobared
改成
requirepass SlashviewPassword
有趣的是透過apt-get安裝Redis後(版本是
6.0.16
,在redis-cli輸入INFO SERVER
就可以查看),他直接幫我註冊成開機後常駐執行
,也就是不用再煩惱後續編輯開機運行的設定了。至此成為一部Redis Server所需要的功能都處理好了,重啟服務(或者重開機)吧。
systemctl restart redis
或者
service redis-server restart
- 安裝並執行
HTOP
,以方便監視系統CPU、RAM負載狀況。
sudo apt-get install htop -y
htop
下列這張圖表,是我在壓測Redis的時候透過HTOP觀察到的數據:
在Windows下連線至遠端Redis伺服器
接著我們把場景轉換到Windows,並在這環境中針對遠端Redis伺服器下指令:
下載Windows版本的
redis-cli.exe
。(點此下載:redis-cli.zip)輸入連線參數,連到剛才創建的遠端Redis伺服器:
redis-cli -h XX.XX.XX.XX -p 6379 -a SlashviewPassword
補充:如果你是在Linux
下的redis-cli,那麼你無法直接使用-a
去帶入密碼,而是要先聯入機器後出現提示符號後,再輸入密碼資訊:
redis-cli -h XX.XX.XX.XX -p 6379
>AUTH SlashviewPassword
通過密碼驗證後,就可以開始輸入指令
- 連上去之後就可以開始使用簡單的指令來測試啦!
//設定somekey鍵值資料
set somekey "HelloWorld"
//取得somekey鍵值資料
get somekey
//列出所有的鍵值
keys *
//刪除鍵值
del somekey
//清除資料庫
flushdb
//清除整機
flushall
//立刻釋放記憶體
memory purge
針對Redis進行輕度優化
⚠ 優化設定項目請一律透過編輯redis.conf
設定檔案來進行修改。
一個Redis支援多個DB,而每個DB又分別被實作AOF
與RDB
,這導致現代的Redis已經跟傳統印象中的記憶體資料庫不太相同了,透過AOF與RDB實作,就算作業系統當機、斷電,Redis都有能力回復斷電前特定時間的狀態,端看你當時候的備份機制而定。以下是名詞說明:
- AOF(Append Only File):功能預設為關閉。可以將這個功能視為資料庫的交易紀錄(Log),也就是你針對Redis每一筆下的指令都會被如實的紀錄下來,Redis也會在運作時期定時針對AOF檔案進行重寫(rewrite)藉以優化AOF檔案。
例如下列指令
set someKey "Hello"
set someKey "Welcome"
set someKey "Test"
最後會被重寫成,因為前面的狀態已經不需要
set someKey "Test"
- RDB(Redis Database Backup file):功能預設為開啟。可以將這個功能視為資料庫快照,也就是依據固定的時間或條件,Redis會將記憶體中所有的資料抄寫到檔案,當斷電重新恢復時Redis會重新讀取文件恢復,達成資料復原。有趣的是,當你沒有把功能設定為關閉且針對主機下shutdown或reboot,Redis也會自動幫你下
save
指令保存資料喔。
透過AOF
與RDB
的實作,我們可以稱為這台Redis有能力達成某種程度的持久化
,而我們這裡談的優化,就是要把這個持久化拿掉
,讓他回到單純的記憶體快取資料庫時代,透過這樣的優化,我們可以讓寫入的時間再進一步縮短,也可以降低Redis伺服器的CPU損耗。
將AOF機制關閉
由於AOF預設是關閉的,我們只要在設定檔中再確認一次即可,確認appendonly no
。
將RDB機制關閉
由於RDB預設是開啟的,因此我們要在設定檔中將他關閉,找到save XXX X
的字眼後將三段都備註起來,新增save ""
即可。
原始設定的意思:
save 900 1 //900秒內若有1鍵值變化就快照
save 300 10 //300秒內若有10鍵值變化就快照
save 60 10000 //60秒內若有10000鍵值變化就快照
maxmemory限制執行期的最高記憶體
預設的maxmemory
為0
,這可能導致Redis在運作的時候會淪落到SWAP的窘境,因此我們可以透過maxmemory XXMB
或maxmemory XXGB
指令來進行最高記憶體耗用的限制。
maxmemory-policy最高記憶體抵達策略
當Redis耗盡記憶體時,我們必須給定策略,不然依據預設值
的反應會直接把所有的SET寫入指令都拋Exception返回,可以透過maxmemory-policy XXX
來下策略。
其中的策略列表如下,請自行決定:
noeviction(預設值)
當記憶體達到上限時拋出錯誤。
allkeys-lru(多數建議值)
當記憶體達到上限時,根據最近最少使用LRU(Least Recently Used) 刪除Key。
volatile-lru:
與allkeys-lru類似,但只針對TTL Key刪除。
allkeys-lfu:
當記憶體達到上限時,根據最近最不常使用(Least Frequently Used) 刪除Key。
volatile-lfu:
與allkeys-lfu類似,但只針對TTL Key刪除。
allkeys-random:
當記憶體達到上限時,隨機選擇Key刪除。
volatile-random:
與allkeys-random類似,但只針對TTL Key刪除。
volatile-ttl:
當記憶體達到上限時,優先刪除TTL較短的Key。
提醒:
- 針對設定檔案進行任何的變更,都要重新開啟服務喔。
- 若將AOF、RDB均關閉,經過實測於百萬筆的寫入時期,可以將速度提升近50%。(原本兩秒多變成一秒多)
- 盡管某些文章表示
flushall
或flushdb
會清除.rdb文件
,但依據我的測試是:不會清除,你要自行手動清除。 - 本文章只是淺嚐Redis滋味,真正實務上還要考慮很多架構因素,例如:主從、覆寫策略...等,但那又是另外一回事了。