redis常用命令、常見錯誤、配置技巧等分享_Redis

來源:互聯網
上載者:User

1. redis查看當前所有的key

複製代碼 代碼如下:

KEYS *

2. 查看當前redis的配置資訊
複製代碼 代碼如下:

CONFIG GET *

3. MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.

強制停止redis快照導致,redis運行使用者沒有許可權寫rdb檔案或者磁碟空間滿了,解決辦法:

複製代碼 代碼如下:

config set stop-writes-on-bgsave-error no

例如:
複製代碼 代碼如下:

set 'name' 'shenhui'
-MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.
config set stop-writes-on-bgsave-error no
+OK
set 'name' 'shenhui'
+OK

4. redis 127.0.0.1:6379> CONFIG SET logfile "/var/log/redis/redis-server.log"
(error) ERR Unsupported CONFIG parameter: logfile

logfile 不能通過set動態設定

5.(error) OOM command not allowed when used memory >
設定了maxmemory的選項,redis記憶體使用量達到上限。
可以通過設定LRU演算法來刪除部分key,釋放空間。
預設是按照到期時間的,如果set時候沒有加上到期時間就會導致資料寫滿maxmemory。
如果不設定maxmemory或者設定為0 64位系統不限制記憶體,32位系統最多使用3GB記憶體。

volatile-lru -> 根據LRU演算法產生的到期時間來刪除。
allkeys-lru -> 根據LRU演算法刪除任何key。
volatile-random -> 根據到期設定來隨機刪除key。
allkeys->random -> 無差別隨機刪。
volatile-ttl -> 根據最近到期時間來刪除(輔以TTL)
noeviction -> 誰也不刪,直接在寫操作時返回錯誤。

6. reids日誌位置

logfile 日誌記錄方式,預設值為stdout,如果設定為stdout且以守護進程方式運行,那麼日誌會被重新導向到/dev/null,也就是不記日誌。

7. reids配置參數詳解

複製代碼 代碼如下:

