首页 > 解决方案 > 如何检查密钥是否存在于 Redis 中?

问题描述

我在 Laravel 模型中有一个函数,我需要检查我的键($key 变量)是否存在于 Redis 中,换句话说,我想创建一个条件,不允许来自 redis 的重复结果。这是我的功能。任何帮助表示赞赏。

功能

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);
            }
        });
    }
}

标签: phplaravelredis

解决方案


当您hset对不存在的键执行时,它将set使用该字段及其对应的值进行散列。当您针对现有哈希(和字段键)执行它时,它将update现有哈希字段的哈希值。

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>

如果你想检查密钥是否存在,你可以使用existsO(1)

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

如果要检查哈希字段是否存在,可以使用hexistsO(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。如果字段已存在于哈希中,则将其覆盖。


推荐阅读