Redis 配置文件說明

Redis 配置文件

當配置中需要配置內存大小時,可以使用 1k, 5GB, 4M 等類似的格式,其轉換方式如下(不區分大小寫)
1k => 1000 bytes
1kb => 1024 bytes
1m => 1000000 bytes
1mb => 1024*1024 bytes
1g => 1000000000 bytes
1gb => 1024*1024*1024 bytes

內存配置大小寫是一樣的.比如 1gb 1Gb 1GB 1gB

daemonize no 默認情況下,redis不是在后臺運行的,如果需要在后臺運行,把該項的值更改為yes
daemonize yes

當redis在后臺運行的時候,Redis默認會把pid文件放在/var/run/redis.pid,你可以配置到其他地址。
當運行多個redis服務時,需要指定不同的pid文件和端口
pidfile /var/run/redis.pid

指定redis運行的端口,默認是6379
port 6379

指定redis只接收來自于該IP地址的請求,如果不進行設置,那么將處理所有請求,在生產環境中最好設置該項
bind 127.0.0.1

Specify the path for the unix socket that will be used to listen for incoming connections. There is no default, so Redis will not listen on a unix socket when not specified.
unixsocket /tmp/redis.sock
unixsocketperm 755

設置客戶端連接時的超時時間,單位為秒。當客戶端在這段時間內沒有發出任何指令,那么關閉該連接,0是關閉此設置
timeout 0

指定日志記錄級別,Redis總共支持四個級別:debug、verbose、notice、warning,默認為verbose
debug 記錄很多信息,用于開發和測試;
varbose 有用的信息,不像debug會記錄那么多;
notice 普通的verbose,常用于生產環境;
warning 只有非常重要或者嚴重的信息會記錄到日志。
loglevel debug

配置log文件地址
默認值為stdout,標準輸出,若后臺模式會輸出到/dev/null
logfile stdout
logfile /var/log/redis/redis.log

To enable logging to the system logger, just set 'syslog-enabled' to yes, and optionally update the other syslog parameters to suit your needs.
syslog-enabled no

Specify the syslog identity.
syslog-ident redis

Specify the syslog facility. Must be USER or between LOCAL0-LOCAL7.
syslog-facility local0

可用數據庫數,默認值為16,默認數據庫為0,數據庫范圍在0-(database-1)之間
databases 16

快照

保存數據到磁盤,格式如下: save
<seconds> <changes>

指出在多長時間內,有多少次更新操作,就將數據同步到數據文件rdb。
相當于條件觸發抓取快照,這個可以多個條件配合
比如默認配置文件中的設置,就設置了三個條件
save 900 1 900秒內至少有1個key被改變
save 300 10 300秒內至少有300個key被改變
save 60 10000 60秒內至少有10000個key被改變

save 900 1
save 300 10
save 60 10000

存儲至本地數據庫時(持久化到rdb文件)是否壓縮數據,默認為yes
rdbcompression yes

本地持久化數據庫文件名,默認值為dump.rdb
dbfilename dump.rdb

工作目錄,數據庫鏡像備份的文件放置的路徑。
這里的路徑跟文件名要分開配置是因為redis在進行備份時,先會將當前數據庫的狀態寫入到一個臨時文件中,等備份完成時,再把該臨時文件替換為上面所指定的文件,而這里的臨時文件和上面所配置的備份文件都會放在這個指定的路徑當中。

AOF文件也會存放在這個目錄下面
注意這里必須制定一個目錄而不是文件
dir ./

復制

主從復制,設置該數據庫為其他數據庫的從數據庫.
當本機為slave服務時,設置master服務的IP地址及端口,在Redis啟動時,它會自動從master進行數據同步 slaveof
<masterip> <masterport>

當master服務設置了密碼保護時(用requirepass制定的密碼),slave服務連接master的密碼
masterauth <master-password>

當從庫同主機失去連接或者復制正在進行,從機庫有兩種運行方式:
1、如果slave-serve-stale-data設置為“yes”(缺省值),則從設備仍然會回應客戶端請求,可能是數據已過時,或者如果這是第一次同步,數據集可能只是空的。
2、如果slave-serve-stale-data設置為“no”,那么從設備將回復一個帶有主進程的錯誤SYNC“到所有類型的命令,但是返回到INFO和SLAVEOF。
slave-serve-stale-data yes

從庫會按照一個時間間隔向主庫發送PING.可以通過repl-ping-slave-period設置這個時間間隔,默認是10秒
repl-ping-slave-period 10

repl-timeout 設置主庫批量數據傳輸時間或者ping回復時間間隔,默認值是60秒,一定要確保repl-timeout大于repl-ping-slave-period
repl-timeout 60

安全

設置客戶端連接后進行任何其他指定前需要使用的密碼。
警告:因為redis速度相當快,所以在一臺比較好的服務器下,一個外部的用戶可以在一秒鐘進行150K次的密碼嘗試,這意味著你需要指定非常非常強大的密碼來防止暴力破解
requirepass foobared

命令重命名:
在一個共享環境下可以重命名相對危險的命令。比如把CONFIG重名為一個不容易猜測的字符。
舉例:
rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52

如果想刪除一個命令,直接把它重命名為一個空字符""即可,如下:
rename-command CONFIG ""

約束

設置同一時間最大客戶端連接數,默認無限制,Redis可以同時打開的客戶端連接數為Redis進程可以打開的最大文件描述符數,如果設置 maxclients 0 表示不作限制。
當客戶端連接數到達限制時,Redis會關閉新的連接并向客戶端返回max number of clients reached錯誤信息。
maxclients 128

指定Redis最大內存限制,Redis在啟動時會把數據加載到內存中,達到最大內存后,Redis會先嘗試清除已到期或即將到期的Key,Redis同時也會移除空的list對象
當此方法處理后,仍然到達最大內存設置,將無法再進行寫入操作,但仍然可以進行讀取操作
注意:Redis新的vm機制,會把Key存放內存,Value會存放在swap區
maxmemory的設置比較適合于把redis當作于類似memcached的緩存來使用,而不適合當做一個真實的DB。
當把Redis當做一個真實的數據庫使用的時候,內存使用將是一個很大的開銷
maxmemory <bytes>

當內存達到最大值的時候Redis會選擇刪除哪些數據?有五種方式可供選擇:
volatile-lru -> 利用LRU算法移除設置過過期時間的key (LRU:最近使用 Least Recently Used )
allkeys-lru -> 利用LRU算法移除任何key
volatile-random -> 移除設置過過期時間的隨機key
allkeys-random -> 隨機刪除一個key
volatile-ttl -> 移除即將過期的key(minor TTL)
noeviction -> 不移除任何可以,只是返回一個寫錯誤

注意:對于上面的策略,如果沒有合適的key可以移除,當寫的時候Redis會返回一個錯誤

寫命令包括: set setnx setex append incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby getset mset msetnx exec sort
默認是:
maxmemory-policy noeviction

LRU 和 minimal TTL 算法都不是精準的算法,但是相對精確的算法(為了節省內存),隨意你可以選擇樣本大小進行檢測。
Redis默認的灰選擇3個樣本進行檢測,你可以通過maxmemory-samples進行設置
maxmemory-samples 3

AOF

默認情況下,redis會在后臺異步的把數據庫鏡像備份到磁盤,但是該備份是非常耗時的,而且備份也不能很頻繁,如果發生諸如拉閘限電、拔插頭等狀況,那么將造成比較大范圍的數據丟失。

所以redis提供了另外一種更加高效的數據庫備份及災難恢復方式。
開啟append only模式之后,redis會把所接收到的每一次寫操作請求都追加到appendonly.aof文件中,當redis重新啟動時,會從該文件恢復出之前的狀態。

但是這樣會造成appendonly.aof文件過大,所以redis還支持了BGREWRITEAOF指令,對appendonly.aof 進行重新整理。

你可以同時開啟asynchronous dumps 和 AOF
appendonly no

AOF文件名稱 (默認: "appendonly.aof")
appendfilename appendonly.aof

Redis支持三種同步AOF文件的策略:
no: 不進行同步,系統去操作 . Faster.
always: always表示每次有寫操作都進行同步. Slow, Safest.
everysec: 表示對寫操作進行累積,每秒同步一次.

Compromise.
默認是"everysec",按照速度和安全折中這是最好的。
如果想讓Redis能更高效的運行,你也可以設置為"no",讓操作系統決定什么時候去執行
或者相反想讓數據更安全你也可以設置為"always"
如果不確定就用 "everysec".

appendfsync always
appendfsync everysec
appendfsync no

AOF策略設置為always或者everysec時,后臺處理進程(后臺保存或者AOF日志重寫)會執行大量的I/O操作,在某些Linux配置中會阻止過長的fsync()請求。注意現在沒有任何修復,即使fsync在另外一個線程進行處理為了減緩這個問題,可以設置下面這個參數no-appendfsync-on-rewrite

This means that while another child is saving the durability of Redis is the same as "appendfsync none", that in pratical terms means that it is possible to lost up to 30 seconds of log in the worst scenario (with the default Linux settings).
If you have latency problems turn this to "yes". Otherwise leave it as "no" that is the safest pick from the point of view of durability.
no-appendfsync-on-rewrite no

Automatic rewrite of the append only file.
AOF 自動重寫
當AOF文件增長到一定大小的時候Redis能夠調用 BGREWRITEAOF 對日志文件進行重寫它是這樣工作的:Redis會記住上次進行些日志后文件的大小(如果從開機以來還沒進行過重寫,那日子大小在開機的時候確定)基礎大小會同現在的大小進行比較。如果現在的大小比基礎大小大制定的百分比,重寫功能將啟動同時需要指定一個最小大小用于AOF重寫,這個用于阻止即使文件很小但是增長幅度很大也去重寫AOF文件的情況設置 percentage為0就關閉這個特性

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

SLOW LOG

Redis Slow Log 記錄超過特定執行時間的命令。執行時間不包括I/O計算比如連接客戶端,返回結果等,只是命令執行時間可以通過兩個參數設置slow log:一個是告訴Redis執行超過多少時間被記錄的參數slowlog-log-slower-than(微妙),另一個是slow log 的長度。當一個新命令被記錄的時候最早的命令將被從隊列中移除,下面的時間以微妙微單位,因此1000000代表一分鐘。
注意制定一個負數將關閉慢日志,而設置為0將強制每個命令都會記錄
slowlog-log-slower-than 10000

對日志長度沒有限制,只是要注意它會消耗內存,可以通過 SLOWLOG RESET回收被慢日志消耗的內存
slowlog-max-len 1024

VM

WARNING! Virtual Memory is deprecated in Redis 2.4 The use of Virtual Memory is strongly discouraged.

Virtual Memory allows Redis to work with datasets bigger than the actual amount of RAM needed to hold the whole dataset in memory.
In order to do so very used keys are taken in memory while the other keys are swapped into a swap file, similarly to what operating systems do with memory pages.
To enable VM just set 'vm-enabled' to yes, and set the following three VM parameters accordingly to your needs.

vm-enabled no
vm-enabled yes

This is the path of the Redis swap file. As you can guess, swap files can't be shared by different Redis instances, so make sure to use a swap file for every redis process you are running. Redis will complain if
the swap file is already in use.
The best kind of storage for the Redis swap file (that's accessed at random) is a Solid State Disk (SSD).
*** WARNING *** if you are using a shared hosting the default of putting the swap file under /tmp is not secure. Create a dir with access granted only to Redis user and configure Redis to create the swap file there.
vm-swap-file /tmp/redis.swap

vm-max-memory configures the VM to use at max the specified amount of RAM. Everything that deos not fit will be swapped on disk if possible, that is, if there is still enough contiguous space in the swap file.

With vm-max-memory 0 the system will swap everything it can. Not a good default, just specify the max amount of RAM you can in bytes, but it's better to leave some margin. For instance specify an amount of RAM that's more or less between 60 and 80% of your free RAM.
vm-max-memory 0

Redis swap files is split into pages. An object can be saved using multiple contiguous pages, but pages can't be shared between different objects. So if your page is too big, small objects swapped out on disk will waste a lot of space. If you page is too small, there is less space in the swap file (assuming you configured the same number of total swap file pages).
If you use a lot of small objects, use a page size of 64 or 32 bytes.
If you use a lot of big objects, use a bigger page size.
If unsure, use the default :)
vm-page-size 32

Number of total memory pages in the swap file. Given that the page table (a bitmap of free/used pages) is taken in memory, every 8 pages on disk will consume 1 byte of RAM.
The total swap size is vm-page-size * vm-pages With the default of 32-bytes memory pages and 134217728 pages Redis will use a 4 GB swap file, that will use 16 MB of RAM for the page table.
It's better to use the smallest acceptable value for your application, but the default is large in order to work in most conditions.
vm-pages 134217728

Max number of VM I/O threads running at the same time. This threads are used to read/write data from/to swap file, since they also encode and decode objects from disk to memory or the reverse, a bigger number of
threads can help with big objects even if they can't help with I/O itself as the physical device may not be able to couple with many reads/writes operations at the same time. The special value of 0 turn off threaded I/O and enables the blocking Virtual Memory implementation.
vm-max-threads 4

ADVANCED CONFIG

當hash中包含超過指定元素個數并且最大的元素沒有超過臨界時,hash將以一種特殊的編碼方式(大大減少內存使用)來存儲,這里可以設置這兩個臨界值
Redis Hash對應Value內部實際就是一個HashMap,實際這里會有2種不同實現, 這個Hash的成員比較少時Redis為了節省內存會采用類似一維數組的方式來緊湊存儲,而不會采用真正的HashMap結構,對應的value redisObject的encoding為zipmap, 當成員數量增大時會自動轉成真正的HashMap,此時encoding為ht。
hash-max-zipmap-entries 512
hash-max-zipmap-value 64

list數據類型多少節點以下會采用去指針的緊湊存儲格式。
list數據類型節點值大小小于多少字節會采用緊湊存儲格式。
list-max-ziplist-entries 512
list-max-ziplist-value 64

set數據類型內部數據如果全部是數值型,且包含多少節點以下會采用緊湊格式存儲。
set-max-intset-entries 512

zsort數據類型多少節點以下會采用去指針的緊湊存儲格式。
zsort數據類型節點值大小小于多少字節會采用緊湊存儲格式。
zset-max-ziplist-entries 128
zset-max-ziplist-value 64

Redis將在每100毫秒時使用1毫秒的CPU時間來對redis的hash表進行重新hash,可以降低內存的使用當你的使用場景中,有非常嚴格的實時性需要,不能夠接受Redis時不時的對請求有2毫秒的延遲的話,把這項配置為no。如果沒有這么嚴格的實時性要求,可以設置為yes,以便能夠盡可能快的釋放內存
activerehashing yes

INCLUDES

指定包含其它的配置文件,可以在同一主機上多個Redis實例之間使用同一份配置文件,而同時各個實例又擁有自己的特定配置文件
include /path/to/local.conf
include /path/to/other.conf

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容