1. 程式人生 > >Redis學習記錄之命令KEY(五)

Redis學習記錄之命令KEY(五)

1、DEL
DEL key [key …]

刪除給定的一個或多個 key 。
不存在的 key 會被忽略。

可用版本:
1.0.0及以上

返回值:
被刪除 key 的數量。

1)刪除單個 key

redis> SET name huangz
OK

redis> DEL name
(integer) 1

2)刪除一個不存在的 key

redis> EXISTS phone
(integer) 0

redis> DEL phone # 失敗,沒有 key 被刪除
(integer) 0

3)同時刪除多個 key

redis> SET name “redis”
OK

redis> SET type “key-value store”
OK

redis> SET website “redis.com”
OK

redis> DEL name type website
(integer) 3
2、DUMP(個人認為:這是內部命令,一般沒什麼用,主要是對比RDB裡的序列化結果。)
DUMP key

序列化給定 key ,並返回被序列化的值,使用 RESTORE 命令可以將這個值反序列化為 Redis 鍵。

序列化生成的值有以下幾個特點:

它帶有 64 位的校驗和,用於檢測錯誤, RESTORE 在進行反序列化之前會先檢查校驗和。
值的編碼格式和 RDB 檔案保持一致。
RDB 版本會被編碼在序列化值當中,如果因為 Redis 的版本不同造成 RDB 格式不相容,那麼 Redis 會拒絕對這個值進行反序列化操作。
序列化的值不包括任何生存時間資訊。

可用版本:
2.6.0及以上

返回值:
如果 key 不存在,那麼返回 nil 。
否則,返回序列化之後的值。
redis> SET greeting “hello, dumping world!”
OK

redis> DUMP greeting
“\x00\x15hello, dumping world!\x06\x00E\xa0Z\x82\xd8r\xc1\xde”

redis> DUMP not-exists-key
(nil)
3、EXISTS
EXISTS key

檢查給定 key 是否存在。

可用版本:
1.0.0及以上

返回值:
若 key 存在,返回 1 ,否則返回 0 。
redis> SET db “redis”
OK

redis> EXISTS db
(integer) 1

redis> DEL db
(integer) 1

redis> EXISTS db
(integer) 0
4、EXPIRE
EXPIRE key seconds

為給定 key 設定生存時間,當 key 過期時(生存時間為 0 ),它會被自動刪除。

在 Redis 中,帶有生存時間的 key 被稱為『易失的』(volatile)。

生存時間可以通過使用 DEL 命令來刪除整個 key 來移除,或者被 SET 和 GETSET 命令覆寫(overwrite),這意味著,如果一個命令只是修改(alter)一個帶生存時間的 key 的值而不是用一個新的 key 值來代替(replace)它的話,那麼生存時間不會被改變。

比如說,對一個 key 執行 INCR 命令,對一個列表進行 LPUSH 命令,或者對一個雜湊表執行 HSET 命令,這類操作都不會修改 key 本身的生存時間。

另一方面,如果使用 RENAME 對一個 key 進行改名,那麼改名後的 key 的生存時間和改名前一樣。

RENAME 命令的另一種可能是,嘗試將一個帶生存時間的 key 改名成另一個帶生存時間的 another_key ,這時舊的 another_key (以及它的生存時間)會被刪除,然後舊的 key 會改名為 another_key ,因此,新的 another_key 的生存時間也和原本的 key 一樣。

使用 PERSIST 命令可以在不刪除 key 的情況下,移除 key 的生存時間,讓 key 重新成為一個『持久的』(persistent) key 。

更新生存時間

可以對一個已經帶有生存時間的 key 執行 EXPIRE 命令,新指定的生存時間會取代舊的生存時間。

過期時間的精確度

在 Redis 2.4 版本中,過期時間的延遲在 1 秒鐘之內 —— 也即是,就算 key 已經過期,但它還是可能在過期之後一秒鐘之內被訪問到,而在新的 Redis 2.6 版本中,延遲被降低到 1 毫秒之內。

Redis 2.1.3 之前的不同之處

在 Redis 2.1.3 之前的版本中,修改一個帶有生存時間的 key 會導致整個 key 被刪除,這一行為是受當時複製(replication)層的限制而作出的,現在這一限制已經被修復。

