如何在“redis”中“EXPET”“HSET”子键?
我需要在redis哈希中过期所有的密钥,这些都比1个月早。
这是不可能的 ,为了保持Redis简单 。
神不愿意:
嗨,这是不可能的,要么使用不同的顶级密钥的具体领域,或存储与字段另一个字段的过期时间,获取两个,让应用程序了解,如果它仍然是有效的基础上当前时间。
有一个Redisson java框架,它实现了带入口TTL支持的散列Map
对象。 它使用hmap
和zset
Redis对象。 用法示例:
RMapCache<Integer, String> map = redisson.getMapCache('map'); map.put(1, 30, TimeUnit.DAYS); // this entry expires in 30 days
这种方法非常有用。
您可以。 这是一个例子。
redis 127.0.0.1:6379> hset key f1 1 (integer) 1 redis 127.0.0.1:6379> hset key f2 2 (integer) 1 redis 127.0.0.1:6379> hvals key 1) "1" 2) "1" 3) "2" redis 127.0.0.1:6379> expire key 10 (integer) 1 redis 127.0.0.1:6379> hvals key 1) "1" 2) "1" 3) "2" redis 127.0.0.1:6379> hvals key 1) "1" 2) "1" 3) "2" redis 127.0.0.1:6379> hvals key
使用EXPIRE或EXPIREAT命令。
如果你想过期哈希特定的键大于1个月。 这不可能。 Redis过期命令适用于散列中的所有密钥。 如果你设置每日散列键,你可以设置一个键的生存时间。
hset key-20140325 f1 1 expire key-20140325 100 hset key-20140325 f1 2
关于NodeJS的实现,我在Hash中保存的对象中添加了一个自定义的expiryTime字段。 然后,在特定的时间段之后,我只是通过使用以下代码清除过期的HASH条目:
client.hgetall(HASH_NAME, function(err, reply) { if (reply) { Object.keys(reply).forEach(key => { if (reply[key] && JSON.parse(reply[key]).expiryTime < (new Date).getTime()) { client.hdel(HASH_NAME, key); } }) } });
最好的乔治