A. 如何在redis配置文件中查看redis版本
redis.conf 配置項說明如下:
1. Redis默認不是以守護進程的方式運行,可以通過該配置項修改,使用yes啟用守護進程
daemonize no
2. 當Redis以守護進程方式運行時,Redis默認會把pid寫入/var/run/redis.pid文件,可以通過pidfile指定
pidfile /var/run/redis.pid
3. 指定Redis監聽埠,默認埠為6379,作者在自己的一篇博文中解釋了為什麼選用6379作為默認埠,因為6379在手機按鍵上MERZ對應的號碼,而MERZ取自義大利歌女Alessia Merz的名字
port 6379
4. 綁定的主機地址
bind 127.0.0.1
5.當 客戶端閑置多長時間後關閉連接,如果指定為0,表示關閉該功能
timeout 300
6. 指定日誌記錄級別,Redis總共支持四個級別:debug、verbose、notice、warning,默認為verbose
loglevel verbose
7. 日誌記錄方式,默認為標准輸出,如果配置Redis為守護進程方式運行,而這里又配置為日誌記錄方式為標准輸出,則日誌將會發送給/dev/null
logfile stdout
8. 設置資料庫的數量,默認資料庫為0,可以使用SELECT <dbid>命令在連接上指定資料庫id
databases 16
9. 指定在多長時間內,有多少次更新操作,就將數據同步到數據文件,可以多個條件配合
save <seconds> <changes>
Redis默認配置文件中提供了三個條件:
save 900 1
save 300 10
save 60 10000
分別表示900秒(15分鍾)內有1個更改,300秒(5分鍾)內有10個更改以及60秒內有10000個更改。
B. Redis命令詳解:Keys
Redis命令詳解:Keys
介紹完Redis連接相關命令後,我們接下來將重點介紹與Key相關的命令。Redis作為一款key-value資料庫,對Key的操作是不可或缺的。接下來,我們將逐一解析與Key操作相關的Redis命令。
DEL:最早可用版本為1.0.0。用於刪除指定的鍵值對。若指定的key不存在,則忽略。命令時間復雜度為O(N)。對於除字元串外的其他數據類型,命令的時間復雜度為O(M),M為值的元素個數。在生產環境中,應避免一次性刪除過多復雜數據類型的操作。
DUMP:最早可用版本為2.6.0。用於以Redis格式序列化指定鍵存儲的值,可用RESTORE命令將序列化值反序列化。序列化格式有以下3個特點:不包含過期時間信息,使用PTTL命令獲取存活時間;訪問時間復雜度為O(1),序列化值時間復雜度為O(N*M),N為組成值的元素數量,M為元素平均大小;序列化較短字元串時,時間復雜度可看做O(1)。
EXISTS:最早可用版本為1.0.0。用於判斷key是否存在。自3.0.3版本後,支持多參數,即一次性判斷多個key,返回存在的key數量。單個key存在的判斷返回1或0,向後兼容。注意,參數中有重復存在命令時,返回結果不進行去重。
EXPIRE:最早可用版本為1.0.0。用於為指定的key設置存活時間。存活時間會被DEL、SET、GETSET和所有STORE命令刪除或覆蓋。修改key值而不修改存活時間或保存到新key中,key的存活時間保持不變。使用RENAME重命名key時,原有key的存活時間會賦給新key。使用PERSIST命令清除存活時間,將key變為永久。如果設置存活時間非正數或過期時間,則key直接被刪除。再次設置存活時間更新key的存活時間,在應用中常見。
關於時間精度,Redis2.1.3版本之前修改帶有存活時間的key值時,會刪除整個key;2.4版本後,過期時間在key過期一秒內仍可訪問,2.6版本精確到1毫秒。存活時間保存為Unix時間戳,要求計算機時間可靠,載入RDB文件到另一台機器時,時間差距可能導致key被刪除或存活時間延長。
Redis過期策略有兩種:被動過期和主動過期。被動過期在客戶端訪問時檢查key的存活時間,可能無法及時發現長時間未訪問的過期key。Redis定期隨機檢查被設置過存活時間的key,過期後及時清理。每秒執行10次檢查操作。
EXPIREAT:最早可用版本為1.2.0。作用與EXPIRE相同,參數需要傳Unix時間戳。
KEYS:最早可用版本為1.0.0。返回匹配所有key的命令,時間復雜度為O(N)。在官方文檔中建議避免在生產環境中使用,尤其是不要使用KEYS *命令,以免導致生產環境長時間不可用。推薦使用SCAN或sets命令查找key。
匹配策略介紹:?匹配單個字元,*匹配任意數量字元,[ae]匹配a或e,^e不匹配e,a-c匹配a、b、c,特殊符號使用隔開。
MIGRATE:最早可用版本為2.6.0。將源實例的key以原子操作傳輸到目標實例,刪除源實例key。相當於執行DUMP+DEL操作在目標實例執行RESTORE操作。此操作會阻塞源實例和目標實例,直到傳輸完成。3.2版本後支持一次性傳輸多個key。
執行MIGRATE命令時需設置超時時間,超時未完成拋出IOERR。兩個實例狀態可能兩種:均存在指定key或僅源實例存在,key不會丟失。3.0.6版本後支持一次傳輸多個key,使用KEYS參數,源key參數設置為空字元串。COPY參數傳輸後不刪除源實例key,REPLACE參數替換目標實例已存在的key。這兩個參數自3.0版本開始可用。
MOVE:最早可用版本為1.0.0。將當前資料庫key移動到指定資料庫。如果目標資料庫已存在key或當前資料庫不存在key,命令不做任何操作。
OBJECT:最早可用版本為2.2.3。用於查看Redis對象內部信息,調試時常用。具體用法如下:查看對象編碼格式。
PERSIST:最早可用版本為2.2.0。刪除指定key的過期時間,使之變為永久key。
PEXPIRE:最早可用版本為2.6.0。與EXPIRE作用相同,參數時間單位為毫秒。
PEXPIREAT:最早可用版本為2.6.0。與EXPIREAT作用相同,參數同樣是毫秒。
PTTL:最早可用版本為2.6.0。返回指定key剩餘存活時間的毫秒數。3.0版本後,key不存在返回-2,永久key返回-1。
RANDOMKEY:最早可用版本為1.0.0。從當前資料庫返回一個隨機key。
RENAME:最早可用版本為1.0.0。重命名key。若key不存在,返回錯誤。新key已存在時,覆蓋原key(隱式執行DEL命令,操作延時較高)。3.2版本前,源key和目標key相同會報錯。
RENAMENX:若新key不存在,則重命名key;新key已存在返回0;成功返回1。
RESTORE:最早可用版本為2.6.0。使用RESTORE key ttl serialized-value [REPLACE]命令將序列化值反序列化存儲到key,ttl為0則key永久存在。3.0版本後,未使用REPLACE參數且key已存在時返回錯誤「Target key name is busy」。
SCAN:最早可用版本為2.8.0。使用SCAN cursor MATCH pattern COUNT count命令,返回小部分數據,不會阻塞Redis。基於游標操作,每次調用返回遊標用於下一次迭代。游標返回0表示迭代結束。
每次返回數量不固定,可能為空。SCAN命令支持匹配。
測試存儲10000個key:
返回結果表明,雖然設置count為1000,但每次返回的值只有10個左右。
SORT:最早可用版本為1.0.0。用於返回或保存list、set和sorted set的鍵,默認對數字或排序key排序,視為雙精度浮點數。按字典順序排序使用ALPHA參數;按外部欄位排序使用BY參數。
TOUCH:最早可用版本為3.2.1。修改key最後訪問時間,key不存在忽略。
TTL:最早可用版本為1.0.0。返回指定key的剩餘存活時間,單位為秒。2.6版本及以前,key不存在或永久key返回-1。從2.8版本開始,key不存在返回-2,永久key返回-1。
TYPE:最早可用版本為1.0.0。返回key存儲值的類型。
UNLINK:最早可用版本為4.0.0。刪除key,時間復雜度O(1),先從keyspace中刪除key,指定key已刪除,內存未釋放。在另一個線程中執行內存釋放操作,時間復雜度O(N)。
WAIT:最早可用版本為3.0.0。阻塞客戶端,直至所有寫操作完成並保存指定數量副本。總會返回副本數量或超時。