1. 程式人生 > >Redis 伺服器常用配置引數

Redis 伺服器常用配置引數

恰當地設定 Redis 伺服器引數,才能保證伺服器正確、高效能、安全地運轉。通過這些引數,我們還能瞭解 Redis 伺服器內部運轉的機制和細節。同時,主從複製和 Redis 叢集的部署也要掌握相關配置項。

作者:王克鋒
出處:https://kefeng.wang/2017/08/12/redis-config/
版權:自由轉載-非商用-非衍生-保持署名,轉載請標明作者和出處。

1 配置概述

1.1 配置項格式

格式:keyword argument1 argument2 ... argumentN
例子:slaveof 127.0.0.1 6379
一個引數名稱,後跟1至多個引數值,名稱與各值之間以空格分隔。
如果單個值內包含空格,該值必須以雙引號界定。

1.2 容量值的形式

有三種格式,單位裡的字母大小寫無關,比如 kb/kB/Kb/KB 是一樣的。

  • 沒有單位:單位為位元組,比如 4096 表示 4096 位元組
  • 無b單位:1k=1000 位元組,1m=1000x1000 位元組,1g=1000x1000x1000 位元組
  • 帶b單位:1kb=1024 位元組,1mb=1024x1024 位元組,1gb=1024x1024x1024 位元組

1.3 引數傳遞方式

服務啟動命令列:redis-server redis.conf --slaveof localhost 6379

  • redis-server 可以無引數啟動,此時使用內建的預設配置(建議僅實驗時這樣用);
  • 指定配置檔案(可選,建議指定):必須是 redis-server
    之後的首個引數;
  • 指定配置引數(可選):引數名稱和取值與配置檔案內部一致,只是關鍵字前加字首(–),Redis 會在記憶體中生成臨時配置檔案。

1.4 伺服器執行時更改配置

命令 CONFIG GET: 查詢配置項及其值(可使用萬用字元);
命令 CONFIG SET: 修改配置項(伺服器不重啟的情況下立即生效)。

127.0.0.1:6379> config get max* ## 查詢多個配置項
127.0.0.1:6379> config get save ## 查詢單個配置項
127.0.0.1:6379> config set save "900 1 300 10 60 10000"
## 修改配置

2 配置指令

2.1 include 指令

redis.conf 檔案中,可以使用 include 指令引入外部配置檔案。
比如,多個 Redis 例項中,把相同的配置提取出來儲存成檔案,各個例項引入此例項,更容易維護配置檔案。

include /path/common1.conf
include /path/common2.conf
include /path/common3.conf

2.2 loadmodule 指令

loadmodule /path/module1.so
loadmodule /path/module2.so
loadmodule /path/module3.so

3 網路相關引數

3.1 服務繫結的地址

格式:bind <ip> <ip> ...

  • bind 0.0.0.0(預設): 允許整個網際網路上的客戶端連線,最不安全,應當避免;
  • bind 127.0.0.1: 只允許本機客戶端連線,最安全;
  • bind 127.0.0.1 192.168.1.102: 只允許本機和區域網客戶端連線。

注意:切莫設定為bind 192.168.1.102這種形式,否則本機無法連線,也無法啟停 Redis 服務。

3.2 服務繫結的埠

格式:bind <port>,預設值為 6379
比如:bind 6379

3.3 保護模式

格式:protected-mode yes|no,建議使用預設值 yes
當沒有指定 bind(相當於 bind 0.0.0.0) 和 requirepass 時:
如果開啟保護模式(預設值),則伺服器強制當作配置了 bind 127.0.0.1
如果關閉保護模式,伺服器當作配置了 bind 0.0.0.0,接受所有外部主機的連線。除非確認無風險,再關閉保護模式。

3.4 最大客戶端數

格式:maxclients 10000
同一時刻最多可以接納的客戶端數目(Redis 服務要佔用其中的大約 32 個檔案描述符)。
如果客戶端連線數達到該上限,新來客戶端將被告知“已達到最大客戶端連線數”。

3.5 TCP連線最大積壓數

格式:tcp-backlog <num>
在大量客戶端連線的情況下,應該提高該值,以免客戶端連線慢。
但該值受系統核心引數的限制,包括 somaxconntcp_max_syn_backlog

3.6 客戶端連線空閒超時時長

格式:timeout <seconds>,建議使用 0
當連線的客戶端連續空閒指定時間後,就斷開該連線。指定值為0時禁用超時機制。

4 常規引數

4.1 守護程序模式

格式:daemonize yes|no,建議使用 yes
設定是否以守護程序啟動服務,守護程序會生成 PID 檔案 /var/run/redis_6379.pid

4.2 指定 PID 檔案

格式:pidfile /var/run/redis_6379.pid
啟用守護程序模式時,會生成該檔案。

4.3 指定日誌檔案

格式:logfile /var/log/redis_6379.log
指定儲存日誌的檔案。

4.4 指定日誌級別

格式:loglevel debug|verbose|notice|warning,推薦使用 notice
通常設定為 notice,需要更詳細日誌時可改為 verbose 甚至 debug。

4.5 指定資料庫個數

格式:databases 16
表示該 Redis 例項建立 16 個數據庫,編號分別是 0~15。
客戶端連線後,當前資料庫預設切換至 0,可以用 SELECT n 切換至其他資料庫。

4.6 啟動日誌中是否顯示 redis 徽標

格式:always-show-logo yes|no
除了耍酷,沒啥用,建議關閉(no)。

5 快照相關引數(磁碟持久化)

5.1 快照生成時機

格式:save <seconds> <changes>,可設定為多條。
指定時間間隔後,如果資料變化達到指定次數,則匯出至快照檔案。
如果沒有指定任何 save 行,則徹底禁止磁碟持久化行為。
如果指定 save "",則相當於清除前面指定的所有 save 行。

5.2 快照檔案目錄

格式:dir /var/lib/redis/6379
指定儲存快照檔案的目錄(不包括檔名稱)。
同時,AOF(Append Only File) 檔案也會生成到該目錄。

5.3 快照檔名稱

格式:dbfilename dump.rdb
指定儲存快照檔案的名稱(不包括檔案目錄)。

5.4 快照中字串值是否壓縮

格式:rdbcompression yes,建議 yes
以 CPU 換儲存空間。

5.5 生成快照失敗時是否禁止修改

格式:stop-writes-on-bgsave-error yes|no
在啟用快照的情況下(指定了有效的 save),如果遇到某次快照生成失敗(比如目錄無許可權),之後的資料修改就會被禁止。這有利於使用者及早發現快照儲存失敗,以免更多的資料不能持久化而丟失的風險。當快照恢復正常後,資料的修改會自動開啟。
如果你有其他的持久化監控,你可以關閉本機制。

5.6 快照中字串值是否壓縮

格式:rdbcompression yes,建議 yes
以 CPU 換儲存空間。

5.7 快照校驗開關

格式:rdbchecksum yes
如果開啟,校驗和會被放在檔案尾部。這將使快照資料更可靠,但會在快照生成與載入時降低大約 10% 的效能,追求高效能時可關閉該功能。

6 主從同步相關引數

6.1 指定主庫地址

格式:slaveof <masterip> <masterport>
當前 Redis 例項作為從庫(副本),指定用來複制資料的主庫的 IP 和埠。

6.2 指定主庫密碼

格式:masterauth <master-password>
如果主庫設定了連線密碼(引數 requirepass),從庫連線主庫後必須指定密碼,才能繼續。

6.3 從庫是否答覆陳舊資料

格式:slave-serve-stale-data yes|no
當從庫與主庫連線中斷,或者主從同步正在進行時,如果有客戶端向從庫讀取資料:

  • yes: 從庫答覆現有資料,可能是陳舊資料(初始從未修改的值則為空值)
  • no: 從庫報錯“正在從主庫同步”

6.4 從庫是否只許讀取

格式:slave-read-only yes|no,預設為 yes
設定從庫只許讀取。

6.5 無盤同步(現階段是實驗性的)

格式:repl-diskless-sync no
新連線(包括連線中斷後重連)的從庫不可採用增量同步,只能採用全量同步(RDB檔案由主庫傳給從庫),有兩種傳遞方式:

  • 磁碟形式:主庫建立子程序,子程序寫入磁碟 RDB 檔案,再由父程序立即傳給從庫;
  • 無磁碟形式:主庫建立子程序,子程序把 RDB 檔案直接寫入從庫的 SOCKET 連線。

6.6 更多引數

  • repl-ping-slave-period 10:從庫向主庫PING的間隔(秒);
  • repl-timeout 60:從庫向主庫PING的超時時長,應大於 repl-ping-slave-period
  • repl-disable-tcp-nodelay no:是否關閉 TCP_NODELAY 選項
  • repl-backlog-size 1mb
  • repl-backlog-ttl 3600
  • slave-priority 100
  • min-slaves-to-write 3
  • min-slaves-max-lag 10
  • slave-announce-ip 5.5.5.5
  • slave-announce-port 1234

7 安全相關引數

7.1 客戶端連線密碼

格式:requirepass passwd
當設定為requirepass ""時,表示不要求客戶端連線後指定密碼。
客戶端連線後,執行其他命令之前,必須用命令 AUTH passwd 認證。
注意:由於 Redis 響應速度極快(每秒可達 15 萬次),密碼應設定的足夠複雜強壯,以防被暴力破解。

7.2 命令改名

格式:rename-command <command-name-old> <command-name-new>
對於一些敏感的命令,不希望任意客戶端都可以執行,可以改為奇特的名字,新名字只告知特定的客戶端來執行。
可以是命令改名:rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
可以是禁用命令:rename-command CONFIG "",即新名稱為空串。
需要注意的是,命令改名儲存至 AOF 檔案或傳輸至從庫,可能導致問題。

8 記憶體管理相關引數

8.1 Redis 記憶體使用上限

格式:maxmemory <bytes>
當記憶體達到上限時,Redis 將使用指定的策略清除其他鍵值。
如果 Redis 無法清除(或者策略不允許清除鍵值),將對佔用記憶體的命令報錯,但對只讀的命令正常服務。

8.2 記憶體達到上限時的鍵值清除策略

格式:maxmemory-policy noeviction
下面幾種策略中,LRU(Least Recently Used)表示最近最少使用,LFU(Least Frequently Used)表示最不經常使用。

  • volatile-lru: 針對到期的鍵值,採取 LRU 策略;
  • volatile-lfu: 針對到期的鍵值,採取 LFU 策略;
  • volatile-random: 針對到期的鍵值,採取隨機策略;
  • allkeys-lru: 針對所有鍵值,採取 LRU 策略;
  • allkeys-lfu: 針對所有鍵值,採取 LFU 策略;
  • allkeys-random: 針對所有鍵值,採取隨機策略;
  • volatile-ttl: Remove the key with the nearest expire time (minor TTL)
  • noeviction: 不清除任何內容,只是在寫入操作時報錯。

8.3 清除鍵值時取樣數量

格式:maxmemory-samples 5
LRU/LFU 等策略,是從指定個數(而不是全部)的鍵值中檢查並挑選一個。
取樣越多,就越精確,但效能會下降,所以要平衡該數值。

8.4 懶釋放相關引數

  • lazyfree-lazy-eviction no
  • lazyfree-lazy-expire no
  • lazyfree-lazy-server-del no
  • slave-lazy-flush no

9 慢日誌相關引數

與 MySQL 類似,當 Redis 命令執行時間(不包括I/O和網路耗時)超過指定時長時,會被記入慢日誌佇列(記憶體)中。

  • slowlog-log-slower-than 10000:執行時長達到該數值時(微秒,1s/1000000)就存入慢日誌佇列。0表示所有命令都當作慢操作,負數表示所有命令都不當作慢操作;
  • slowlog-max-len 128: 慢日誌佇列的長度(記憶體中),只能儲存最近這麼多條慢操作,過多時挑最早的擠出去。

慢操作相關命令:

  • SLOWLOG LEN: 查詢當前記錄的慢操作條數;
  • SLOWLOG GET: 檢視當前記錄的慢操作詳情,每個慢操作都記錄了執行時間點、耗時、命令及其引數;
  • SLOWLOG RESET: 清空當前記錄的慢操作。

10 更多引數

10.1 AOF 相關引數

預設情況下,Redis 採取非同步策略生成資料快照檔案,這在 Redis 出現異常或斷電時,會導致上次快照以來的寫操作丟失。
AOF(Append Only File)則更實時地將寫操作資料記入 AOF 檔案,減少資料丟失的風險。
AOF 可以和 RDB 同時啟用。

  • appendonly no: AOF 的總開關
  • appendfilename "appendonly.aof": AOF 檔名稱,而 AOF 的路徑與 RDB 路徑相同;
  • appendfsync everysec|always|no: 指定作業系統 flush 至磁碟檔案的策略,每秒、實時、OS自己定;
  • no-appendfsync-on-rewrite no: 當 RDB 正在生成時,暫不進入 AOF 操作;
  • auto-aof-rewrite-percentage 100
  • auto-aof-rewrite-min-size 64mb
  • aof-load-truncated yes
  • aof-use-rdb-preamble no

10.2 事件通知相關引數

相關資料:notifications
Redis 具有釋出/訂閱機制,當某個鍵值產生事件時,訂閱者將會收到通知。
格式:notify-keyspace-events <eventFlags>
每類事件用一個字元表示,<eventFlags> 是這樣事件標識的序列,指定空串表示不關注任何事件。

10.3 碎片整理引數(實驗性)

與作業系統磁碟碎片類似,Redis 反覆增刪鍵值之後,記憶體中會有大量碎片,影響之後申請大塊連續的記憶體,需要在碎片達到一定程度時整理碎片。

  • activedefrag no|yes:預設未啟用
  • active-defrag-ignore-bytes 100mb
  • active-defrag-threshold-lower 10
  • active-defrag-threshold-upper 100
  • active-defrag-cycle-min 25
  • active-defrag-cycle-max 75

10.4 叢集相關引數(實驗性)

Redis Cluster 是穩定的,但需要更多的生產環境去驗證。

  • cluster-enabled no|yes: 普通 Redis 節點不能作為叢集節點,除非打開了本開關;
  • cluster-config-file nodes-6379.conf: 叢集節點的配置檔案,由節點自動生成;
  • cluster-node-timeout 15000
  • cluster-slave-validity-factor 10
  • cluster-migration-barrier 1
  • cluster-require-full-coverage yes

10.5 叢集 DOCKER/NAT 相關引數

  • cluster-announce-ip 10.1.1.5
  • cluster-announce-port 6379
  • cluster-announce-bus-port 6380

10.6 高階配置引數

  • 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
  • client-query-buffer-limit 1gb
  • proto-max-bulk-len 512mb
  • aof-rewrite-incremental-fsync yes
  • lfu-log-factor 10
  • lfu-decay-time 1

相關推薦

Redis 伺服器常用配置引數

恰當地設定 Redis 伺服器引數,才能保證伺服器正確、高效能、安全地運轉。通過這些引數,我們還能瞭解 Redis 伺服器內部運轉的機制和細節。同時,主從複製和 Redis 叢集的部署也要掌握相關配置項。 作者:王克鋒 出處:https://kefeng

jvm 常用配置引數

-verbose:gc 列印 GC 的簡要資訊 -XX:+printGC 列印 GC 的簡要資訊 [GC (Allocation Failure) 6036K->1672K(19968K), 0.0012595 secs] -XX:+Print

4 Redis 配置檔案介紹 4-4 Redis常用配置

2016-12-22 14:28:39   該系列文章連結NoSQL 資料庫簡介Redis的安裝及及一些雜項基礎知識Redis 的常用五大資料型別(key,string,hash,list,set,zset)Redis 配置檔案介紹Redis 持久化之RDBRedis 持久化之AOFRedi

4-4 Redis常用配置

2016-12-22 15:30:43 本篇文章屬於Redis 系列第四篇文章:Redis 配置檔案介紹 該系列文章連結 NoSQL 資料庫簡介 Redis的安裝及及一些雜項基礎知識 Redis 的常用五大資料型別(key,string,hash,list,set,zset) Redis 配置

Java Spring Data Redis實戰與配置引數詳解 application.properties

Redis作為開源分散式高併發快取,使用範圍非常廣泛,主流網際網路公司幾乎都在使用。 Java Spring Boot 2.0實戰開發Redis快取可以參考下面的步驟,Redis安裝可以直接使用Linux倉庫,特定版本請使用Wget下載安裝。 Java Spring Boot 2.0連線Redis伺服

[jvm] [面試] jvm 常用配置引數

常見配置彙總 堆設定 -Xms:初始堆大小-Xmx:最大堆大小-XX:NewSize=n:設定年輕代大小-XX:NewRatio=n:設定年輕代和年老代的比值。如:為3,表示年輕代與年老代比值為1:3

hadoop 簡單入門與streaming常用配置引數說明

1. Hadoop包含兩核心部分 hdfs Hadoop distribute file system -- hadoop分散式檔案系統,儲存資料 Namenode、Datanode 常用命令形式:hadoop fs -ls  /  hadoop fs -mkdi

Spring Cloud中eureka.instance為字首的的常用配置引數說明。

引數名 說明 預設值 preferIpAddress 是否優先使用IP地址作為主機名的標識 false leaseRenewalIntervalInS

kafka常用配置引數及解釋

auto.create.topics.enable=true #自動建立topic auto.leader.rebalance.enable=true compression.type=producer controlled.shutdown.enable=true con

啟動伺服器時將配置引數從資料庫中載入到快取

最近做專案,碰到這樣的需求:在伺服器啟動的時候從資料庫讀取引數,將引數儲存到記憶體快取中 由於使用的是spring的自動注入方式,一開始用@component註解在啟動的時候載入查詢配置引數的bean,由於bean中要用到其他bean來查詢,但此時都為null 查詢相關資料,發現@PostC

Redis配置檔案redis.conf中的引數說明

redis.conf 配置項說明如下: 原文連結:菜鳥教程--http://www.runoob.com/redis/redis-conf.html 1. Redis預設不是以守護程序的方式執行,可以通過該配置項修改,使用yes啟用守護程序     d

redis常用配置

daemonize :是否是守護程序 port redis 對外埠號 預設埠是6379 logfile:redis系統日誌 dir:redis工作目錄 進入另外一個目錄 : redis-cli -h 127.0.0.1 -p 6379 set hello world ping get h

阿里雲伺服器ecs配置之安裝redis服務

1.設定Redis的倉庫地址 yum install epel-release 2.安裝redis yum install redis   修改配置檔案vim /etc/redis.conf #監聽所有的IP地址 bind 127.0.0.1註釋掉為#bind

高效能Redis快取伺服器-redis.conf檔案配置埠號、授權IP、Redis後臺啟動、Redis日誌、Redis密碼

Redis的強大功能依賴於Redis的配置檔案,比如密碼驗證,授權機器訪問,埠號配置,叢集配置等,我們可以通過配置檔案非常方便的對Redis進行配置。Redis的核心配置檔案只有一個,就是redis.conf。在發行包中就有提供。在啟動Redis伺服器的時候我們可以通過redis-server

redis常用配置檔案詳解

redis.conf 配置項說明如下: 1. Redis預設不是以守護程序的方式執行,可以通過該配置項修改,使用yes啟用守護程序   daemonize no 2. 當Redis以守護程序方式執行時,Redis預設會把pid寫入/var/run/redis.pid檔案,可以

解決Laravel增加redis伺服器配置不起作用問題

最近工作中有這麼一個需求,需要在建立內容時往redis中儲存一條記錄,博主在本地虛擬機器上搭建了一臺redis伺服器用來測試,結果出現了這個問題 database.php中原本已經有了幾臺redis伺服器,再把我的redis新增進去時使用 Redis::connection(‘updat

redis持久化的RDB、AOF優缺點及常用配置

1、簡介 Redis是一種高階key-value資料庫。它跟memcached類似,不過資料可以持久化,而且支援的資料型別很豐富。有字串,連結串列,集 合和有序集合。支援在伺服器端計算集合的並,交和補集(difference)等,還支援多種排序功能。所以Redis也可以被看成是一個數據結構服務

記錄一次Google雲伺服器Redis的安裝配置

Redis安裝 安裝方式一: 通過yum install -y redis 安裝方式二: 在確認安裝了wget的前提下執行命令wget http://download.redis.io/releases/redis-4.0.11.tar.gz可以將redis-4

給web程式傳遞引數,新增web伺服器配置檔案,新增shell功能----03

傳遞埠號 如果埠號在伺服器裡面寫死的話,那麼別人拿到伺服器,如果寫死的埠被佔用,那麼伺服器就沒用了,所以我們需要傳遞一個活動的埠號,具體方法就是匯入sys模組,用sys.argv來接受,程式碼如下 def main(): """ 控制整體,建立一個web伺服器物件,然

Redis配置引數彙總

==配置檔案全解=== ==基本配置 daemonize no 是否以後臺程序啟動 databases 16 建立database的數量(預設選中的是database 0) save 900 1 #重新整理快照到硬碟中,必須滿足兩者要求才會觸發,即900秒之後至少1個關鍵字發生變化。 s