簡體   English   中英

Redis:KEYS *的結果如何排序?

[英]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功能。

無論如何, keysscan結果都沒有以任何方式排序,結果的順序與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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM