Redis 資料庫安裝

蠻牛牛發表於2018-07-11

[TOC]

REmote DIctionary Server(Redis) 是一個由 Salvatore Sanfilippo 寫的 key-value 儲存系統。

Redis 是一個開源的使用 ANSI C 語言編寫、遵守 BSD 協議、支援網路、可基於記憶體亦可持久化的日誌型、Key-Value 資料庫,並提供多種語言的 API。它通常被稱為資料結構伺服器,因為值(value)可以是字串(String), 雜湊(Map), 列表(list), 集合(sets) 和有序集合(sorted sets)等型別。從 2010 年 3 月 15 日起,Redis 的開發工作由 VMware 主持。從 2013 年 5 月開始,Redis 的開發由 Pivotal 贊助。

Redis 預設埠

Redis 預設埠為 6379,sentinel.conf 配置器埠為 26379

一、系統環境

二、安裝依賴

# yum install gcc gcc-c++ -y
複製程式碼

三、安裝 Redis

解壓
# tar xvf redis-4.0.10.tar.gz
進入 redis 目錄
# cd redis-4.0.10
編譯
# make PREFIX=/usr/local/redis MALLOC=libc(可以不加,預設是 jemalloc) install
安裝
# make install

注意:Redis 並沒有自己實現記憶體池,沒有在標準的系統記憶體分配器上再加上自己的東西。

redis-2.4 以上自帶 jemalloc,你不需要加任何引數,通過 zmalloc.c 原始碼中我們可以看到,Redis 在編譯時,會先判斷是否使用 tcmalloc,如果是,會用 tcmalloc 對應的函式替換掉標準的 libc 中的函式實現。其次會判斷jemalloc 是否使得,最後如果都沒有使用才會用標準的 libc 中的記憶體管理函式。所以用 tcmalloc 優化請謹慎使用,這兩著分配器碎片率相差不大,建議用自帶 jemalloc。
複製程式碼

redis 安裝後,在 /usr/local/redis/bin 下有幾個以 redis 開頭的可執行檔案,稱為 redis shell,這些可執行檔案可以做很多事情。

檔名稱 作用
redis-server 啟動 redis
redis-cli redis 命令列工具
redis-benchmark 基準測試工具
redis-check-aof AOF 持久化檔案檢測工具和修復工具
redis-check-rdb RDB 持久化檔案檢測工具和修復工具
redis-sentinel 啟動 redis-sentinel

四、配置 Redis

