Linux服務器Redis6.x安裝、配置全過程
1、概述
Redis是用C語言開發(fā)的一個開源的高性能鍵值對(key-value)數(shù)據(jù)庫。它通過提供多種鍵值數(shù)據(jù)類型來適應不同場景下的存儲需求,通過Redis是單線程+多路IO復用技術,提高了reids的可用性。
目前為止Redis支持的鍵值數(shù)據(jù)類型如下:
- 字符串類型(String)
- 散列類型(Hash)
- 列表類型(List)
- 集合類型(Set)
- 有序集合類型(Zset)
2、新特性
redis6.x相比于redis5.x增加新特性:
多線程IO,通過多線程用來處理網(wǎng)絡數(shù)據(jù)的讀寫和協(xié)議解析,底層數(shù)據(jù)及命令操作還是單線程。
多線程IO默認不開啟,需要修改配置進行修改:
io-threads-do-reads yes io-threads 4
- 引入了 ACL機制,給每個用戶分配不同的權限來控制權限。
- 支持集群代理
- 提升了RDB日志加載速度
- 實現(xiàn)了客戶端緩存功能
3、應用場景
- 緩存(數(shù)據(jù)查詢、短連接、新聞內容、商品內容等等)。
- 分布式集群架構中的session(Token)分離。
- 聊天室的在線好友列表。
- 任務隊列(秒殺、搶購等等)。
- 應用排行榜。
- 網(wǎng)站訪問統(tǒng)計。
- 數(shù)據(jù)過期處理(可以精確到毫秒)。
4、安裝運行redis
docker環(huán)境安裝
4.1、環(huán)境依賴
- 依賴c++環(huán)境
yum install gcc-c++ yum install centos-release-scl scl-utils-build yum install -y devtoolset-8-toolchain
4.2、源碼安裝redis
- 操作目錄:/usr/local/redis/
- 安裝版本:redis-6.2.5
- 安裝目錄:/usr/local/redis/6.2.5
下載地址:http://download.redis.io/releases
通過先下載然后拷貝到服務器上,或者通過wget命令下載,下面通過wget進行下載;
創(chuàng)建目錄:
mkdir /usr/local/redis/
進入目錄:
cd /usr/local/redis/
下載:
wget http://download.redis.io/releases/redis-6.2.5.tar.gz
解壓:
tar -zxvf redis-6.2.5.tar.gz
目錄結構如下:

編譯源碼:
# 進入源碼目錄 cd /usr/local/redis/redis-6.2.5 # make編譯源碼,并且指定安裝目錄為/usr/local/redis/6.2.5 make PREFIX=/usr/local/redis/6.2.5 install
拷貝配置文件:
# 創(chuàng)建配置文件 mkdir /usr/local/redis/6.2.5/config -p # 將源碼中的配置文件,拷貝到安裝目錄下 cp /usr/local/redis/redis-6.2.5/redis.conf /usr/local/redis/6.2.5/config
創(chuàng)建日志文件目錄:
mkdir /usr/local/redis/6.2.5/log -p
安裝目錄結構如下:


