如何在Redis中检查键是否存在?

7

我有一个Laravel模型中的函数,需要检查我的键($key变量)是否存在于Redis中,换句话说,我想制定一个条件来防止Redis中出现重复结果。以下是我的函数。感谢任何帮助。

function

public static function cacheFields($fields)
{
    foreach ($fields as $fieldname => $values) {

        $key = static::$redisFieldKey.$fieldname; // here is that variable

        Redis::pipeline(function ($pipe) use ($key, $values) {
            foreach ($values as $value => $label) {
                $pipe->hset($key, $value, $label);
            }
        });
    }
}

哪一部分会被复制?哈希和哈希键是唯一的。 - Ersoy
$key = static::$redisFieldKey.$fieldname; 我遇到过这种情况,有时会出现重复。 - mrmar
1个回答

7

当你对不存在的键执行hset时,它将使用该字段及其相应值设置您的哈希。当您针对现有哈希(和字段键)执行此操作时,它将更新现有哈希字段的哈希值。

127.0.0.1:6379> hset myhash myhashfield myvalue
(integer) 1
127.0.0.1:6379> hgetall myhash
1) "myhashfield"
2) "myvalue"
127.0.0.1:6379> hset myhash myhashfield anothervalue
(integer) 0
127.0.0.1:6379> hgetall myhash
1) "myhashfield"
2) "anothervalue"
127.0.0.1:6379>

如果你仍想检查键是否存在,可以使用 exists O(1)

127.0.0.1:6379> exists myhash
(integer) 1
127.0.0.1:6379> exists nonexisting
(integer) 0

如果您想检查哈希字段是否存在,可以使用hexists O(1)

127.0.0.1:6379> hexists myhash myhashfield
(integer) 1
127.0.0.1:6379> hexists myhash nonfield
(integer) 0
127.0.0.1:6379> hexists notmyhash myfield
(integer) 0

编辑:

文档指出,对于 hset 操作:

将哈希表 key 中的字段设置为指定值。如果 key 不存在,则创建一个新的哈希表。如果字段已经存在,则覆盖其原有的值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接