如何添加跑步到Redis?

wn9m85ua  于 2022-11-21  发布在  Redis
关注(0)|答案(2)|浏览(109)

从几个服务器,我想添加键,如doc:1,然后doc:2等。
现在,为了避免不同的服务器同时尝试添加到doc:2,我认为有一些类似“add to doc:{index}”的机制,索引会自动转移。
有什么办法能让它起作用吗?

hmmo2u0o

hmmo2u0o1#

您可以使用分布式锁并让赢家写入

for each server, attempt to acquire lock until success
on acquire lock
  read numeric value
  increment
  write
  release lock

文档

ioekq8ef

ioekq8ef2#

您 可以 使用 每次 添加 时 递增 的 键 :INCR 命令 以 原子 方式 执行 此 操作 , 并 返回 增量 值 , 您 可以 使用 该 值 生成 新 的 键名 。

> INCR counter
42

> SET doc:42 foobar
OK

中 的 每 一 个

    • Update * * : 如果 您 希望 整个 操作 集 ( 递增 计数 器 和 设置 值 ) 都 是 原子 操作 , 则 可以 执行 Lua 脚本 :
> EVAL "local value = redis.call('INCR', 'counter'); redis.call('SET', 'doc:'..value, ARGV[1])" 0 foobar
(nil)

格式
说明 :

local value = redis.call('INCR', 'counter');

格式
执行 INCR counter 并 将 结果 存储 在 value 变量 中 。

redis.call('SET', 'doc:'..value, ARGV[1]);

格式
使用 通过 第 一 个 EVAL 参数 传递 的 数据 ( 在 我们 的 示例 中 为 * foobar * ) , 对 以 doc:value 变量 的 串联 命名 的 键 执行 SET
最 后 , 如果 您 需要 将 递增 的 计数 器 值 返回 给 调用 方 , 只需 将 最 后 一 个 return value; 块 附加 到 脚本 中 。

相关问题