- redis-benchmark:性能測試工具,看看自己服務器性能如何
- redis-check-aof:修復有問題的AOF文件,rdb和aof后面講
- redis-check-dump:修復有問題的dump.rdb文件
- redis-sentinel:Redis集群使用
- redis-server:Redis服務器啟動命令
- redis-cli:客戶端,操作入口
4.3、修改配置文件
# 編輯配置文件 vim /usr/local/redis/6.2.5/config/redis.conf #1、開啟后臺啟動 daemonize no —> daemonize yes #2、開啟遠程連接 注釋 bind 127.0.0.1 protected-mode yes —> protected-mode no #3、配置客戶端連接活躍時間 tcp-keepalive 60 #4、配置日志文件位置 logfile "/usr/local/redis/6.2.5/log/redis.log"
4.4、啟動、停止redis
啟動:
cd /usr/local/redis/6.2.5/bin ./redis-server ../config/redis.conf
停止:
pkill redis
5、redis配置文件介紹
- INCLUDES:類似nginx的include,多實例的情況可以把公用的配置文件提取出來
- protected-mode:本機保護模式
- bind:默認情況bind=127.0.0.1只能接受本機的訪問請求,如果不配置,則無限制接受任何IP地址的訪問
- timeout:一個空閑的客戶端維持多少秒會關閉,0表示關閉該功能,即永不關閉
- tcp-keepalive:每個n秒對客戶端進行一次心跳檢測,如果設置為0,則不會檢測,建議設置成60
- databases:庫的數(shù)量,默認為16個
- requirepass:設置連接密碼
- maxclients:最大連接數(shù),默認為1000
- maxmemory:可用最大內存
- maxmemory-policy:移除策略算法
- no-eviction(??v?k?n):不刪除策略。當達到最大內存限制時, 如果再新增,返回錯誤信息,為默認策略。
- allkeys-lru: 在所有key中優(yōu)先刪除最少使用的鍵。
- allkeys-random: 在所有key中隨機刪除鍵。
- volatile-lru: 在設置了超時時間的key中優(yōu)先刪除最少使用的鍵。
- volatile-random:在設置了超時時間的key中隨機刪除鍵。
- volatile-ttl:在設置了超時時間的key中優(yōu)先刪除剩余時間最短的鍵。
- maxmemory-samples:設置樣本數(shù)量
LRU算法和最小TTL算法都并非是精確的算法,而是估算值,通過設置樣本的大小,redis默認會檢查樣本中的數(shù)據(jù),選擇LRU的那個。
一般設置3到7的數(shù)字,數(shù)值越小樣本越不準確,但性能消耗越小。
6、redis高級類型使用
- Bitmaps:通過二進制形式存儲數(shù)據(jù),可以用于用戶簽到統(tǒng)計、訪問量統(tǒng)計。
- HyperLogLog:統(tǒng)計非常大量的不重復數(shù)據(jù)的總和。
- Geospatial:redis基于該類型,提供了經(jīng)緯度設置,查詢,范圍查詢,距離查詢,經(jīng)緯度Hash等常見操作
7、持久化
Redis的高性能是由于其將所有數(shù)據(jù)都存儲在了內存中,為了使Redis在重啟之后仍能保證數(shù)據(jù)不丟失,需要將數(shù)據(jù)從內存中同步到硬盤中,這一過程就是持久化。
Redis支持兩種方式的持久化,一種是RDB方式,一種是AOF方式,可以單獨使用其中一種或將二者結合使用。
7.1、RDB持久化
RDB方式的持久化是通過快照(snapshotting)完成的,當符合一定條件時Redis會自動將內存中的數(shù)據(jù)進行快照并持久化到硬盤。
RDB是Redis默認采用的持久化方式,在redis.conf配置文件中默認有此下配置:
save 900 1 save 300 10 save 60 10000
save 開頭的一行就是持久化配置,可以配置多個條件(每行配置一個條件),每個條件之間是“或”的關系,“save 900 1”表示15分鐘(900秒鐘)內至少1個鍵被更改則進行快照,“save 300 10”表示5分鐘(300秒)內至少10個鍵被更改則進行快照。
在redis.conf中:
- 配置dir指定rdb快照文件的位置
- 配置dbfilenam指定rdb快照文件的名稱
Redis啟動后會讀取RDB快照文件,將數(shù)據(jù)從硬盤載入到內存。根據(jù)數(shù)據(jù)量大小與結構和服務器性能不同,這個時間也不同。通常將記錄一千萬個字符串類型鍵、大小為1GB的快照文件載入到內存中需要花費20~30秒鐘。
優(yōu)點:
- 適合大規(guī)模的數(shù)據(jù)恢復
- 對數(shù)據(jù)完整性和一致性要求不高更適合使用
- 節(jié)省磁盤空間
- 恢復速度快
缺點:
- 克隆時會瞬間增大內存
- 數(shù)據(jù)過大時,耗時更久
- 可能會丟失最后一次數(shù)據(jù)
問題總結:
通過RDB方式實現(xiàn)持久化,一旦Redis異常退出,就會丟失最后一次快照以后更改的所有數(shù)據(jù)。這就需要開發(fā)者根據(jù)具體的應用場合,通過組合設置自動快照條件的方式來將可能發(fā)生的數(shù)據(jù)損失控制在能夠接受的范圍。如果數(shù)據(jù)很重要以至于無法承受任何損失,則可以考慮使用AOF方式進行持久化。
rdb移植恢復:
通過將rdb文件拷貝到其他redis服務器下,可以實現(xiàn)rdb的恢復,步驟如下:
- 關閉需要恢復數(shù)據(jù)的Redis
- 先把備份的文件拷貝到redis工作目錄下
- 啟動Redis, 備份數(shù)據(jù)會直接加載
7.2、AOF持久化
默認情況下Redis沒有開啟AOF(append only file)方式的持久化。
修改配置文件開啟:
appendonly yes
開啟AOF持久化后每執(zhí)行一條會更改Redis中的數(shù)據(jù)的命令或者每隔一秒,Redis就會將該命令寫入硬盤中的AOF文件。
通過修改配置文件設置AOF策略:
#always:表示每一條更新命令都同步;everysec:每秒同步一次(如果宕機,會丟失最后一秒數(shù)據(jù)) appendfsync always | everysec
AOF文件的保存位置和RDB文件的位置相同,都是通過dir參數(shù)設置的,默認的文件名是appendonly.aof
可以通過修改配置文件自定義名稱:
appendfilename appendonly.aof
Rewrite壓縮機制:
? AOF采用文件追加方式,文件會越來越大為避免出現(xiàn)此種情況,新增了重寫機制(fork出一條新進程來將文件重寫), 當AOF文件的大小超過所設定的閾值時,Redis就會啟動AOF文件的內容壓縮, 只保留可以恢復數(shù)據(jù)的最小指令集。
何時觸發(fā)重寫:
Redis會記錄上次重寫時的AOF大小,默認配置是當AOF文件大小是上次rewrite后大小的一倍且文件大于64M時觸發(fā),比如:
系統(tǒng)載入時或者上次重寫完畢時,Redis會記錄此時AOF大小,設為base_size,如果Redis的AOF當前大小>= base_size +base_size*100% (默認)且當前大小==>=64mb==(默認)的情況下,Redis會對AOF進行重寫。
通過修改配置,設置重寫觸發(fā)條件:
# 文件大小達到上次重寫大小的100%(2倍)時開始重寫 auto-aof-rewrite-percentage:100 # 文件大小達到"設置"值時開始重寫 auto-aof-rewrite-min-size:64mb
重寫流程:
1、主進程fork出子進程執(zhí)行重寫操作,保證主進程不會阻塞。
2、子進程遍歷redis內存中數(shù)據(jù)到臨時文件,客戶端的寫請求同時寫入aof_buf緩沖區(qū)和aof_rewrite_buf重寫緩沖區(qū)保證原AOF文件完整以及新增數(shù)據(jù)的完整性。
3、子進程寫完新的AOF文件后,向主進程發(fā)信號,父進程更新統(tǒng)計信息。
4、主進程把aof_rewrite_buf中的數(shù)據(jù)寫入到新的AOF文件。
5、使用新的AOF文件覆蓋舊的AOF文件,完成AOF重寫。
優(yōu)缺點:
優(yōu)點:
- 備份機制更穩(wěn)健,丟失數(shù)據(jù)概率更低
缺點:
- 比起RDB占用更多的磁盤空間
- 恢復備份速度要慢
- 頻繁的同步導致系統(tǒng)性能壓力更大
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Redis五種數(shù)據(jù)結構在JAVA中如何封裝使用
本篇博文就針對Redis的五種數(shù)據(jù)結構以及如何在JAVA中封裝使用做一個簡單的介紹。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-11-11
Redis使用bloom-filter過濾器實現(xiàn)推薦去重
這篇文章主要介紹了Redis使用bloom-filter過濾器實現(xiàn)推薦去重,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-11-11

