[英]Redis: How is the result of KEYS * sorted?
我有一個非常簡單的php redis應用程序,可以在某些事件中創建密鑰。 所有鑰匙都只是櫃台,過期時間為24小時。 基本上是每個鍵24小時滾動窗口,以收集一些統計信息。
if ($redis->exists($key)) {
$redis->incr($key);
}
else {
$redis->set($key, '1');
$now = time(); // current timestamp
$redis->expireAt($key, $now + 86400);
}
當我使用$list = $redis->keys("*");
提取所有鍵的概述時$list = $redis->keys("*");
(或者在帶有keys *
的redis-cli控制台中),我懷疑按創建日期按時間順序排列。 然而,事實並非如此。 它們都沒有按字母順序排序,按價值排序......
所以我的問題是,這個列表是如何排序的?
首先,不要使用keys *
它不是為生產而設計的調試功能,你可以殺死你的服務器......如果你需要安全地枚舉DB中的所有密鑰,請使用帶LIMIT
SCAN
功能。
無論如何, keys
或scan
結果都沒有以任何方式排序,結果的順序與redis的哈希表的內部存儲器結構有關。
關於你的php腳本,你可以通過一個命令來完成,沒有exists
set
expireat
只是運行:
SET key 1 EX 86400 NX
EX 86400
平均值從現在起86400(1天)后到期
NX
意味着只有在密鑰不存在時才創建密鑰。
如果此命令返回(nil)運行常規INCR key
,則表示該鍵已存在。 BTW INCR
命令不會刪除您的過期設置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.