1、redis 啟動方法

  • 第一種方法:

    # redis-server		# 前臺啟動
    # redis-server &	# 後臺啟動
    複製程式碼
  • 第二種方法:

    修改 redis.conf 配置檔案,從原始碼目錄複製過來修改
    # cp /usr/local/src/redis-4.0.10/redis.conf /usr/local/redis/
    daemonize yes		# 以後臺啟動 redis
    requirepass redis123	# 設定 redis 登陸密碼
    # bind 127.0.0.1		# 註釋此行
    protected-mode no		# 設定為 no
    logfile "/usr/local/redis/logs/redis.log"	# 設定日誌檔案
    dir ./		# 資料目錄路徑
    
    
    啟動服務
    redis-server /usr/local/redis/redis.conf
    複製程式碼

    配置檔案詳解:

    # 指定 redis 只接收來自於該 IP 地址的請求,如果不進行設定,那麼將處理所有請求,在生產環境中最好設定該項,如果只繫結 127.0.0.1 的話,就只有本機可以使用,外部無法訪問;實際上,應該 bind 的是 redis所在伺服器網路卡的 ip。也就是說,如果你的 redis 伺服器有兩張網路卡,一張是 ip-1,另一張是 ip-2,如果你 bind ip-1.那麼只有請求 ip-1 的請求會被受理。
    bind 127.0.0.1 172.18.223.15
    # redis 的一種安全機制,在這個機制開啟情況下 protected-mode yes,如果你 bind 127.0.0.1 客戶端也是連線不上的。
    # 在這個機制關閉情況下 protected-mode no,如果你 bind 127.0.0.1 客戶端也是連線不上的,這個 bind 127.0.0.1 限定了 redis 只是監聽本地迴環的網路請求。
    # 如果是這樣的配置 bind 127.0.0.1 192.168.0.5 和 protected-mode no 區域網可以連線;
    # 如果是這樣的配置 bind 127.0.0.1 192.168.0.5 和 protected-mode yes 配置, 區域網也可以連線;
    # 綜上感覺 protected-mode 引數配置感覺沒什麼用。所以保留為預設配置 protected-mode yes
    protected-mode yes
    # 監聽埠
    port 63790
    # TCP 最大連線數(這裡我改為和 linux 核心相同的值了,如果大型應用需要將核心的值修改到 2048 左右以應對更多的連線),預設是 511。
    # 在 高請求/秒 的環境中,為了避免客戶端連線問題的緩慢,您需要大量的積壓。
    # 請注意,Linux 核心將會悄悄地將其截斷為 /proc/sys/net/core/somaxconn 的值,因此要確保提高somaxconn 和 tcpmaxsynbacklog 的值,以獲得預期的效果。
    tcp-backlog 128
    # 設定最大客戶端連線數
    maxclients 10000
    # 表示客戶端空閒多長時間後關閉連線,如指定 0,表示該超時機制關閉。
    timeout 0
    tcp-keepalive 300
    # 說明 redis 程式是後臺執行還是前臺執行,yes 表示後臺執行,no 表示前臺執行
    daemonize yes
    # 設定訪問 redis 的口令
    requirepass sfm@redis
    supervised no
    pidfile /mydata/redis/6379.pid
    # 指定日誌記錄級別,指定日誌記錄級別,Redis 總共支援四個級別:debug、verbose、notice、warning,預設為 notice
    loglevel notice
    logfile "/mydata/redis/logs/redis.log"
    # redis 資料庫個數(預設 16 個)
    databases 16
    always-show-logo yes
    # 900秒(15分鐘) 內有 1 條資料發生了變化,將資料 dump 到磁碟
    save 900 1
    # 300秒(5分鐘) 內有 10 條資料發生了變化,將資料 dump 到磁碟
    save 300 10
    # 69秒(1分鐘) 內有 10000 條資料發生了變化,將資料 dump 到磁碟
    save 60 10000
    stop-writes-on-bgsave-error yes
    rdbcompression yes
    rdbchecksum yes
    # 設定 RDB 持久化儲存的檔名
    dbfilename 6379.rdb
    # 設定 RDB 持久化儲存的路徑
    dir /mydata/redis/
    slave-serve-stale-data yes
    slave-read-only yes
    repl-diskless-sync no
    repl-diskless-sync-delay 5
    repl-disable-tcp-nodelay no
    slave-priority 100
    maxmemory-policy allkeys-lru
    lazyfree-lazy-eviction no
    lazyfree-lazy-expire no
    lazyfree-lazy-server-del no
    slave-lazy-flush no
    # 啟用 Append Only Mode 持久化檔案
    appendonly yes
    # 設定 AOF 持久化檔名
    appendfilename "6379.aof"
    # fsync 持久化策略
    appendfsync everysec
    # AOF 重寫期間是否禁止 fsync;如果開啟該選項,可以減輕檔案重寫時 CPU 和硬碟的負載(尤其是硬碟),但是可能會丟失 AOF 重寫期間的資料;需要在負載和安全性之間進行平衡
    no-appendfsync-on-rewrite no
    # AOF 檔案重寫觸發條件之一
    auto-aof-rewrite-percentage 100
    # AOF 檔案重寫觸發條件之一
    auto-aof-rewrite-min-size 64mb
    # 如果 AOF 檔案結尾損壞,Redis 啟動時是否仍載入 AOF 檔案
    aof-load-truncated yes
    aof-use-rdb-preamble no
    lua-time-limit 5000
    slowlog-log-slower-than 10000
    slowlog-max-len 128
    latency-monitor-threshold 0
    notify-keyspace-events ""
    hash-max-ziplist-entries 512
    hash-max-ziplist-value 64
    list-max-ziplist-size -2
    list-compress-depth 0
    set-max-intset-entries 512
    zset-max-ziplist-entries 128
    zset-max-ziplist-value 64
    hll-sparse-max-bytes 3000
    activerehashing yes
    client-output-buffer-limit normal 0 0 0
    client-output-buffer-limit slave 256mb 64mb 60
    client-output-buffer-limit pubsub 32mb 8mb 60
    hz 10
    aof-rewrite-incremental-fsync yes
    複製程式碼
  • 以 systemd 的方法來管理 redis 服務

    新建 redis 使用者,不要以 root 使用者啟動 redis

    # useradd -M -s /sbin/nologin redis
    複製程式碼

    在 /usr/lib/systemd/system/ 目錄下新建 redis.service 檔案,檔案內容如下:

    [Unit]
    Description=Redis-4.0.10
    # Documentation=man:mysqld(8)
    # Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
    After=network.target
    After=syslog.target
    
    [Install]
    WantedBy=multi-user.target
    
    [Service]
    User=redis
    Group=redis
    Type=forking
    Restart=always
    ExecStart=/usr/local/redis-4.0.10/bin/redis-server /usr/local/redis-4.0.10/redis.conf
    ExecStop=/usr/local/redis-4.0.10/bin/redis-cli -h 127.0.0.1 -p 6379 -a redis123 shutdown
    LimitNOFILE=65535
    複製程式碼

    這樣就可以使用 systemctl start | stop | status | restart redis.service 命令來管理 redis 服務了

    注意:redis 使用的 data 目錄及 logs 目錄需要給 redis 許可權

2、持久化設定

