新聞中心

成都創(chuàng)新互聯(lián)公司專注于高昌企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站建設(shè),商城系統(tǒng)網(wǎng)站開發(fā)。高昌網(wǎng)站建設(shè)公司,為高昌等地區(qū)提供建站服務(wù)。全流程按需求定制制作,專業(yè)設(shè)計,全程項目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)
您可以把 key 看成 value 的變量,通過檢索 key 就可以找到對應(yīng)的 value 值。為了更加全面的了解 key,我們將從以下三個維度做深入講解:
- key 的類型
- key 的命名規(guī)范
- key 的過期時間
了解key的特點
1) key的類型
key 的類型對應(yīng)著 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的命名規(guī)范
key 的命名需要遵循以下規(guī)則:
- key 取值不可以太長,否則會影響 value 的查找效率,并且浪費內(nèi)存空間。
- key 取值也不能過短,否則會使得 key 可讀性變差。
在 key 的取值上, Redis 官方建議使用“見名知意”的字符串格式,因為這樣便于我們理解 key 的含義。比如要現(xiàn)在存放一個用戶的姓名,其信息如下:
| id | name |
|---|---|
| 01 | XiaoHong |
我們使用一個 key 來存儲用戶的名字,key 的設(shè)置如下所示:
127.0.0.1:6379> set user:id:01:username XiaoHong OK
上述示例,自定義了
uesr:id:01:username這個 key,通過 key 不僅可以知道用戶的 id,還可以知道這個 key 是用來存儲用戶名字的。注意,這里的
:只是起到分割符的作用,并不是固定的語法格式。
注意:在符合業(yè)務(wù)場景情況下,key 要盡可能的簡單明了,您可以使用單詞的縮寫,或者自定義縮寫格式。
在 Redis 中,我們也可以將一個空字符串設(shè)置成 key,示例如下:
127.0.0.1:6379> SET "" c.biancheng.net OK 127.0.0.1:6379> GET "" "c.biancheng.net"
key 的類型并不局限于字符串,在 Redis 中 key 具有二進制安全的特性,這意味著它可以使用任何二進制序列,但是這種 key 過于復(fù)雜一般不建議采用??傊耙娒狻本褪?key 最佳的命名規(guī)范。
對于相同數(shù)據(jù)類型而言,如果您對已經(jīng)存在的 key 重新設(shè)置了新的 value,那么原來的 value 就會被覆蓋掉。因此,您可以用這種方法來修改 key 存儲的值。
3) key過期時間
Redis 允許你為 key 設(shè)置一個過期時間(使用 EXPIRE 等命令),也就是“到點自動刪除”,這在實際業(yè)務(wù)中是非常有用的,一是它可以避免使用頻率不高的 key 長期存在,從而占用內(nèi)存資源;二是控制緩存的失效時間。
Redis 會把每個設(shè)置了過期時間的 key 存放到一個獨立的字典中,并且會定時遍歷這個字典來刪除到期的 key。除了定時遍歷之外,它還會使用“惰性策略”來刪除過期的 key。所謂“惰性策略”指的是當(dāng)客戶端訪問這個 key 的時候,Redis 對 key 的過期時間進行檢查,如果過期了就立即刪除。Redis 使用兩種方式相結(jié)合的方法來處理過去的 key。
過期時間,有許多的應(yīng)用場景,比如購物 App 會在特定的時間節(jié)點推出相關(guān)的活動,比如雙十一、雙十二、618購物節(jié)等,這些活動都是一年一度如期開辦,因此當(dāng)下一期舉行時,上一期的活動的數(shù)據(jù)就沒有意義了,在這種情景下就可以給 key 設(shè)置一個過期時間,從而減少無用數(shù)據(jù)占用內(nèi)存資源。
Redis key命令格式
了解完 key 的相關(guān)規(guī)范,接下來看一下和 key 相關(guān)的命令,它的語法格式如下所示:
redis 127.0.0.1:6379> COMMAND KEY_NAME
- COMMAND:表示 key 的命令;
- KEY_NAME:表示 key 的名字。
通過示例進一步說明,
DEL代表刪除命令,而 www.biancheng.net 是鍵。如果成功刪除了鍵,則將的返回整數(shù) 1,否則將返回整數(shù) 0。示例如下:
redis 127.0.0.1:6379> SET www.biancheng.net "編程幫你好" OK #刪除key redis 127.0.0.1:6379> DEL www.biancheng.net (integer) 1 #若鍵不存在刪除失敗 redis 127.0.0.1:6379> DEL age (integer) 0
Redis鍵命令匯總
下表對常用的 Redis 鍵命令做了簡單的總結(jié):
| 命令 | 說明 |
|---|---|
| DEL key | 若鍵存在的情況下,該命令用于刪除鍵。 |
| DUMP key | 用于序列化給定 key ,并返回被序列化的值。 |
| EXISTS key | 用于檢查鍵是否存在,若存在則返回 1,否則返回 0。 |
| EXPIRE key | 設(shè)置 key 的過期時間,以秒為單位。 |
| EXPIREAT key | 該命令與 EXPIRE 相似,用于為 key 設(shè)置過期時間,不同在于,它的時間參數(shù)值采用的是時間戳格式。 |
| PEXPIRE key | 設(shè)置 key 的過期,以毫秒為單位。 |
| PEXPIREAT key | 與 PEXPIRE 相似,用于為 key 設(shè)置過期時間,采用以毫秒為單位的時間戳格式。 |
| KEYS pattern | 此命令用于查找與指定 pattern 匹配的 key。 |
| MOVE key db | 將當(dāng)前數(shù)據(jù)庫中的 key 移動至指定的數(shù)據(jù)庫中(默認(rèn)存儲為 0 庫,可選 1-15中的任意庫)。 |
| PERSIST key | 該命令用于刪除 key 的過期時間,然后 key 將一直存在,不會過期。 |
| PTTL key | 用于檢查 key 還剩多長時間過期,以毫秒為單位。 |
| TTL key | 用于檢查 key 還剩多長時間過期,以秒為單位。 |
| RANDOMKEY | 從當(dāng)前數(shù)據(jù)庫中隨機返回一個 key。 |
| RENAME key newkey | 修改 key 的名稱。 |
| RENAMENX key newkey | 如果新鍵名不重復(fù),則將 key 修改為 newkey。 |
| SCAN cursor | 基于游標(biāo)的迭代器,用于迭代數(shù)據(jù)庫中存在的所有鍵,cursor 指的是迭代游標(biāo)。 |
| TYPE key | 該命令用于獲取 value 的數(shù)據(jù)類型。 |
常用命令演示
下面對一些較難理解的命令做實例演示:
1) DUMP序列化
該命令用于將鍵對應(yīng)的值做序列化處理,實例如下:
127.0.0.1:6379> SET num 12 OK 127.0.0.1:6379> DUMP num "\x00\xc0\x0c\t\x00\xec\xd8\xa9\x9d\b\x82\xdfd"
如果 key 不存在時,則返回 nil。
2) EXPIRE設(shè)置過期時間
該命令用于設(shè)置 key 的過期時間,當(dāng) key 過期后將不可以再使用。
127.0.0.1:6379> set www.biancheng.net Python OK 127.0.0.1:6379> set www.biancheng.net Python EX 60 OK 127.0.0.1:6379> EXPIRE www.biancheng.net 120 (integer) 1
上面介紹了兩種設(shè)置過期時間的方法,它們都可以實現(xiàn)過期時間設(shè)置,key 過期后將自動被刪除。
3) PEXPIREAT設(shè)置過期時間
以時間戳格式設(shè)置過期時間,并以毫秒為單位。
127.0.0.1:6379> set www.biancheng.net Python OK 127.0.0.1:6379> PEXPIREAT www.biancheng.net 12000000000 (integer) 1
設(shè)置成功返回 1,若 key 不存在或者不能為其設(shè)置過期時間,則返回 0。
4) KEYS命令查找鍵
查找指定模式的鍵。
redis 127.0.0.1:6379> SET course1 redis OK redis 127.0.0.1:6379> SET course2 php OK redis 127.0.0.1:6379> SET course3 python OK 127.0.0.1:6379> keys course* 1) "course1" 2) "course2" 3) "course3" #獲取所有key 127.0.0.1:6379> keys * 1) "course1" 2) "course2" 3) "course3" 4) "num" 5) "www.biancheng.net"
注意:keys * 會返回當(dāng)前庫中所有的鍵。
5) SCAN cursor
SCAN 命令是一個基于游標(biāo)的迭代器,每次被調(diào)用之后, 都會向用戶返回一個新的游標(biāo), 用戶在下次迭代時需要使用這個新游標(biāo)作為 SCAN 命令的游標(biāo)參數(shù), 否則將無法繼續(xù)跌代。如果新游標(biāo)返回 0 則表示迭代結(jié)束。
SCAN 命令的語法格式如下:
SCAN cursor [MATCH pattern] [COUNT count]
參數(shù)說明:
- cursor :指定游標(biāo),從 0 開始新的迭代。
- pattern:指定匹配的模式。
- count:返回多少個元素,默認(rèn)值為 10 。
SCAN 令可以迭代數(shù)據(jù)庫中的所有鍵,如果想針對特定的數(shù)據(jù)類型迭代,那么命令自然也要做相應(yīng)的變化。如下所示:
- SSCAN 命令用于迭代集合鍵中的元素。
- HSCAN 命令用于迭代哈希鍵中的鍵值對。
- ZSCAN 命令用于迭代有序集合中的元素。
該命令的使用示例如下:
127.0.0.1:6379> SCAN 0
1) "3"
2) 1) "name"
2) "website"
3) "biancheng2"
4) "www.biancheng.net"
5) "biancheng3"
6) "biancheng1"
7) "course2"
8) "topic"
9) "course1"
10) "age"
127.0.0.1:6379> SCAN 3
1) "0"
2) 1) "biancheng"
2) "course3"
3) "userid:1"
4) "num"
6) TTL命令
在 key 設(shè)置過期時間的情況下,使用該命令檢查 key 剩余的過期時間。
當(dāng)鍵沒有設(shè)置過期時間,表示是永久有效時,TTL 命令返回 -1;當(dāng)鍵過期或者被刪除時,TTL 命令返回 -2。示例如下:
127.0.0.1:6379> SET www.biancheng.net hello OK 127.0.0.1:6379> ttl www.biancheng.net (integer) -1 127.0.0.1:6379> SET user:1 Jack EX 120 OK 127.0.0.1:6379> TTL user:1 (integer) 108 127.0.0.1:6379> DEL user:1 (integer) 1 127.0.0.1:6379> TTL user:1 (integer) -2
如果想了解更多命令,請參考:http://doc.redisfans.com/
分享題目:Rediskey鍵
URL地址:http://fisionsoft.com.cn/article/cohpggj.html


咨詢
建站咨詢
