是否有一个Redis命令获取数据库中的所有键?我见过一些python-redis库获取它们。但我想知道从redis-client是否可以。


当前回答

——>从redis-cli获取所有密钥

-redis 127.0.0.1:6379> keys *

——>获取图案列表

-redis 127.0.0.1:6379> keys d??

这将生成以'd'开头的三个字符的键。

-redis 127.0.0.1:6379> keys *t*

这将获得在键中匹配't'字符的键

——>从命令行计数键

-redis-cli keys * |wc -l

或者你也可以使用dbsize

-redis-cli dbsize

其他回答

对于那些需要typescript helper的人(使用ioredis)

import Redis from 'ioredis';
import { from, Observable, of } from 'rxjs';
import { first, mergeMap } from 'rxjs/operators';

export function scanKeysFromRedis(redisStore: Redis.Redis, key: string, 
target: number = 0, keys: string[] = []): Observable<string[]> {
  return from(redisStore.scan(target, 'MATCH', key)).pipe(
    first(),
    mergeMap((_keys) => {
      const _target = Number(_keys[0]);
      if (_target !== 0) {
        return scanKeysFromRedis(redisStore, key, _target, [...keys, ..._keys[1]]);
       }
      return of([...keys, ..._keys[1]]);
    }),
  );
}

并调用它:scanKeysFromRedis(store, 'hello');

看看下面的Redis小抄。 要使用redis-cli获取一个redis键的子集,我使用这个命令

KEYS "prefix:*"

SCAN不像keys那样要求客户端将所有键加载到内存中。SCAN提供了一个可以使用的迭代器。我的redis里有1B条记录,我永远都没有足够的内存来一次性归还所有的键。

下面是一个python代码片段,用于从匹配模式的存储中获取所有键并删除它们:

import redis
r = redis.StrictRedis(host='localhost', port=6379, db=0)
for key in r.scan_iter("key_pattern*"):
    print key

针对Redis 2.8及以上版本更新

正如在之前回答这个问题的评论中所指出的,KEYS是一个潜在的危险命令,因为您的Redis服务器在服务时将不可用,无法执行其他操作。使用KEYS的另一个风险是,它可能会消耗(取决于密钥空间的大小)大量RAM来准备响应缓冲区,因此可能耗尽服务器的内存。

Redis的2.8版引入了SCAN系列命令,这些命令更加礼貌,可以用于相同的目的。

CLI还提供了一种很好的方式来使用它:

$ redis-cli --scan --pattern '*'

使用redis-cli,你可以连接到你的远程redis-server,然后命令:

KEYS *

没有显示任何东西,或者更好,它显示: (空列表或集合)

如果你绝对确定你使用的Redis服务器就是你拥有数据的服务器,那么可能你的Redis -cli没有连接到正确的Redis数据库实例。

正如Redis文档中提到的,新连接默认连接到db 0。

在我的情况下,KEYS命令没有检索结果,因为我的数据库是1。为了选择您想要的db,请使用select。 db用整数标识。

SELECT 1
KEYS *

我发布这个信息是因为之前的答案都没有解决我的问题。