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>
在大量客戶端連線的情況下,應該提高該值,以免客戶端連線慢。
但該值受系統核心引數的限制,包括 somaxconn
和 tcp_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