如何在48小时后从Redis删除数据?

时间:2016-05-23 10:50:32

标签: php arrays redis cron

我在这里使用PHP在Redis中保存数据。我有一个Cron随着时间的推移获得一些数据。这个Cron将每5分钟运行一次。在这里,我使用hSet来存储数据。

$datetime = date("H.i");

$redisforhttp2->hSet(MACHINE.':count',$datetime,$count);

所以我会得到这样的数据

 [
    "13.25": "64",
    "14.50": "96",
    "14.52": "65",
    "14.54": "39",
    "14.55": "48",
    "14.56": "68",
    "15.03": "66",
    "15.05": "61",
    "15.07": "60",
    "15.10": "41",
    "15.11": "72",
    "15.14": "53"
  ]

两天或几天后,它将拥有大量数据。所以我想在48小时后从redis中删除数据。

if(strtotime($dateFromDatabase." + 48 hours") <= strtotime("now"))
{
  //Deleting data from Redis.
}

所以我认为hDel对此有好处。但是在这里,hashKey是动态的(时间)。对于这种情况,哪个是强大的解决方案?请建议我。

  

更新

$datetime用于创建动态图表。 这里的计数是HTTP count

1 个答案:

答案 0 :(得分:1)

要实现这一点,您需要对数据结构进行一些妥协。而不是具有相同的哈希名称创建从date开始的动态哈希。例如2016-05-21_MACHINE。&#39;:count&#39;将是你今天的关键,明天将是2016-05-22_MACHINE。&#39;:count&#39;。您可以每天运行一个crontab来删除旧的哈希值。

如果您认为在删除之前会产生太多数据,请尝试类似这样的时间戳/(1000 * 60 * 60),无论日期如何,都会给您一个唯一的小时值。用钥匙贴上它。并且每小时运行一次crontab,这将删除超过48小时的哈希值。

此外,您还需要处理hget和hgetall所在的区域。