可用版本:
1.0.0及以上

返回值:
設定成功返回 1 。
當 key 不存在或者不能為 key 設定生存時間時(比如在低於 2.1.3 版本的 Redis 中你嘗試更新 key 的生存時間),返回 0 。
redis> SET cache_page “www.google.com”
OK

redis> EXPIRE cache_page 30 # 設定過期時間為 30 秒
(integer) 1

redis> TTL cache_page # 檢視剩餘生存時間
(integer) 23

redis> EXPIRE cache_page 30000 # 更新過期時間
(integer) 1

redis> TTL cache_page
(integer) 29996

5、EXPIREAT
EXPIREAT key timestamp

EXPIREAT 的作用和 EXPIRE 類似,都用於為 key 設定生存時間。

不同在於 EXPIREAT 命令接受的時間引數是 UNIX 時間戳(unix timestamp)。

可用版本:
1.2.0及以上

返回值:
如果生存時間設定成功,返回 1 。
當 key 不存在或沒辦法設定生存時間,返回 0 。
redis> SET cache www.google.com
OK

redis> EXPIREAT cache 1355292000 # 這個 key 將在 2012.12.12 過期
(integer) 1

redis> TTL cache
(integer) 45081860

6、KEYS
KEYS pattern

查詢所有符合給定模式 pattern 的 key 。

KEYS * 匹配資料庫中所有 key 。
KEYS h?llo 匹配 hello , hallo 和 hxllo 等。
KEYS h*llo 匹配 hllo 和 heeeeello 等。
KEYS h[ae]llo 匹配 hello 和 hallo ,但不匹配 hillo 。
特殊符號用 \ 隔開

KEYS 的速度非常快,但在一個大的資料庫中使用它仍然可能造成效能問題,如果你需要從一個數據集中查詢特定的 key ,你最好還是用 Redis 的集合結構(set)來代替。
可用版本:
1.0.0及以上

返回值:
符合給定模式的 key 列表。
redis> MSET one 1 two 2 three 3 four 4 # 一次設定 4 個 key
OK

redis> KEYS o(此處是匹配所有含o的key:※o※)
1) “four”
2) “two”
3) “one”

redis> KEYS t??
1) “two”

redis> KEYS t[w]*
1) “two”

redis> KEYS * # 匹配資料庫內所有 key
1) “four”
2) “three”
3) “two”
4) “one”
7、MIGRATE
MIGRATE host port key destination-db timeout [COPY] [REPLACE]

將 key 原子性地從當前例項傳送到目標例項的指定資料庫上,一旦傳送成功, key 保證會出現在目標例項上,而當前例項上的 key 會被刪除。

這個命令是一個原子操作,它在執行的時候會阻塞進行遷移的兩個例項,直到以下任意結果發生:遷移成功,遷移失敗,等待超時。

命令的內部實現是這樣的:它在當前例項對給定 key 執行 DUMP 命令 ,將它序列化,然後傳送到目標例項,目標例項再使用 RESTORE 對資料進行反序列化,並將反序列化所得的資料新增到資料庫中;當前例項就像目標例項的客戶端那樣,只要看到 RESTORE 命令返回 OK ,它就會呼叫 DEL 刪除自己資料庫上的 key 。

timeout 引數以毫秒為格式,指定當前例項和目標例項進行溝通的最大間隔時間。這說明操作並不一定要在 timeout 毫秒內完成,只是說資料傳送的時間不能超過這個 timeout 數。

MIGRATE 命令需要在給定的時間規定內完成 IO 操作。如果在傳送資料時發生 IO 錯誤,或者達到了超時時間,那麼命令會停止執行,並返回一個特殊的錯誤: IOERR 。

當 IOERR 出現時,有以下兩種可能:

key 可能存在於兩個例項
key 可能只存在於當前例項
唯一不可能發生的情況就是丟失 key ,因此,如果一個客戶端執行 MIGRATE 命令,並且不幸遇上 IOERR 錯誤,那麼這個客戶端唯一要做的就是檢查自己資料庫上的 key 是否已經被正確地刪除。

