【发布时间】:2016-05-06 15:13:38
【问题描述】:
我正在遍历数据并将一些数据转储到 Redis 数据库。这是一个例子:
hmset id:1 用户名“bsmith1”部门“会计”
如何动态增加唯一 ID,然后在下一个 hmset 命令期间使用它?这似乎是一个显而易见的问题,但我找不到答案。
【问题讨论】:
我正在遍历数据并将一些数据转储到 Redis 数据库。这是一个例子:
hmset id:1 用户名“bsmith1”部门“会计”
如何动态增加唯一 ID,然后在下一个 hmset 命令期间使用它?这似乎是一个显而易见的问题,但我找不到答案。
【问题讨论】:
使用另一个键,一个字符串,用于存储最后一个 ID。在调用HMSET 之前,在该键上调用INCR 以获取下一个ID。将这两个命令包装在 MULTI/EXEC 块或 Lua 脚本中,以确保事务的原子性。
【讨论】:
就像 Itamar 提到的,您可以将索引/计数器存储在单独的键中。在此示例中,我为该键选择了名称 index。
Python 3
KEY_INDEX = 'index'
r = redis.from_url(host)
def store_user(user):
r.incr(KEY_INDEX, 1) # If key doesn't exist it will get created
index = r.get(KEY_INDEX).decode('utf-8') # Decode from byte to string
int_index = int(index) # Convert from string to int
result = r.set('user::%d' % int_index, user)
...
请注意,user::<index> 是我选择的任意键。你可以使用任何你想要的东西。
如果您有多台机器写入同一个数据库,您可能希望使用pipelines。
【讨论】: