您正在寻找HMGET和HMSET的组合。根据文档:
HMGET 关键字段 [字段 ...]
返回与存储在 key 的哈希中的指定字段关联的值。
对于散列中不存在的每个字段,返回一个 nil 值。因为不存在的键被视为空哈希,所以对不存在的键运行 HMGET 将返回一个 nil 值列表。
HMSET 键字段值 [字段值 ...]
将指定字段设置为存储在 key 的哈希中的各自值。此命令会覆盖散列中的任何现有字段。如果 key 不存在,则创建一个包含哈希的新 key。
然后,您想要做的是从 has 中检索您的值,对其执行任何看起来合适的操作,并保存以前的值。
另一个可能更好的解决方案是使用HINCRBY。如果您坚持使用时间戳,您可以在不执行 get 操作的情况下增加字段:
HINCRBY 键域增量
以增量方式递增存储在 key 的哈希中存储在字段中的数字。如果 key 不存在,则创建一个包含哈希的新 key。如果字段不存在,则在执行操作之前将值设置为 0。
HINCRBY 支持的值范围限于 64 位有符号整数。
不过,您可能需要重新构建哈希才能使其正常工作,除非有办法深入了解您的 g1/g2 字段(stackoverflow 社区,如果您知道方法,请随时编辑此答案或评论它)。这样的结构应该可以工作:
{
enabled : true,
timestamp_g1 : 0,
timestamp_g2 : 0
}