Redis系列(一):Redis簡介
一、Redis概述
Redis是一個開源(遵循BSD協議)Key-Value資料結構的記憶體儲存系統,用作資料庫、快取和訊息代理。它支援5種資料結構:字串string、雜湊hash、列表list、集合set和有序的集合zset。Redis支援Lua指令碼,哨兵機制和叢集實現高可用。適用場景:快取、投票、抽獎、分散式session、排行榜、計數、佇列、釋出訂閱等;具體介紹見Redis官網。
二、Redis安裝
① 下載地址:https://redis.io/download
② 安裝gcc:yum install gcc
③ 把第一步下載好的redis‐5.0.2.tar.gz上傳到伺服器的/root/svr/packages目錄或者直接 cd /root/svr/packages然後執行:wget http://download.redis.io/releases/redis-5.0.2.tar.gz
④ 執行 cp redis‐5.0.2.tar.gz ../
⑤ cd /root/svr 然後執行:tar -xvf redis‐5.0.2.tar.gz:
cd redis‐5.0.2:
⑥ 執行:make install PREFIX=/root/svr/redis-5.0.2
⑦ 啟動redis 執行:bin/redis-server ../redis.conf (注意:如果要後臺啟動需要把redis.conf配置裡面的daemonize改為yes)
⑧ 驗證是否啟動成功 ps -ef|grep redis
⑨ 進去redis客戶端:bin/redis-cli
⑩ 退出客戶端:quit
三、redis.conf主要配置詳解
引數 | 解釋 |
bind | 指定 Redis 只接收來自於該 IP 地址的請求,如果不進行設定,那麼將處理所有請求 |
port | 監聽埠,預設6379 |
timeout | 設定客戶端連線時的超時時間,單位為秒。當客戶端在這段時間內沒有發出任何指令,那麼關閉該連線 |
daemonize | 預設情況下,redis不是在後臺執行的,如果需要在後臺執行,把該項的值更改為yes |
loglevel | log等級分為4級,debug, verbose, notice, 和 warning。生產環境下一般開啟notice |
logfile | 配置log檔案地址,預設使用標準輸出,即列印在命令列終端的視窗上 |
save | save <seconds> <changes>比如save 60 10000意思60秒(1分鐘)內至少10000個key值改變(則進行資料庫儲存--持久化rdb) |
dbfilename | rdb檔案的名稱 |
dir | 資料目錄,2種持久化rdb、aof檔案就在這個目錄 |
replicaof | replicaof <masterip> <masterport>:該配置是主從的配置表示該redis例項是masterip:masterport的從節點 |
masterauth | master連線密碼 |
replica-serve-stale-data |
當slave跟master失去連線或者正在同步資料,slave有兩種執行方式: 1) 如果replica-serve-stale-data設定為yes(預設設定),slave會繼續響應客戶端的請求。 2) 如果replica-serve-stale-data設定為no,除去指定的命令之外的任何請求都會返回一個錯誤”SYNC with master in progress” |
replica-read-only | 是否設定slave只讀 |
repl-diskless-sync | 同步策略: 磁碟或socket,預設磁碟方式 |
repl-diskless-sync-delay | 如果非磁碟同步方式開啟,可以配置同步延遲時間,以等待master產生子程序通過socket傳輸RDB資料給slave。預設值為5秒,設定為0秒則每次傳輸無延遲 |
repl-ping-replica-period | slave根據指定的時間間隔向master傳送ping請求。預設10秒 |
repl-timeout | 同步的超時時間 |
repl-disable-tcp-nodelay | 是否在slave套接字傳送SYNC之後禁用 TCP_NODELAY |
repl-backlog-size | 設定資料備份的backlog大小 |
repl-backlog-ttl | slave斷開開始計時多少秒後,backlog緩衝將會釋放 |
replica-priority | slave的優先順序,當master掛了,優先順序數字小的salve會優先考慮提升為master,0作為一個特殊的優先順序,標識這個slave不能作為master |
requirepass | 客戶端在處理任何命令時都要密碼驗證 |
rename-command | 命令重新命名,可以給危險命令改變名字 |
maxclients | 設定最多同時連線的客戶端數量,預設這個限制是10000個客戶端。 |
maxmemory | 設定最大記憶體,一旦記憶體使用達到最大記憶體,redis會根據選定的回收策略(maxmemmory-policy)刪除key |
maxmemory-policy |
最大記憶體策略:如果達到記憶體限制了,redis如何選擇刪除key: |
maxmemory-samples |
設定樣本量的個數 |
appendonly |
是否開啟AOF,如果開啟那麼在啟動時Redis將載入AOF檔案,它更能保證資料的可靠性,aof的檔案內容就是RESP協議 |
appendfilename |
AOF檔名(預設:"appendonly.aof") |
appendfsync |
配置 Redis 多久才將資料 fsync 到磁碟一次 |
auto-aof-rewrite-percentage |
自動重寫AOF檔案。如果AOF日誌檔案增大到指定百分比,預設100。Redis能夠通過 BGREWRITEAOF 自動重寫AOF日誌檔案 |
auto-aof-rewrite-min-size |
自動重寫AOF檔案。如果AOF日誌檔案到達最小的指定大小,預設64mb |
aof-use-rdb-preamble |
Redis 4.0之後配置混合持久化,需要配置 aof-use-rdb-preamble yes |
lua-time-limit |
Lua指令碼的最大執行時間,單位為毫秒 |
cluster-enabled |
是否開啟叢集 cluster-enabled yes |
cluster-config-file |
redis自動生成叢集配置資訊的檔名 |
cluster-node-timeout |
叢集節點超時毫秒數。超時的節點將被視為不可用狀態。 |
aof-rewrite-incremental-fsync |
當一個子程序重寫AOF檔案時,如果配置aof-rewrite-incremental-fsync yes,則檔案每生成32M,資料會被同步 |
rdb-save-incremental-fsync |
當redis儲存RDB檔案時,如果啟用了以下選項,每生成32MB資料,檔案將被fsync到磁碟 |
四、Redis核心資料結構
五、Redis核心原理
1、Redis單執行緒為什麼還能這麼快
Redis所有的資料都是在記憶體中,所有的運算都是記憶體級別的運算,而且單執行緒避免了多執行緒的切換效能損耗的問題。正因為Redis是單執行緒,所以要小心使用Redis指令,對於那些耗時的指令(比如keys),一定要謹慎使用,一不小心就可能會導致 Redis 卡頓。
2、Redis單執行緒為何能處理那麼多的併發客戶端連線
Redis的IO多路複用:redis利用epoll來實現IO多路複用,將連線資訊和事件放到佇列中,依次放到檔案事件分派器,事件分派器將事件分發給事件處理器。(IO多路複用在後續的netty系列裡面詳細講解)
總結:Redis是一個Key-Value資料結構的記憶體儲存系統,他支援5種資料結構,分別是String結構、Hash結構、List結構、Set結構、Zset結構;Redis支援Lua指令碼,哨兵機制和叢集實現高可用;介紹了安裝Redis的步驟,詳細的解釋了redis.conf的主要配置,以及Redis的核心原