1. 程式人生 > >Redis系列(一):Redis簡介

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:
1)volatile-lru -> 根據LRU演算法刪除設定過期時間的key
2)allkeys-lru -> 根據LRU演算法刪除任何key
3)volatile-random -> 隨機移除設定過過期時間的key
4)allkeys-random -> 隨機移除任何key
5)volatile-ttl -> 移除即將過期的key(minor TTL)
6)noeviction -> 不移除任何key,只返回一個寫錯誤

maxmemory-samples

設定樣本量的個數

appendonly

是否開啟AOF,如果開啟那麼在啟動時Redis將載入AOF檔案,它更能保證資料的可靠性,aof的檔案內容就是RESP協議

appendfilename

AOF檔名(預設:"appendonly.aof")

appendfsync

配置 Redis 多久才將資料 fsync 到磁碟一次
Redis支援三種不同的模式:
1)no:不要立刻刷,只有在作業系統需要刷的時候再刷。比較快。
2)always:每次寫操作都立刻寫入到aof檔案。慢,但是最安全。
3)everysec:每秒寫一次。折中方案。

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的核心原