如果有其他錯誤發生,那麼 MIGRATE 保證 key 只會出現在當前例項中。(當然,目標例項的給定資料庫上可能有和 key 同名的鍵,不過這和 MIGRATE 命令沒有關係)。

可選項:

COPY :不移除源例項上的 key 。
REPLACE :替換目標例項上已存在的 key 。
可用版本:
2.6.0及以上

返回值:
遷移成功時返回 OK ,否則返回相應的錯誤。
示例
先啟動兩個 Redis 例項,一個使用預設的 6379 埠,一個使用 7777 埠。

$ ./redis-server &
[1] 3557

$ ./redis-server –port 7777 &
[2] 3560


然後用客戶端連上 6379 埠的例項,設定一個鍵,然後將它遷移到 7777 埠的例項上:

$ ./redis-cli

redis 127.0.0.1:6379> flushdb
OK

redis 127.0.0.1:6379> SET greeting “Hello from 6379 instance”
OK

redis 127.0.0.1:6379> MIGRATE 127.0.0.1 7777 greeting 0 1000
OK

redis 127.0.0.1:6379> EXISTS greeting # 遷移成功後 key 被刪除
(integer) 0
使用另一個客戶端,檢視 7777 埠上的例項:

$ ./redis-cli -p 7777

redis 127.0.0.1:7777> GET greeting
“Hello from 6379 instance”

相關推薦

Redis學習記錄命令KEY()

1、DEL DEL key [key …] 刪除給定的一個或多個 key 。 不存在的 key 會被忽略。 可用版本: 1.0.0及以上 返回值: 被刪除 key 的數量。 1)刪除單個 key redis> SET name huang

Redis學習記錄命令KEY(七)

1、RENAME RENAME key newkey 將 key 改名為 newkey 。 當 key 和 newkey 相同,或者 key 不存在時,返回一個錯誤。 當 newkey 已經存在時, RENAME 命令將覆蓋舊值。 可用版本: 1.0

Redis學習記錄命令List(十一)

1、BLPOP BLPOP key [key …] timeout BLPOP 是列表的阻塞式(blocking)彈出原語。 它是 LPOP 命令的阻塞版本,當給定列表內沒有任何元素可供彈出的時候,連線將被 BLPOP 命令阻塞,直到等待超時或發現可彈出

Redis學習筆記04Redis命令(3)服務器操作

毫秒 上下 set 文件描述符 mil 輸出鏈表 事件 客戶 moni 1.1.1. client list 列出所有客戶端連接信息。 每個連接使用一個id=xxx的行表示。 redis.coe2coe.me:6379> client list id=8 ad

Redis學習筆記06Redis命令(5)事務

mman 客戶 cau 連接 discard 順序 strong 存在 執行命令 1.1.1. multi 開始一個新事務。 redis.coe2coe.me:6379> multi OK 執行此命令後,後面執行的set等命令將被緩存,直到被discard

彙編學習記錄

資料來源:組合語言第二版-王爽 1.段的綜述 我們可以將一段記憶體定義為一個段,用一個段地址指示段,用偏移地址訪問段內的單元,這完全是我們自己的安排。 我們可以用一個段來存放資料,將它定義為“資料段”,將它的段地址放在資料段暫存器ds中,用mov,add,sub等訪問記憶體單元的指令

Redis學習總結()釋出訂閱

一、釋出訂閱 釋出訂閱是訊息傳遞的一種方式,即釋出者釋出訊息,訂閱者獲取訊息,中間傳輸的是一種訊息,所以應該有四個必須的要素:釋出者、訂閱(接受)者、通道、訊息。在Redis裡,由於redis分客戶端和服務端,redis服務端提供服務,所以釋出者(publishser)和訂

redis-學習記錄-key

學習記錄~~ 1. TYPE keyName 2. DEL keyName 3. DUMP keyName 4. EXISTS keyName 5. EXPIRE keyName time_in_second       type keyName #返回key

SQL Server學習記錄獲取每月每季度每年第一天和最後一天

第一天 ediff code spa -1 指定日期 ctc 算法 datetime DECLARE@dtdatetime SET@dt=GETDATE() DECLARE@numberint SET@number=3 --1.指定日期該年的第一天或最後

JavaSE 學習筆記繼承(

內容 訪問 類繼承 mil 抽象方法 ted 內部 -- 中一 繼 承(面向對象特征之一) 好處: 1:提高了代碼的復用性。 2:讓類與類之間產生了關系,提供了另一個特征多態的前提。 父類的由來:其實是由多個類不斷向上抽取共性內容而來的。 java中對於繼承,java只

Python 第八階段 學習記錄---算法

第一個元素 排序 小根堆 () 規律 空間復雜度 場景 復數 練習 算法(Algorithm): 一個計算過程, 解決問題的方法1、遞歸的兩個特點 - 調用自身 - 結束條件時間復雜度 - 時間復雜度是用來估計算法運行時間的一個式子(單位) - 一般

Redis學習記錄

經歷 停止工作 切換 http 基本類 cache 數據保存 map 策略 參考資料: http://www.dengshenyu.com/%E5%90%8E%E7%AB%AF%E6%8A%80%E6%9C%AF/2016/01/09/redis-reactor-patte

SpringBoot-Mybatis_Plus學習記錄公共字段自動填充

ast 使用配置 後臺 pri emp port 更多 但是 pub 一.應用場景 平時在建對象表的時候都會有最後修改時間,最後修改人這兩個字段,對於這些大部分表都有的字段,每次在新增和修改的時候都要考慮到這幾個字段有沒有傳進去,很麻煩。mybatisPlus有一個很

redis學習筆記linux單機版redis安裝

info 目錄 tar daemon exit 單機 技術分享 gre shutdown Redis安裝   下載最新穩定版本: 官網: https://redis.io/     第一步:將redis.tar.gz解壓:tar -zxvf redis-4.0.10.ta

redis學習筆記redis簡介

優先 消息隊列 使用 優先級 開頭 角色 redis 結構 redis命令 redis簡介 Redis是一個開源的,高性能的,基於鍵值對的緩存與存儲系統,通過設置各種鍵值數據類型來適應不同場景下的緩存與存儲需求。同事redis的諸多高層級功能使其可以勝任消息隊列,任務隊列

ElasticSearch學習筆記二十 索引詞聚合

ElasticSearch學習筆記之二十五 索引詞聚合 Terms Aggregation(索引詞聚合) Size Document counts are approximate(文件計數是近似值) Shard Size Calc

ElasticSearch 學習記錄 分散式文件儲存往ES中存資料和取資料的原理

分散式文件儲存 ES分散式特性 遮蔽了分散式系統的複雜性 叢集內的原理 垂直擴容和水平擴容 真正的擴容能力是來自於水平擴容–為叢集新增更多的節點,並且將負載壓力和穩定性分散到這些節點中 ES叢集特點 一個叢集擁有相同

CAN匯流排學習記錄二:系統結構與幀結構

CAN匯流排系統結構 CAN 控制器  接收控制單元中微處理器發出的資料,處理資料並傳給 CAN 收發器 CAN 收發器 將資料傳到匯流排 or 從匯流排接收資料給 CAN 控制器 CAN 資料傳遞終端 避免資料傳輸終了反射回來 CAN 資料匯流排 傳輸資料的資料線,兩根:CAN-hig

CAN匯流排學習記錄三:匯流排中主動錯誤和被動錯誤的通俗解釋

首先建議把廣泛使用的“主動錯誤”和“被動錯誤”概念換成“主動報錯”和“被動報錯”。 1. 主動報錯站點 只要檢查到錯誤,它立即“主動地”發出錯標識。所謂“出錯標識“,它本身就是一個“錯誤的位序列”(連續的6個顯性位,不滿足 CAN 協議的“最多5個連續的同性位”要求),目的是“主動地”告訴大家:即使你們沒

CAN匯流排學習記錄四:位定時與同步

一、位定時 1.1 位元率和波特率 1)位速率:又叫做位元率(bit rata)、資訊傳輸率,表示的是單位時間內,總線上傳輸的資訊量,即每秒能夠傳輸的二進位制位的數量,單位是bit per second。 2)波特率:又叫做傳位元速率、訊號傳輸率,表示的是單位時間內傳輸的碼元的數量,當兩相調製時,一個碼