RedisのHASH、SET、ZSET 型で、要素数が0になると、キーそのものが削除されるので、注意した方が良い
あまり使わないだろうけど、単体テストでZSETに対してEXISTSを使っていたら、思ってたのと違う挙動した。
概要
メンバー数が0になると、キー自体が削除されるっぽい。
PHPでいえば、以下のような挙動をする。
<?php
$set[] = 'a';
array_pop($set);
var_dump($set);
// PHPならarray(0) だが、
// Redisだと"Undefined variable"になる。
検証
Hash
127.0.0.1:6379[255]> FLUSHALL
OK
127.0.0.1:6379[255]> HSET myh a aa
(integer) 1
127.0.0.1:6379[255]> HGETALL myh
1) "a"
2) "aa"
127.0.0.1:6379[255]> GET myh
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379[255]> EXISTS myh
(integer) 1
127.0.0.1:6379[255]> HDEL myh a
(integer) 1
127.0.0.1:6379[255]> HGETALL myh
(empty list or set)
127.0.0.1:6379[255]> GET myh
(nil)
127.0.0.1:6379[255]> EXISTS myh
(integer) 0
Set
127.0.0.1:6379[255]> SADD mys a
(integer) 1
127.0.0.1:6379[255]> SMEMBERS mys
1) "a"
127.0.0.1:6379[255]> GET mys
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379[255]> EXISTS mys
(integer) 1
127.0.0.1:6379[255]> SREM mys a
(integer) 1
127.0.0.1:6379[255]> SMEMBERS mys
(empty list or set)
127.0.0.1:6379[255]> GET mys
(nil)
127.0.0.1:6379[255]> EXISTS mys
(integer) 0
Sorted Set
127.0.0.1:6379[255]> ZADD myz 0 a
(integer) 1
127.0.0.1:6379[255]> ZRANGE myz 0 -1 withscores
1) "a"
2) "0"
127.0.0.1:6379[255]> GET myz
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379[255]> EXISTS myz
(integer) 1
127.0.0.1:6379[255]> ZREM myz a
(integer) 1
127.0.0.1:6379[255]> ZRANGE myz 0 -1 withscores
(empty list or set)
127.0.0.1:6379[255]> GET myz
(nil)
127.0.0.1:6379[255]> EXISTS myz
(integer) 0
Author And Source
この問題について(RedisのHASH、SET、ZSET 型で、要素数が0になると、キーそのものが削除されるので、注意した方が良い), 我々は、より多くの情報をここで見つけました https://qiita.com/ndxbn/items/d4b9dc27809f40b70ec5著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .