当前位置: 首页 > 面试题库 >

存储前缀在Redis中到期的密钥

阚通
2023-03-14
问题内容

尝试使用键前缀存储过期时间x的值

我正在使用Redis。我目前正在使用hset存储值

import redis


r = redis.StrictRedis('localhost')


for i in range(10):
    r.hset('name', i, i)


print(r.hgetall('name'))

我希望每个密钥都有不同的到期时间,因为我将分别存储每个密钥。

我该怎么做呢?


问题答案:

这不能直接完成。您可以在整个hset上添加有效期,但不能在单个字段上添加。如果要执行此操作,可以调用r.expire('name', time),其中time是到期之前的秒数。

或者,您可以使用set代替hset

for i in range(10):
    r.set('name:' + str(i), i, ex=time_to_expire_s)

这将带走某些功能,因为(例如)您将没有一种好的方法来列出所有以’name:’开头的键,但是它将让您独立设置键的到期时间。

第二种选择是,您可以在中设置过期时间hset。这需要客户端逻辑,Redis不会为您做任何事情。但您可以执行以下操作:

for i in range(10):
    r.hset(
        'name',
        i,
        json.dumps({ 'value': i, 'expiration': time.time() + time_to_expire_s })
    )

然后,如果您曾经读取过期的值,则认为这是缓存未命中。如果您试图使密钥过期以释放内存,这将无济于事,但是如果您的目标是出于某种正确性原因使密钥过期,那么这可能对您有用。



 类似资料:
  • 问题内容: 使用&等redis expire 命令时,在某些情况下根本不需要键来保存值,因为 生存时间 就是这样。 __ 但是,redis要求任何键具有值。 如果您不想阅读它,最合理的使用价值是什么? 问题答案: 谁说您实际上应该在Redis密钥中存储任何内容? 空字符串是redis密钥的完美有效值,并且它是最短的一个:

  • 我按照web上一些教程使用redis设置Spring缓存,

  • 问题内容: 我正在使用Redis来存储一些信息并检测该信息随时间的变化(例如,考虑用户和位置)。使用更长或更短的键名的值是什么?使用更长的键会更清楚,但是使用更长的键名是否会在内存或性能上付出很多成本? 以下是示例: 要么 问题答案: 这完全取决于您将如何使用它。如果每个字节都很重要,例如,当您必须为传输到云服务的每个kB支付费用时,您可以计算成本。数学很简单;一个字节是“在线”上的一个字节。在r

  • 问题内容: 在我的设置中,该命令向我显示以下内容: 我想找到没有到期日期的那三个键。我已经检查了文档无济于事。有任何想法吗? 问题答案: 从我现在找不到的网站修改。 编辑:注意,这是一个阻止呼叫。

  • 问题内容: 我在Redis中存储MessagePacked哈希时遇到问题。我在下面粘贴了一个测试用例。从Redis中提取打包数据并对其进行解压缩时,哈希会略有损坏。当哈希值超出一定长度时,似乎会发生这种情况,尽管我不能肯定地说。 我正在使用Redis 2.4.17(默认配置),Ruby 1.9.3p194,MessagePack 0.4.7和Redis gem 3.0.2。使用节点也会发生相同的问

  • 问题内容: 我想设置一些哈希键的到期时间,如果是第一次设置该键,我希望设置一个到期时间,否则,我更喜欢保留第一次设置的到期时间。 由于存在大量的哈希键,因此我更喜欢在管道中进行此操作,但是下面的功能无法正常工作。 该行返回管道的obj,该对象始终为True,因此无论是否存在哈希键,if子句始终只包含一部分。 我的问题是:是否有一种方法可以根据管道中哈希密钥的存在来设置哈希密钥的到期时间? 问题答案