關注微信公眾號【J
ava之言】,更多干貨文章和學習資料,助你放棄編程之路!
| 序號 | 標題 |
|---|---|
| 01 | Redis入門到超神 - 01 Redis介紹與安裝 |
| 02 | Redis入門到超神 - 02 Redis為什么默認16個資料庫 |
| 03 | Redis入門到超神 - 03 redis.conf組態檔詳解 |
| 04 | Redis入門到超神 - 04 redis的5種資料結構 |
注意,redis組態檔中的單位是不區分大小寫的,比如 1GB 1Gb 1gB 都是一樣的,并且各單位轉換關系如下:
1k => 1000 bytes
1kb => 1024 bytes
1m => 1000000 bytes
1mb => 10241024 bytes
1g => 1000000000 bytes
1gb => 10241024*1024 bytes
Redis的組態檔默認名為 redis.conf ,
如果我們通過客戶端連接上redis,可以通過 CONFIG 命令查看或設定配置項,查看配置項的命令為 CONFIG GET CONFIG_SETTING_NAME ,
# 查看埠號配置項
127.0.0.1:6379> CONFIG GET port
1) "port"
2) "6379"
# 查看密碼配置項
127.0.0.1:6379> CONFIG GET requirepass
1) "requirepass"
2) "123456"
127.0.0.1:6379>
當然,也可以通過CONFIG GET * 查看所有配置項,此只列出部分配置項,
127.0.0.1:6379> CONFIG GET *
1) "dbfilename"
2) "dump.rdb"
3) "requirepass"
4) "123456"
5) "masterauth"
6) ""
7) "cluster-announce-ip"
8) ""
9) "unixsocket"
10) ""
11) "logfile"
12) ""
13) "pidfile"
14) "/var/run/redis_6379.pid"
15) "slave-announce-ip"
16) ""
17) "replica-announce-ip"
18) ""
19) "maxmemory"
20) "0"
21) "proto-max-bulk-len"
22) "536870912"
23) "client-query-buffer-limit"
24) "1073741824"
25) "maxmemory-samples"
26) "5"
....
CONFIG SET 命令修改配置項,語法為 CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE
# 修改日志級別
127.0.0.1:6379> CONFIG SET loglevel "notice"
OK
不過我們一般是打開 redis.conf 組態檔,進行修改,然后再重新啟動redis服務,
################################## INCLUDES 包含 ###################################
# 如果有多個組態檔,可以在此配置引入,
# 引入其它組態檔,如果你有多個redis服務,而有一些配置項是它們公用的,那么你可以將這些公用的配置項寫進一個組態檔common.conf里,
# 然后這些redis服務再include這個組態檔,這些服務自己的配置項則分別寫在自己的組態檔里,
#
# include /path/to/local.conf
# include /path/to/other.conf
################################## MODULES 模塊 #####################################
# 如果我們需要加載其他模塊,可以在此配置
#
# loadmodule /path/to/my_module.so
# loadmodule /path/to/other_module.so
################################## NETWORK 網路 #####################################
# 指定redis只接收哪些IP的請求,如果配置bind 127.0.0.1則只監聽本機的客戶端請求,如果注釋掉不進行設定,則代表接收所有IP的請求,
#
# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1 ::1
# bind 127.0.0.1
# are explicitly listed using the "bind" directive.
# 是否開啟保護模式,默認開啟,要是配置里沒有指定bind和密碼,開啟該引數后,redis只能本地進行訪問,拒絕外部訪問,
# 如果開啟了密碼和bind,可以開啟,否則最好關閉,即設定為no,
#
protected-mode no
# 設定監聽的埠號,默認是6379,如果設定0,則不監聽任何tcp請求,
#
port 6379
# 在高并發環境下,并且客戶端連接請求慢時,你需要設定更高的值,此值代表了TCP連接中已完成佇列(完成三次握手之后)的長度,
# 此值必須會受到Linux系統下/proc/sys/net/core/somaxconn檔案中值的限制,redis默認是511,而Linux的默認引數值是128,
# 所以我們得同時提高這2個值的大小,以至于能獲得更好的性能以及預期的效果,一般會將它修改為2048或者更大,
# 在/etc/sysctl.conf中添加:net.core.somaxconn = 2048,然后在終端中執行sysctl -p
#
tcp-backlog 511
# 配置unix socket的路徑,來讓redis支持監聽本地連接,
# unixsocket /tmp/redis.sock
# 配置unix socket使用檔案的權限,
# unixsocketperm 700
# 此引數為設定客戶端空閑超過timeout,服務端會斷開連接,為0則服務端不會主動斷開連接,不能小于0
timeout 0
# tcp 保活,單位是秒,如果設定不為0,就使用配置tcp的SO_KEEPALIVE值,
# 使用keepalive有兩個好處:
# 1. 檢測掛掉的對端,
# 2. 降低中間設備出問題而導致網路看似連接卻已經與對端埠的問題,
# 在Linux內核中,設定了keepalive,redis會定時給對端發送ack,檢測到對端關閉需要兩倍的設定值
tcp-keepalive 300
################################# GENERAL 基本 #####################################
# 是否在后臺執行,yes代表后臺運行,如果后臺允許,會將服務pid寫到/var/run/redis.pid檔案中
daemonize yes
# 可以通過upstart和systemd管理Redis守護行程,這個引數是和具體的作業系統相關的,
supervised no
# redis服務后臺啟動時,pid寫入的檔案位置
pidfile /var/run/redis_6379.pid
# 日志級別,
# debug:記錄大量日志資訊,適用于開發和測驗
# verbose:較多日志資訊
# notice:適量日志資訊,適用于生產環境
# warning:僅有部分重要、關鍵資訊才會被記錄
loglevel notice
# 日志檔案的位置,當指定為空字串時,為標準輸出,如果redis為守護行程模式運行,那么日志將會輸出到 /dev/null
logfile ""
# 是否把日志記錄到系統日志
# syslog-enabled no
# 設定系統日志的id
# syslog-ident redis
# 指定syslog設備,必須是user或則local0到local7
# syslog-facility local0
# 設定資料庫的數目,默認的資料庫是DB 0 ,可以在每個連接上使用select <dbid> 命令選擇一個不同的資料庫,dbid是一個介于0到databases - 1之間的數值,
databases 16
# 是否在互動式終端啟動的時候顯示log,不用管它就好,感覺沒啥意義
always-show-logo yes
################################ SNAPSHOTTING 快照 ################################
# 保存資料到磁盤,格式是:save <seconds> <changes> ,即在seconds秒之后至少有changes個keys發生改變則保存一次,
# 如果你不想保存資料到磁盤,則注釋掉所有save行即可,也可改為save ""
#
# save ""
save 900 1
save 300 10
save 60 10000
# 默認情況下,如果redis最后一次的后臺保存失敗,redis將停止接受寫操作,這樣以一種強硬的方式讓用戶知道資料不能正確的持久化到磁盤,
# 否則就會沒人注意到災難的發生,如果后臺保存行程重新啟動作業了,redis也將自動的允許寫操作,
# 然而你要是安裝了靠譜的監控,你可能不希望redis這樣做,那你就改成no,
#
stop-writes-on-bgsave-error yes
# 是否在dump.rdb資料庫的時候壓縮字串,默認設定為yes,如果你想節約一些cpu資源的話,可以把它設定為no,這樣的話資料集就可能會比較大,
rdbcompression yes
# 是否CRC64校驗rdb檔案,會有一定的性能損失(大概10%),
rdbchecksum yes
# rdb檔案的名字,
dbfilename dump.rdb
# 資料庫存放目錄,必須是一個目錄,aof檔案也會保存到該目錄下,默認在啟動腳本相同的目錄下,
dir ./
################################# REPLICATION 主從復制 #################################
# 設定本機為slave服務,并且填寫主節點的ip和埠號
#
# replicaof <masterip> <masterport>
# master的密碼,如果master服務設定了密碼保護,slave服務連接master時需要密碼,
#
# masterauth <master-password>
# 當一個slave與master失去聯系時,或者復制正在進行的時候,slave應對請求的2種行為:
# 1:如果設定yes(默認值),slave 仍然會應答客戶端請求,但回傳的資料可能是過時,或者資料可能是空的在第一次同步的時候;
# 2:如果設定no,在你執行除了info和replicaOF和AUTH..等之外的其他命令時,slave回傳一個"SYNC with master in progress"的錯誤,
#
replica-serve-stale-data yes
# 設定slave是否是只讀的,從2.6版起,slave默認是只讀的,
#
replica-read-only yes
# 主從資料復制是否使用無硬碟復制功能,
#
repl-diskless-sync no
# 當五磁盤復制被開啟時,等待5s后再開始復制,因為要等更多replica重新連接過來,可以公用一個RDB,如果不延遲等待可以設定為0
#
repl-diskless-sync-delay 5
# 指定slave定期ping master的周期,默認10秒鐘,
#
# repl-ping-replica-period 10
# 設定主庫批量資料傳輸時間或者ping回復時間間隔,默認值是60秒 ,
# master node將rdb快照檔案發送給replica node,如果rdb復制時間超過60秒,那么replica node就會認為復制失敗,
# 可以適當調大這個引數(對于千兆網卡的機器,一般每秒傳輸 100MB,6G 檔案,很可能超過 60s)
# repl-timeout 60
# 指定向slave同步資料時,是否禁用socket的NO_DELAY選項,若配置為“yes”,則禁用NO_DELAY,則TCP協議堆疊會合并小包統一發送,
# 這樣可以減少主從節點間的包數量并節省帶寬,但會增加資料同步到slave的時間,若配置為“no”,表明啟用NO_DELAY,
# 則TCP協議堆疊不會延遲小包的發送時機,這樣資料同步的延時會減少,但需要更大的帶寬,則TCP協議堆疊不會延遲小包的發送時機,
# 這樣資料同步的延時會減少,但需要更大的帶寬, 通常情況下,應該配置為no以降低同步延時,
# 但在主從節點間網路負載已經很高的情況下,可以配置為yes,
repl-disable-tcp-nodelay no
# 設定主從復制backlog容量大小,這個 backlog 是一個用來在 slaves 被斷開連接時存放 slave 資料的 buffer,
# 所以當一個 slave 想要重新連接,通常不希望全部重新同步,只是部分同步就夠了,
# 僅僅傳遞 slave 在斷開連接時丟失的這部分資料,這個值越大,salve 可以斷開連接的時間就越長,
#
# repl-backlog-size 1mb
# A value of 0 means to never release the backlog.
# 配置當master和slave失去聯系多少秒之后,清空backlog釋放空間,當配置成0時,表示永遠不清空,
#
# repl-backlog-ttl 3600
# 當master不能正常作業的時候,Redis Sentinel會從slaves中選出一個新的 master,這個值越小,
# 就越會被優先選中,但是如果是0,那是意味著這個slave不可能被選中,默認優先級為 100,
replica-priority 100
# redis提供了可以讓master停止寫入的方式,如果配置了min-replicas-to-write,健康的slave的個數小于N,mater就禁止寫入,
# master最少得有N個健康的slave存活才能執行寫命令,這個配置雖然不能保證N個slave都一定能接收到master的寫操作,
# 但是能避免沒有足夠健康的slave的時候,master不能寫入來避免資料丟失,設定為0是關閉該功能,
# 延遲小于min-replicas-max-lag秒的slave才認為是健康的slave
#
# min-replicas-to-write 3
# min-replicas-max-lag 10
################################## SECURITY 安全 ###################################
# redis連接密碼
#
requirepass 123456
# 將命令重命名,為了安全考慮,可以將某些重要的、危險的命令重命名,當你把某個命令重命名成空字串的時候就等于取消了這個命令,
# rename-command CONFIG b4dw78w47d15w4d8w,表示將CONFIG命令重命名為b4dw78w47d15w4d8w;rename-command CONFIG "" 代表禁用CONFIG
#
# rename-command CONFIG ""
################################### CLIENTS 客戶端 ####################################
# 設定客戶端最大并發連接數,默認無限制,Redis可以同時打開的客戶端連接數為Redis行程可以打開的最大檔案描述符數-32(redis server自身會使用一些),
# 如果設定 maxclients 0,表示不作限制,當客戶端連接數到達限制時,Redis會關閉新的連接并向客戶端回傳max number of clients reached錯誤資訊,
#
# maxclients 10000
############################## MEMORY MANAGEMENT 記憶體管理 ################################
# 指定Redis最大記憶體限制,Redis在啟動時會把資料加載到記憶體中,達到最大記憶體后,Redis會先嘗試清除已到期或即將到期的Key,
# 當此方法處理后,仍然到達最大記憶體設定,將無法再進行寫入操作,但仍然可以進行讀取操作,
# Redis新的vm機制,會把Key存放記憶體,Value會存放在swap區,格式:maxmemory <bytes> ,
#
# maxmemory <bytes>
# 當記憶體使用達到最大值時,redis使用的清除策略,有以下幾種可以選擇:
# 1:volatile-lru -> 利用LRU演算法移除設定了過期時間的key (LRU:最近最少使用 Least Recently Used )
# 2:allkeys-lru -> 利用LRU演算法移除任何key
# 3:volatile-lfu -> 利用LFU演算法移除設定了過期時間的key (LFU:最不經常使用 Least Frequently Used )
# 4:allkeys-lfu -> 利用LFU演算法移除任何key
# 3)volatile-random -> 移除設定了過期時間的隨機key
# 4)allkeys-random -> 移除隨機key
# 5)volatile-ttl -> 移除即將過期的key(minor TTL)
# 6)noeviction noeviction 不移除任何key,只是回傳一個寫錯誤 ,默認選項
#
# maxmemory-policy noeviction
# LRU和minimal TTL演算法都不是精準的演算法,但是相對精確的演算法(為了節省記憶體),隨意你可以選擇樣本大小進行檢測,
# redis默認選擇5個樣本進行檢測,你可以通過maxmemory-samples進行設定樣本數,
#
# maxmemory-samples 5
# 是否開啟salve的最大記憶體
#
# replica-ignore-maxmemory yes
############################# LAZY FREEING 阻塞方式釋放記憶體? ####################################
# 當使用DEL命令時,會停止執行新的命令,洗掉key對應的value是個小物件,速度會很快,如果是個大物件,則會阻塞比較長時間,
# 如下配置是否以非阻塞方式釋放記憶體
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
############################## APPEND ONLY MODE 追加模式 ###############################
# Please check http://redis.io/topics/persistence for more information.
# 是否啟用aof持久化方式 ,即是否在每次更新操作后進行日志記錄,默認配置是no,
# 即采用異步方式把資料寫入到磁盤,如果不開啟,可能會在斷電時導致部分資料丟失,
# AOF 和 RDB 可以同時開啟,如果AOF開啟了,恢復時會選用AOF
#
appendonly no
# 追加模式的檔案名,默認為appendonly.aof
#
appendfilename "appendonly.aof"
# aof檔案重繪的頻率,有三種:推薦使用 everysec
# 1:no 依靠OS進行重繪,redis不主動重繪AOF,這樣最快,但安全性就差,
# 2: always 每提交一個修改命令都呼叫fsync重繪到AOF檔案,非常非常慢,但也非常安全,
# 3:everysec 每秒鐘都呼叫fsync重繪到AOF檔案,很快,但可能會丟失一秒以內的資料,
#
# appendfsync always
appendfsync everysec
# appendfsync no
# 指定是否在后臺aof檔案rewrite期間呼叫fsync,默認為no,表示要呼叫fsync(無論后臺是否有子行程在刷盤),
# Redis在后臺寫RDB檔案或重寫AOF檔案期間會存在大量磁盤IO,此時,在某些linux系統中,呼叫fsync可能會阻塞,
#
no-appendfsync-on-rewrite no
# 當AOF檔案增長到一定大小的時候Redis能夠呼叫BGREWRITEAOF對日志檔案進行重寫,當AOF檔案大小的增長率大于該配置項時自動開啟重寫,
auto-aof-rewrite-percentage 100
# 當AOF檔案增長到一定大小的時候Redis能夠呼叫BGREWRITEAOF對日志檔案進行重寫 ,當AOF檔案大小大于該配置項時自動開啟重寫,
auto-aof-rewrite-min-size 64mb
# redis在啟動時可以加載被截斷的AOF檔案,而不需要先執行redis-check-aof工具,
aof-load-truncated yes
# 加載redis時,可以識別AOF檔案以“redis”開頭字串并加載帶前綴的RDB檔案,然后繼續加載AOF尾巴
aof-use-rdb-preamble yes
################################ LUA SCRIPTING LUA腳本 ###############################
# 一個Lua腳本最長的執行時間,單位為毫秒,如果為0或負數表示無限執行時間,默認為5000,
lua-time-limit 5000
################################ REDIS CLUSTER Redis集群 ###############################
# 集群開關,默認是不開啟集群模式
#
# cluster-enabled yes
# 集群組態檔的名稱,每個節點都有一個集群相關的組態檔,持久化保存集群的資訊,這個檔案并不需要手動
# 配置,這個組態檔有Redis生成并更新,每個Redis集群節點需要一個單獨的組態檔,請確保與實體運行的系
# 統中組態檔名稱不沖突
# cluster-config-file nodes-6379.conf
# 節點互連超時的閥值,集群節點超時毫秒數
#
# cluster-node-timeout 15000
關注微信公眾號【
Java之言】,更多干貨文章和學習資料,助你放棄編程之路!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/260018.html
標籤:其他
上一篇:2021美賽什么時候出成績?
下一篇:HashMap底層實作原理詳解

