熟悉每個資料操作前一定要明白每個操作都是代價,以時間複雜度和對應查詢集或者結果集大小為衡量。時間複雜度收斂狀況如下:
有3個通配符 *, ? ,[]
*: 通配任意多個字元
?: 通配單個字元
[]: 通配括号内的某1個字元
注:生産已經禁止。更安全的做法是采用scan,原理和操作如下: 針對keys的改進,支援分頁查詢key。在疊代過程中,keys有增删時不會要鎖定寫操作,資料集完整度不做任何保證,同一條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>