我在Redis中有一个巨大的hashmap,它继续增长。每天大约5万,在随后的几天,这个数字会变得更少,因为相同的键会重复。我想将此hashmap限制为100万个键值对。我想基于LRU这样做。
我知道我可以使用Redis的排序集以时间戳作为值并删除不在范围内的条目,但是我需要保留键值对结构,当我移动到排序集时我会错过键值结构,因为值将是时间戳,我需要在键中执行一些字符串操作以实现等效的哈希功能(不可行)。
所以我的要求是:
我可以用哈希实现吗?我也对其他建议持开放态度?提前致谢
答案 0 :(得分:4)
为什么不同时使用HASH
和Sorted Set
。
将数据保存在
中HASH
HSET KEY FIELD VALUE
将您的数据保存在HASH
中,即可实现"键值对结构" 和"根据给定值获取值键或多个键" 。
使用
实施LRUSorted Set
ZADD KEY TIMESTAMP FIELD
使用Sorted Set
,您可以将时间戳保存为字段的分数。每次访问HASH
中的字段时,请使用当前时间戳更新字段的分数。
如果Sorted Set
中的成员数量大于一百万,请获取分数太小的字段(zcard
和zrange
)。然后删除HASH
和Sorted Set
中的这些字段。