新聞中心

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


咨詢
建站咨詢
