天天看點

Redis開發運維實踐指南資料操作之key操作資料操作2.1.1 列出key2.1.2 測試指定key是否存在2.1.3 删除給定key2.1.4 傳回給定key的value類型2.1.5 傳回從目前資料庫中随機選擇的一個key2.1.6 原子的重命名一個key2.1.7 Key的逾時設定處理

熟悉每個資料操作前一定要明白每個操作都是代價,以時間複雜度和對應查詢集或者結果集大小為衡量。時間複雜度收斂狀況如下:

Redis開發運維實踐指南資料操作之key操作資料操作2.1.1 列出key2.1.2 測試指定key是否存在2.1.3 删除給定key2.1.4 傳回給定key的value類型2.1.5 傳回從目前資料庫中随機選擇的一個key2.1.6 原子的重命名一個key2.1.7 Key的逾時設定處理

有3個通配符 *, ? ,[]

*: 通配任意多個字元

?: 通配單個字元

[]: 通配括号内的某1個字元

注:生産已經禁止。更安全的做法是采用scan,原理和操作如下:
Redis開發運維實踐指南資料操作之key操作資料操作2.1.1 列出key2.1.2 測試指定key是否存在2.1.3 删除給定key2.1.4 傳回給定key的value類型2.1.5 傳回從目前資料庫中随機選擇的一個key2.1.6 原子的重命名一個key2.1.7 Key的逾時設定處理
針對keys的改進,支援分頁查詢key。在疊代過程中,keys有增删時不會要鎖定寫操作,資料集完整度不做任何保證,同一條key可能會被傳回多次.
Redis開發運維實踐指南資料操作之key操作資料操作2.1.1 列出key2.1.2 測試指定key是否存在2.1.3 删除給定key2.1.4 傳回給定key的value類型2.1.5 傳回從目前資料庫中随機選擇的一個key2.1.6 原子的重命名一個key2.1.7 Key的逾時設定處理
Redis開發運維實踐指南資料操作之key操作資料操作2.1.1 列出key2.1.2 測試指定key是否存在2.1.3 删除給定key2.1.4 傳回給定key的value類型2.1.5 傳回從目前資料庫中随機選擇的一個key2.1.6 原子的重命名一個key2.1.7 Key的逾時設定處理
對于其他危險的指令,新版本也進行了替代:
Redis開發運維實踐指南資料操作之key操作資料操作2.1.1 列出key2.1.2 測試指定key是否存在2.1.3 删除給定key2.1.4 傳回給定key的value類型2.1.5 傳回從目前資料庫中随機選擇的一個key2.1.6 原子的重命名一個key2.1.7 Key的逾時設定處理

redis-cli下的掃描:

這是用scan指令掃描redis中的key,--pattern選項指定掃描的key的pattern。相比keys pattern模式,不會長時間阻塞redis而導緻其他用戶端的指令請求一直處于阻塞狀态。

傳回1表示存在,0不存在

傳回1表示存在,0不存在、

傳回 none 表示不存在key。string字元類型,list 連結清單類型 set 無序集合類型...

如果目前資料庫是空的,傳回空串

如果newkey存在,将會被覆寫,傳回1表示成功,0失敗。可能是oldkey不存在或者和newkey相同

同上,但是如果newkey存在傳回失敗、

機關是秒。傳回1成功,0表示key已經設定過過期時間或者不存在。 如果想消除逾時則使用persist key。如果希望采用絕對逾時,則使用expireat指令。

傳回設定過過期時間的key的剩餘過期秒數 -1表示沒有設定過過期時間,對于不存在的key,傳回-2。

設定生命周期。

以毫秒傳回生命周期。

注意: 當client主動通路key會先對key進行逾時判斷,過時的key會立刻删除。 如果clien永遠都不再get那條key呢? 它會在master的背景,每秒10次的執行如下操作: 随機選取100個key校驗是否過期,如果有25個以上的key過期了,立刻額外随機選取下100個key(不計算在10次之内)。可見,如果過期的key不多,它最多每秒回收200條左右,如果有超過25%的key過期了,它就會做得更多,但隻要key不被主動get,它占用的記憶體什麼時候最終被清理掉隻有天知道。 在主從複制環境中,由于上述原因存在已經過期但是沒有删除的key,在主snapshot時并不包含這些key,是以在slave環境中我們往往看到dbsize較master是更小的。 <b></b> <b>本文為《redis開發運維實踐指南》内容,該書作者為黃鵬程,已授權雲栖社群轉載。</b>