Как проверить, существует ли ключ в Redis? - PullRequest
3 голосов
/ 05 мая 2020

У меня есть функция в модели 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);
            }
        });
    }
}

1 Ответ

2 голосов
/ 05 мая 2020

Когда вы выполняете hset для несуществующего ключа, он будет set ваш ha sh с полем и соответствующим ему значением. Когда вы выполняете его для существующего поля ha sh (и ключа поля), он будет update значение ha sh существующего поля ha sh.

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

Если вы хотите проверить, существует ли поле ha sh, вы можете использовать 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;

Устанавливает поле в ha sh, хранящемся в ключ к значению. Если ключ не существует, создается новый ключ, содержащий ha sh. Если поле уже существует в ha sh, оно перезаписывается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...