1. 程式人生 > >《Redis開發與運維》- API的使用-1-全域性命令

《Redis開發與運維》- API的使用-1-全域性命令

Redis API的使用

1. 全域性命令

1.1檢視所有鍵:keys *

1.2鍵總數:dbsize 【dbsize】命令在計算總數時不會遍歷所有的鍵,而是直接獲取Redis內建的鍵總數,所以dbsize的時間複雜度是O(1),而keys命令會遍歷所有鍵,所以時間複雜度是O(n)。

1.3檢查鍵是否存在 :exists key 【存在返回1,不存在返回0】

1.4刪除鍵 :del key [key …] 【支援刪除多個鍵】

1.5設定鍵過期:expire key seconds 【超過過期時間,會自動刪除】 ttl命令會返回鍵的剩餘過期時間,有三種返回值: 大於等於0的整數,鍵剩餘的過期時間。 -1:鍵沒設定過期時間。 -2:鍵不存在

1.6鍵的資料結構型別:type key 【如果鍵不存在,返回none】

2.資料結構和內部編碼

type命令實際返回的是當前鍵的資料結構型別,分別是: string,hash,list,set,zset 這五種資料結構,但是實際每種資料結構都有自己底層的內部編碼實現,而且是多實現,Redis會在合適的場景選擇合適的內部編碼。如圖: 在這裡插入圖片描述

可以通過 >object encoding key 命令查詢內部編碼 Redis這樣設計有兩個好處: 1:可以改進內部編碼,而對外的資料結構和命令沒有影響,這樣一旦開發出更優秀的內部編碼,無需改動外部資料結構和命令。如:Redis3.2版本提供了quicklist,結合了ziplist和linkedlist兩者的有事,為列表型別提供了一種更為優秀的內部編碼實現,而對外部使用者來說基本感覺不到。 2:多種內部編碼實現可以在不同場景下發揮各自的有事,例如ziplist比較節省記憶體,但是在列表元素比較多的情況下,效能會下降,這時候Redis會根據配置選項將列表型別的內部實現轉換為linkedlist。

3.單執行緒架構

為什麼單執行緒還能這麼快?原因有三點: 1:純記憶體訪問。 2:非堵塞I/O,Redis使用epoll作為I/O多路複用技術的實現,再加上redis自身的事件處理模型將epoll中的連線,讀寫,關閉都轉化為事件,不在網路IO上浪費時間。 3:單執行緒避免了執行緒切換和競態產生的消耗。 在這裡插入圖片描述