#daemonize no  預設情況下, redis 不是在後台啟動並執行,如果需要在後台運行,把該項的值更改為 yes
daemonize yes
#  當 redis 在後台啟動並執行時候, Redis 預設會把 pid 檔案放在 /var/run/redis.pid ,你可以配置到其他地址。
#  當運行多個 redis 服務時,需要指定不同的 pid 檔案和連接埠
pidfile /var/run/redis_6379.pid
#  指定 redis 啟動並執行連接埠,預設是 6379
port 6379
#  在高並發的環境中,為避免慢用戶端的串連問題,需要設定一個高速後台日誌
tcp-backlog 511
#  指定 redis 只接收來自於該 IP 位址的請求,如果不進行設定,那麼將處理所有請求
# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1
#  設定用戶端串連時的逾時時間,單位為秒。當用戶端在這段時間內沒有發出任何指令,那麼關閉該串連
# 0 是關閉此設定
timeout 0
# TCP keepalive
#  在 Linux 上,指定值(秒)用於發送 ACKs 的時間。注意關閉串連需要雙倍的時間。預設為 0 。
tcp-keepalive 0
#  指定日誌記錄層級,生產環境推薦 notice
# Redis 總共支援四個層級: debug 、 verbose 、 notice 、 warning ,預設為 verbose
# debug     記錄很多資訊,用於開發與測試
# varbose   有用的資訊,不像 debug 會記錄那麼多
# notice    普通的 verbose ,常用於生產環境
# warning   只有非常重要或者嚴重的資訊會記錄到日誌
loglevel notice
#  配置 log 檔案地址
#  預設值為 stdout ,標準輸出,若後台模式會輸出到 /dev/null 。
logfile /var/log/redis/redis.log
#  可用資料庫數
#  預設值為 16 ,預設資料庫為 0 ,資料庫範圍在 0- ( database-1 )之間
databases 16
################################ 快照#################################
#  儲存資料到磁碟,格式如下 :
#   save 
#    指出在多長時間內,有多少次更新操作,就將資料同步到資料檔案 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
#  後台儲存錯誤停止寫。
stop-writes-on-bgsave-error yes
#  儲存至本機資料庫時(持久化到 rdb 檔案)是否壓縮資料,預設為 yes
rdbcompression yes
# RDB 檔案的是否直接偶像 chcksum
rdbchecksum yes
#  本地持久化資料庫檔案名,預設值為 dump.rdb
dbfilename dump.rdb
#  工作目錄
#  資料庫鏡像備份的檔案放置的路徑。
#  這裡的路徑跟檔案名稱要分開配置是因為 redis 在進行備份時,先會將當前資料庫的狀態寫入到一個臨時檔案中,等備份完成,
#  再把該該臨時檔案替換為上面所指定的檔案,而這裡的臨時檔案和上面所配置的備份檔案都會放在這個指定的路徑當中。
# AOF 檔案也會存放在這個目錄下面
#  注意這裡必須制定一個目錄而不是檔案
dir /var/lib/redis-server/
################################# 複製 #################################
#  主從複製 . 設定該資料庫為其他資料庫的從資料庫 .
#  設定當本機為 slav 服務時,設定 master 服務的 IP 位址及連接埠,在 Redis 啟動時,它會自動從 master 進行資料同步
# slaveof
#  當 master 服務設定了密碼保護時 ( 用 requirepass 制定的密碼 )
# slave 服務串連 master 的密碼
# masterauth
#  當從庫同主機失去串連或者複製進行中,從機庫有兩種運行方式:
# 1)  如果 slave-serve-stale-data 設定為 yes( 預設設定 ) ,從庫會繼續響應用戶端的請求
# 2)  如果 slave-serve-stale-data 是指為 no ,出去 INFO 和 SLAVOF 命令之外的任何請求都會返回一個
#     錯誤 "SYNC with master in progress"
slave-serve-stale-data yes
#  配置 slave 執行個體是否接受寫。寫 slave 對儲存短暫資料(在同 master 資料同步後可以很容易地被刪除)是有用的,但未配置的情況下,用戶端寫可能會發送問題。
#  從 Redis2.6 後,預設 slave 為 read-only
slaveread-only yes
#  從庫會按照一個時間間隔向主庫發送 PINGs. 可以通過 repl-ping-slave-period 設定這個時間間隔,預設是 10 秒
# repl-ping-slave-period 10
# repl-timeout  設定主庫批量資料轉送時間或者 ping 回複時間間隔,預設值是 60 秒
#  一定要確保 repl-timeout 大於 repl-ping-slave-period
# repl-timeout 60
#  在 slave socket 的 SYNC 後禁用 TCP_NODELAY
#  如果選擇“ yes ” ,Redis 將使用一個較小的數字 TCP 資料包和更少的頻寬將資料發送到 slave , 但是這可能導致資料發送到 slave 端會有延遲 , 如果是 Linux kernel 的預設配置,會達到 40 毫秒 .
#  如果選擇 "no" ,則發送資料到 slave 端的延遲會降低,但將使用更多的頻寬用於複製 .
repl-disable-tcp-nodelay no
#  設定複製的後台日誌大小。
#  複製的後台日誌越大, slave 中斷連線及後來可能執行部分複製花的時間就越長。
#  後台日誌在至少有一個 slave 串連時,僅僅分配一次。
# repl-backlog-size 1mb
#  在 master 不再串連 slave 後,後台日誌將被釋放。下面的配置定義從最後一個 slave 中斷連線後需要釋放的時間(秒)。
# 0 意味著從不釋放後台日誌
# repl-backlog-ttl 3600
#  如果 master 不能再正常工作,那麼會在多個 slave 中,選擇優先值最小的一個 slave 提升為 master ,優先值為 0 表示不能提升為 master 。
slave-priority 100
#  如果少於 N 個 slave 串連,且延遲時間 <=M 秒,則 master 可配置停止接受寫操作。
#  例如需要至少 3 個 slave 串連,且延遲 <=10 秒的配置:
# min-slaves-to-write 3
# min-slaves-max-lag 10
#  設定 0 為禁用
#   預設 min-slaves-to-write 為 0 (禁用), min-slaves-max-lag 為 10
################################## 安全 ###################################
#  設定用戶端串連後進行任何其他指定前需要使用的密碼。
#  警告:因為 redis 速度相當快,所以在一台比較好的伺服器下,一個外部的使用者可以在一秒鐘進行 150K 次的密碼嘗試,這意味著你需要指定非常非常強大的密碼來防止暴力破解
# requirepass foobared
#  命令重新命名 .
#  在一個共用環境下可以重新命名相對危險的命令。比如把 CONFIG 重名為一個不容易猜測的字元。
#  舉例 :
# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
#  如果想刪除一個命令,直接把它重新命名為一個Null 字元 "" 即可,如下:
# rename-command CONFIG ""
################################### 約束###################################
#設定同一時間最大用戶端串連數,預設無限制,
#Redis 可以同時開啟的用戶端串連數為 Redis 進程可以開啟的最大檔案描述符數,
#如果設定  maxclients 0 ,表示不作限制。
#當用戶端串連數到達限制時, Redis 會關閉新的串連並向用戶端返回 max number of clients reached 錯誤資訊
# maxclients 10000
#  指定 Redis 最大記憶體限制, Redis 在啟動時會把資料載入到記憶體中,達到最大記憶體後, Redis 會按照清除策略嘗試清除已到期的 Key
#  如果 Redis 依照策略清除後無法提供足夠空間,或者原則設定為 ”noeviction” ,則使用更多空間的命令將會報錯,例如 SET, LPUSH 等。但仍然可以進行讀取操作
#  注意: Redis 新的 vm 機制,會把 Key 存放記憶體, Value 會存放在 swap 區
#  該選項對 LRU 策略很有用。
# maxmemory 的設定比較適合於把 redis 當作於類似 memcached 的緩衝來使用,而不適合當做一個真實的 DB 。
#  當把 Redis 當做一個真實的資料庫使用的時候,記憶體使用量將是一個很大的開銷
# maxmemory
#  當記憶體達到最大值的時候 Redis 會選擇刪除哪些資料?有五種方式可供選擇
# volatile-lru ->  利用 LRU 演算法移除設定過到期時間的 key (LRU: 最近使用  Least RecentlyUsed )
# allkeys-lru ->  利用 LRU 演算法移除任何 key
# volatile-random ->  移除設定過到期時間的隨機 key
# allkeys->random -> remove a randomkey, any key
# volatile-ttl ->  移除即將到期的 key(minor TTL)
# noeviction ->  不移除任何可以,只是返回一個寫錯誤
#  注意:對於上面的策略,如果沒有合適的 key 可以移除,當寫的時候 Redis 會返回一個錯誤
#  預設是 :  volatile-lru
# maxmemory-policy volatile-lru 
# LRU  和  minimal TTL 演算法都不是精準的演算法,但是相對精確的演算法 ( 為了節省記憶體 ) ,隨意你可以選擇樣本大小進行檢測。
# Redis 預設的灰選擇 3 個樣本進行檢測,你可以通過 maxmemory-samples 進行設定
# maxmemory-samples 3
############################## AOF###############################
#  預設情況下, redis 會在後台非同步把資料庫鏡像備份到磁碟,但是該備份是非常耗時的,而且備份也不能很頻繁,如果發生諸如拉閘限電、拔插頭等狀況,那麼將造成比較大範圍的資料丟失。
#  所以 redis 提供了另外一種更加高效的Database Backup及災難恢複方式。
#  開啟 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
no-appendfsync-on-rewrite no
# AOF  自動重寫
#  當 AOF 檔案增長到一定大小的時候 Redis 能夠調用  BGREWRITEAOF  對記錄檔進行重寫
#  它是這樣工作的: Redis 會記住上次進行些日誌後檔案的大小 ( 如果從開機以來還沒進行過重寫,那日子大小在開機的時候確定 )
#  基礎大小會同現在的大小進行比較。如果現在的大小比基礎大小大制定的百分比,重寫功能將啟動
#  同時需要指定一個最小大小用於 AOF 重寫,這個用於阻止即使檔案很小但是增長幅度很大也去重寫 AOF 檔案的情況
#  設定  percentage 為 0 就關閉這個特性
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
################################ LUASCRIPTING #############################
# 一個 Lua 指令碼最長的執行時間為 5000 毫秒( 5 秒),如果為 0 或負數表示無限執行時間。
lua-time-limit 5000
################################LOW LOG################################
# Redis Slow Log  記錄超過特定執行時間的命令。執行時間不包括 I/O 計算比如串連用戶端,返回結果等,只是命令執行時間
#  可以通過兩個參數設定 slow log :一個是告訴 Redis 執行超過多少時間被記錄的參數 slowlog-log-slower-than( 微妙 ) ,
#  另一個是 slow log 的長度。當一個新命令被記錄的時候最早的命令將被從隊列中移除
#  下面的時間以微妙為單位,因此 1000000 代表一秒。
#  注意指定一個負數將關閉慢日誌,而設定為 0 將強制每個命令都會記錄
slowlog-log-slower-than 10000
#  對日誌長度沒有限制,只是要注意它會消耗記憶體
#  可以通過  SLOWLOG RESET 回收被慢日誌消耗的記憶體
#  推薦使用預設值 128 ,當慢日誌超過 128 時,最先進入隊列的記錄會被踢出
slowlog-max-len 128
################################  事件通知  #############################
#  當事件發生時, Redis 可以通知 Pub/Sub 用戶端。
#  可以在下表中選擇 Redis 要通知的事件類型。事件類型由單個字元來標識:
# K     Keyspace 事件,以 _keyspace@_ 的首碼方式發布
# E     Keyevent 事件,以 _keysevent@_ 的首碼方式發布
# g     通用事件(不指定類型),像 DEL, EXPIRE, RENAME, …
# $     String 命令
# s     Set 命令
# h     Hash 命令
# z     有序集合命令
# x     到期事件(每次 key 到期時產生)
# e     清除事件(當 key 在記憶體被清除時產生)
# A     g$lshzxe 的別稱,因此 ”AKE” 意味著所有的事件
# notify-keyspace-events 帶一個由 0 到多個字元組成的字串參數。Null 字元串意思是通知被禁用。
#  例子:啟用 list 和通用事件:
# notify-keyspace-events Elg
#  預設所用的通知被禁用,因為使用者通常不需要改特性,並且該特性會有效能損耗。
#  注意如果你不指定至少 K 或 E 之一,不會發送任何事件。
notify-keyspace-events “”
##############################  進階配置  ###############################
#  當 hash 中包含超過指定元素個數並且最大的元素沒有超過臨界時,
# hash 將以一種特殊的編碼方式(大大減少記憶體使用量)來儲存,這裡可以設定這兩個臨界值
# Redis Hash 對應 Value 內部實際就是一個 HashMap ,實際這裡會有 2 種不同實現,
#  這個 Hash 的成員比較少時 Redis 為了節省記憶體會採用類似一維數組的方式來緊湊儲存,而不會採用真正的 HashMap 結構,對應的 valueredisObject 的 encoding 為 zipmap,
#  當成員數量增大時會自動轉成真正的 HashMap, 此時 encoding 為 ht 。
hash-max-zipmap-entries 512
hash-max-zipmap-value 64 
#  和 Hash 一樣,多個小的 list 以特定的方式編碼來節省空間的。
# list 資料類型節點值大小小於多少位元組會採用緊湊儲存格式。
list-max-ziplist-entries 512
list-max-ziplist-value 64
# set 資料類型內部資料如果全部是數值型,且包含多少節點以下會採用緊湊格式儲存。
set-max-intset-entries 512
#  和 hashe 和 list 一樣 , 排序的 set 在指定的長度內以指定編碼方式儲存以節省空間的
# zsort 資料類型節點值大小小於多少位元組會採用緊湊儲存格式。
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
# Redis 將在每 100 毫秒時使用 1 毫秒的 CPU 時間來對 redis 的 hash 表進行重新 hash ,可以降低記憶體的使用
#  當你的使用情境中,有非常嚴格的即時性需要,不能夠接受 Redis 時不時的對請求有 2 毫秒的延遲的話,把這項配置為 no 。
#  如果沒有這麼嚴格的即時性要求,可以設定為 yes ,以便能夠儘可能快的釋放記憶體
activerehashing yes
# 用戶端的輸出緩衝區的限制,因為某種原因用戶端從伺服器讀取資料的速度不夠快,
# 可用於強制中斷連線(一個常見的原因是一個發布 / 訂閱用戶端消費訊息的速度無法趕上生產它們的速度)。
#  可以三種不同用戶端的方式進行設定:
# normal ->  正常用戶端
# slave  -> slave 和 MONITOR 用戶端
# pubsub ->  至少訂閱了一個 pubsub channel 或 pattern 的用戶端
#  每個 client-output-buffer-limit 文法 :
# client-output-buffer-limit  
#  一旦達到硬限制用戶端會立即斷開,或者達到軟式節流並保持達成的指定秒數(連續)。
#  例如,如果硬限制為 32 MB和軟式節流為 16 MB /10 秒,用戶端將會立即斷開
#  如果輸出緩衝區的大小達到 32 MB,用戶端達到 16 MB和連續超過了限制 10 秒,也將中斷連線。
#  預設 normal 用戶端不做限制,因為他們在一個請求後未要求時(以推的方式)不接收資料,
#  只有非同步用戶端可能會出現請求資料的速度比它可以讀取的速度快的情境。
#  把硬限制和軟式節流都設定為 0 來禁用該特性
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb60
client-output-buffer-limit pubsub 32mb 8mb60
# Redis 調用內建函式來執行許多背景工作,如關閉用戶端逾時的串連,清除到期的 Key ,等等。
#  不是所有的任務都以相同的頻率執行,但 Redis 依照指定的“ Hz ”值來執行檢查任務。
#  預設情況下,“ Hz ”的被設定為 10 。
#  提高該值將在 Redis 空閑時使用更多的 CPU 時,但同時當有多個 key 同時到期會使 Redis 的反應更靈敏,以及逾時可以更精確地處理。
#  範圍是 1 到 500 之間,但是值超過 100 通常不是一個好主意。
#  大多數使用者應該使用 10 這個預設值,只有在非常低的延遲的情況下有必要提高最大到 100 。
hz 10 
#  當一個子節點重寫 AOF 檔案時,如果啟用下面的選項,則檔案每產生 32M 資料進行同步。
aof-rewrite-incremental-fsync yes

8.Redis官方文檔對VM的使用建議:

當你的key很小而value很大時,使用VM的效果會比較好.因為這樣節約的記憶體比較大.
當你的key不小時,可以考慮使用一些非常方法將很大的key變成很大的value,比如你可以考慮將key,value組合成一個新的value.
最好使用linux ext3 等對疏鬆檔案支援比較好的檔案系統儲存你的swap檔案.
vm-max-threads這個參數,可以設定訪問swap檔案的線程數,設定最好不要超過機器的核心數,如果設定為0,那麼所有對swap檔案的操作都是串列的.可能會造成比較長時間的延遲,但是對資料完整性有很好的保證.
有了VM功能,Redis終於擺脫了受記憶體容量限制的噩夢了,似乎我們可以稱其為Redis資料庫了,我們還可以想象又有多少新的用法可以產生.當然,希望這一功能不會對Redis原有的非常牛B的記憶體儲存效能有所影響.

9. redis修改持久化路徑和日誌路徑

複製代碼 代碼如下:

vim redis.conf
logfile /data/redis_cache/logs/redis.log #日誌路徑

dir /data/redis_cache #持久化路徑,修改後 記得要把dump.rdb持久化檔案拷貝到/data/redis_cache下

先殺掉redis,拷貝dump.rdb,啟動

10. 清redis緩衝

複製代碼 代碼如下:

./redis-cli    #進入
dbsize
flushall     #執行
exit

11. 刪除redis當前資料庫中的所有Key

複製代碼 代碼如下:

flushdb

12.刪除redis所有資料庫中的key
複製代碼 代碼如下:

flushall

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.