是否有机会取回密钥存储在 Redis 中的日期时间?
Is there any chance to get back the date time when a Key was stored in Redis?
好吧,我想这个问题本身就是不言自明的。
我想知道何时存储或修改了密钥(即上次修改时间)那将是日期时间或 unixts。绝对不是TTL。
这对于实现计数器和每一次检查增量很有用。并将增量与持续时间进行比较。
也许有更好的方法?
或者唯一的解决方案是存储具有日期时间和计数属性的对象?而不是简单的值?
不,您无法获取该数据,因为 Redis 不存储任何其他 TTL。是的,您可以使用一些元数据解决方案来获得它。
类似于(php 示例):
function setKey($key, $value) {
$redis->set($key, $value);
$redis->hSetNx($key . 'meta', 'createdAt', time());
$redis->hSet($key . 'meta', 'updatedAt', time());
}
function setKeyTtl($key, $ttl) {
$redis->ttl($key, $ttl);
$redis->hSet($key . 'meta', 'ttlSetAt', time());
$redis->hSet($key . 'meta', 'ttl', $ttl);
$redis->ttl($key . 'meta', $ttl + 3600);
}
使用HSET作为元数据存储。对应该只设置一次的字段使用 hSetNx(例如 createdAt
)。您应该了解元 ttl 的解决方法 - 在我的示例中,我使用元 ttl 作为密钥 ttl + 1 小时。根据您想要的业务逻辑,这里有许多不同的案例。
好吧,我想这个问题本身就是不言自明的。 我想知道何时存储或修改了密钥(即上次修改时间)那将是日期时间或 unixts。绝对不是TTL。
这对于实现计数器和每一次检查增量很有用。并将增量与持续时间进行比较。
也许有更好的方法?
或者唯一的解决方案是存储具有日期时间和计数属性的对象?而不是简单的值?
不,您无法获取该数据,因为 Redis 不存储任何其他 TTL。是的,您可以使用一些元数据解决方案来获得它。
类似于(php 示例):
function setKey($key, $value) {
$redis->set($key, $value);
$redis->hSetNx($key . 'meta', 'createdAt', time());
$redis->hSet($key . 'meta', 'updatedAt', time());
}
function setKeyTtl($key, $ttl) {
$redis->ttl($key, $ttl);
$redis->hSet($key . 'meta', 'ttlSetAt', time());
$redis->hSet($key . 'meta', 'ttl', $ttl);
$redis->ttl($key . 'meta', $ttl + 3600);
}
使用HSET作为元数据存储。对应该只设置一次的字段使用 hSetNx(例如 createdAt
)。您应该了解元 ttl 的解决方法 - 在我的示例中,我使用元 ttl 作为密钥 ttl + 1 小时。根据您想要的业务逻辑,这里有许多不同的案例。