redis 的預設持久化策略是快照的方式

  • RDB 持久化配置

    Redis 會將資料集的快照 dump 到 dump.rdb 檔案中。此外,我們也可以通過配置檔案來修改 Redis 伺服器 dump 快照的頻率,在開啟 redis.conf 檔案之後,我們搜尋 save,可以看到下面的配置資訊:

    save 900 1		# 在 900 秒(15分鐘)之後,如果至少有 1 個 key 發生變化,則 dump 記憶體快照。
    save 300 10		# 在 300 秒(5分鐘)之後,如果至少有 10 個 key 發生變化,則 dump 記憶體快照。
    save 60 10000	# 在 60 秒(1分鐘)之後,如果至少有 10000 個 key 發生變化,則 dump 記憶體快照。
    複製程式碼

    預設 RDB 方式儲存的是dump.rdb 檔案,恢復也是識別的是dump.rdb

    儲存目錄也在配置檔案中可配置,預設當前位置

    # Note that you must specify a directory here, not a file name.
    dir ./		# 預設 dump.rdb 檔案儲存位置
    複製程式碼
  • AOF 方式持久化配置

    如果把

    appendonly no 修改為
    appendonly yes	
    複製程式碼

    則表示啟用 AOF 方式持久化(這種機制安全,儲存的資料最為健全,但要犧牲部分效能)

    配置生成的 aof 檔名

    appendfilename "appendonly.aof"
    
    appendfsync everysec | always | no
    # no 表示不執行 fsync,由作業系統保證資料同步到磁碟,速度最快。
    # always 表示每次寫入都執行 fsync,以保證資料同步到磁碟。
    # everysec 表示每秒執行一次 fsync,可能會導致丟失這 1 秒的資料。
    
    appendfsync no
    複製程式碼

五、管理

1、互動方式

可以使用兩種方式連線 redis 伺服器。

  • 第一種:互動式方式

    # redis-cli -h {host} -p {port}      ## 以這種方式連線,然後所有的操作都是在互動的方式實現,不需要再執行 redis-cli 了。
    複製程式碼
  • 第二種:命令方式

    # redis-cli -h {host} -p {port} {command}   ## 直接得到命令的返回結果。
    複製程式碼

    命令方式常用引數:

    引數 作用 用例
    -r 代表將命令重複執行多次 $ redis-cli -r 3 ping # ping 命令可用於檢測 redis 例項是否存活,如果存活則顯示 PONG
    -i 每隔幾秒(如果想用 ms,如 10ms 則寫成 0.01)執行一次命令,必須與 -r 一起使用 $ redis-cli -r 10 -i 1 info | grep used_memory_human # 每隔 1 秒輸出記憶體的使用量,一共輸出 10 次。
    -x 代表從標準輸入讀取資料作為該命令的最後一個引數。 $ echo "world" |redis-cli -x set hello
    -c 連線叢集結點時使用,此選項可防止 moved 和 ask 異常。
    -a 如配置了密碼,可用 a 選項。 $ redis-cli -a 123456 -r 10 -i 1 info | grep used_memory_human
    --rdb 會請求 redis 例項生成併傳送 RDB 持久化檔案,儲存在本地。可做定期備份。

2、常用命令

1、檢視伺服器的資訊和統計:info
2. 刪除所有資料庫內容:flushall
3. 重新整理資料庫:flushdb
4. 看所有鍵:KEYS *,使用 select num 可以檢視鍵值資料。
5. 設定變數:set test "who am i"
6. config set dir dirpath 設定路徑等配置
7. config get dir/dbfilename 獲取路徑及資料庫配置資訊
8. save 儲存
9. get 變數,檢視變數名稱
10. time:返回當前伺服器時間
11. client list: 返回所有連線到伺服器的客戶端資訊和統計資料  參見http://redisdoc.com/server/client_list.html
12. client kill ip:port:關閉地址為 ip:port 的客戶端
13. save:將資料同步儲存到磁碟
14. bgsave:將資料非同步儲存到磁碟
15. lastsave:返回上次成功將資料儲存到磁碟的Unix時戳
16. shundown:將資料同步儲存到磁碟,然後關閉服務
17. config resetstat:重置info命令中的某些統計資料
18. config get:獲取配置檔案資訊
19. config set:動態地調整 Redis 伺服器的配置(configuration)而無須重啟,可以修改的配置引數可以使用命令 CONFIG GET * 來列出
20. config rewrite:Redis 伺服器時所指定的 redis.conf 檔案進行改寫
21. monitor:實時轉儲收到的請求   
22. slaveof:改變複製策略設定
複製程式碼

Redis 主從複製配置

1、master 的 redis 配置檔案只需要設定好 bind、requirepass 等即可

2、slave 的 redis 配置檔案中新增以下行:

slaveof x.x.x.x 6379    # Master 的 IP 地址及埠號
masterauth redis123     # 如果 Master 上設定有密碼的話,這裡需要設定跟 Master 上一樣的密碼
或者動態修改設定:
通過 redis-cli 連線到從節點伺服器,執行下面命令即可。
slaveof x.x.x.x 6379
複製程式碼

相關文章