Redis查询所有key报错(empty list or set)

时间:2024-03-22 08:12:27

Redis查询所有key报错(empty list or set)
但是我在node.js中是能取到数据的。

仔细检查发现原来我node把key都创建在了redis的db2中,而redis-cli默认查询的是db0的内容,所以查询不到。

解决方法:

切换db: select 2
查询数据: keys *

根据网上的方法select 2,但是就出现另外一个新问题。再尝试解决这个新问题
Redis查询所有key报错(empty list or set)
解决办法:
redis集群版只使用db0,select命令虽然能够支持select 0。其他的db都会返回错误。
127.0.0.1:6379> select 0
OK
127.0.0.1:6379> select 1
(error) ERR SELECT is not allowed in cluster mode

redis集群版对多key命令的支持,只能支持多key都在同一个slot上,即使多个slot在一个节点上也不行。

127.0.0.1:6379> mget key7 key28
(error) CROSSSLOT Keys in request don’t hash to the same slot

事务的支持只能在也一个slot上完成。MULTI命令之后的命令的key必须都在同一个slot上,如果某条命令的key对应不在相同的slot上,则事务直接回滚。迁移的时候,在迁移源节点执行命令的key必须在移原节点上存在,否则事务就会回滚。在迁移目的节点执行的时候需要先执行ASKING命令再执行MULTI命令,这样接下来该slot的命令都能被执行。可以看出,对于单key和相同hash tags的事务,集群还是能很好的支持。
在迁移的时候有个地方需要注意,对于多key命令在迁移目的节点执行时,如果多个key全在该节点上,则命令无法执行。如下所示,key和key14939对应的slot为12539,执行命令的节点是迁移目的节点:

127.0.0.1:6379> asking
OK
127.0.0.1:6379> mget key key14939
(error) TRYAGAIN Multiple keys request during rehashing of slot

Redis查询所有key报错(empty list or set)