【问题标题】:Updating Redis hash safely安全更新 Redis 哈希
【发布时间】:2018-01-09 00:24:02
【问题描述】:

我在 redis 中有一个哈希。它有 20 个键/值对。我想每小时更新一次并删除旧元素。删除哈希键内容并填充新值的最佳方法是什么。由于 HASH 是 API 的一部分,因此当我从 HASH 中删除所有元素时,我不想引起任何竞争条件。我不想使用EXPIRE,因为我想控制日程安排。

我创建了以下模型。假设 Faker() 是我获取新值的 API。我想向 HASH 添加新值并删除旧值。

    import redis
    import json
    from faker import Faker

    try:
        r = redis.StrictRedis(host='localhost', port=6379, db=0)
        fake = Faker()
        for _ in range(20):
            userId = fake.uuid4()
            user = {"name":fake.name(),"address":fake.address(),"country":fake.country()}
            r.hset('users',userId,json.dumps(user))

    except Exception as e:
        print ('Error',e)

【问题讨论】:

  • 你能重命名哈希集吗?如果是这样,建立一个新的,并切换名称。
  • 我可以重命名它们,但 API 客户端将如何知道新的哈希集或如何摆脱旧的哈希集。我不想在重命名和删除过程中造成任何混乱。

标签: python redis


【解决方案1】:

使用DEL 命令删除哈希怎么样?您可以将其包装在一个还设置 (HSET) 新值的事务中。

【讨论】:

    【解决方案2】:

    “删除 HASH 键的内容并填充新值的最佳方法是什么。”只需更新它,至少如果您正在更新...所以 hset(hash, key, newvalue) 或 hmset(hash, newvalues_dictionary) - 这种方法有什么不好?

    【讨论】:

    • 我想摆脱旧内容。添加新内容后,旧内容不得存在。当 API 客户端请求 HSET 时,他们不应该获取旧内容。如果我在请求集合时添加 HSET,它也会返回旧的。
    猜你喜欢
    • 2019-03-13
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    相关资源
    最近更新 更多