Redis 是一種鍵值(key-value)型的緩存型數據庫,它將數據全部以鍵值對的形式存儲在內存中,并且 key 與 value 一一對應。這里的 key 被形象的稱之為密鑰,Redis 提供了諸多操作這把“密鑰”的命令,從而實現了對存儲數據的管理。
可以把 key 看成 value 的變量,通過檢索 key 就可以找到對應的 value 值:
- key 的類型
- key 的命名規范
- key 的過期時間
了解key的特點
1) key的類型
key 的類型對應著 value 的類型,同樣也有五種(string、list、hash、set、zset)。如果 key 指向的是一個字符串類型的值,那么 key 的類型就是字符串。我們可以通過TYPE
命令來查看 key 的類型,示例如下
# 字符串 redis> SET weather "sunny" OK redis> TYPE weather string# 列表 redis> LPUSH book_list "programming in scala" (integer) 1 redis> TYPE book_list list# 集合 redis> SADD pat "dog" (integer) 1 redis> TYPE pat set
2) key的命名規范
key 的命名需要遵循以下規則:
- key 取值不可以太長,否則會影響 value 的查找效率,并且浪費內存空間。
- key 取值也不能過短,否則會使得 key 可讀性變差。
3) key過期時間
Redis 允許你為 key 設置一個過期時間(使用 EXPIRE 等命令),也就是“到點自動刪除”,這在實際業務中是非常有用的,一是它可以避免使用頻率不高的 key 長期存在,從而占用內存資源;二是控制緩存的失效時間。
Redis 會把每個設置了過期時間的 key 存放到一個獨立的字典中,并且會定時遍歷這個字典來刪除到期的 key。除了定時遍歷之外,它還會使用“惰性策略”來刪除過期的 key。所謂“惰性策略”指的是當客戶端訪問這個 key 的時候,Redis 對 key 的過期時間進行檢查,如果過期了就立即刪除。Redis 使用兩種方式相結合的方法來處理過去的 key。?
過期時間,有許多的應用場景,比如購物 App 會在特定的時間節點推出相關的活動,比如雙十一、雙十二、618購物節等,這些活動都是一年一度如期開辦,因此當下一期舉行時,上一期的活動的數據就沒有意義了,在這種情景下就可以給 key 設置一個過期時間,從而減少無用數據占用內存資源。?
Redis key命令格式
和 key 相關的命令,它的語法格式如下所示:?
?redis?127.0.0.1:6379>?COMMAND?KEY_NAME
- COMMAND:表示 key 的命令;
- KEY_NAME:表示 key 的名字。
示例:?DEL
代表刪除命令,而?cc 是鍵。如果成功刪除了鍵,則將的返回整數 1,否則將返回整數 0。如下:
redis 127.0.0.1:6379> SET cc "你好" OK #刪除key redis 127.0.0.1:6379> DEL cc (integer) 1 #若鍵不存在刪除失敗 redis 127.0.0.1:6379> DEL age (integer) 0
Redis鍵命令匯總
下表對常用的 Redis 鍵命令做了簡單的總結:
命令 | 說明 |
---|---|
DEL key | 若鍵存在的情況下,該命令用于刪除鍵。 |
DUMP?key | 用于序列化給定 key ,并返回被序列化的值。 |
EXISTS?key | 用于檢查鍵是否存在,若存在則返回 1,否則返回 0。 |
EXPIRE?key | 設置 key 的過期時間,以秒為單位。 |
EXPIREAT?key | 該命令與 EXPIRE 相似,用于為 key 設置過期時間,不同在于,它的時間參數值采用的是時間戳格式。 |
PEXPIRE?key | 設置 key 的過期,以毫秒為單位。 |
PEXPIREAT key | 與?PEXPIRE?相似,用于為 key 設置過期時間,采用以毫秒為單位的時間戳格式。 |
KEYS?pattern | 此命令用于查找與指定?pattern 匹配的 key。 |
MOVE?key?db | 將當前數據庫中的 key 移動至指定的數據庫中(默認存儲為 0 庫,可選 1-15中的任意庫)。 |
PERSIST?key | 該命令用于刪除 key 的過期時間,然后 key 將一直存在,不會過期。 |
PTTL?key | 用于檢查 key 還剩多長時間過期,以毫秒為單位。 |
TTL?key | 用于檢查 key 還剩多長時間過期,以秒為單位。 |
RANDOMKEY | 從當前數據庫中隨機返回一個 key。 |
RENAME?key?newkey | 修改 key 的名稱。 |
RENAMENX key newkey | 如果新鍵名不重復,則將 key 修改為 newkey。 |
SCAN?cursor | 基于游標的迭代器,用于迭代數據庫中存在的所有鍵,cursor 指的是迭代游標。 |
TYPE?key | 該命令用于獲取 value 的數據類型。 |