604

是否有用于获取数据库中所有键的 Redis 命令?我已经看到一些 python-redis 库获取它们。但想知道是否可以从 redis-client 获得。

4

16 回答 16

845

尝试查看KEYS命令。KEYS *将列出存储在 redis 中的所有密钥。

编辑:KEYS请注意文档页面顶部的警告:

时间复杂度: O(N),其中 N 是数据库中的键数,假设数据库中的键名和给定模式的长度有限。

UPDATE(V2.8 或更高版本): SCAN是一种更好的替代方案KEYS,因为它不会阻塞服务器,也不会消耗大量资源。更喜欢使用它。

于 2011-03-09T21:40:41.547 回答
182

针对 Redis 2.8 及更高版本更新

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

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

CLI 还提供了一种使用它的好方法:

$ redis-cli --scan --pattern '*'
于 2014-05-26T21:21:35.467 回答
88

使用 redis-cli 可能会连接到远程 redis 服务器,然后使用以下命令:

KEYS *

没有显示任何内容,或者更好的是,它显示:
(empty list or set)

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

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

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

SELECT 1
KEYS *

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

于 2016-04-11T11:43:20.290 回答
40

--> 从 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
于 2016-06-27T04:42:13.500 回答
24

看看下面的Redis 备忘单。要使用 redis-cli 获取 redis 键的子集,我使用命令

KEYS "prefix:*"
于 2015-09-24T11:23:41.803 回答
22

获取 Redis 中的所有键

使用 --scan 选项获取所有密钥:

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

使用 KEYS 命令列出所有键:

$ redis-cli KEYS '*'
于 2020-05-05T06:49:30.103 回答
8

是的,您可以使用此获取所有密钥

var redis = require('redis');
redisClient = redis.createClient(redis.port, redis.host);    
  redisClient.keys('*example*', function (err, keys) {
})
于 2016-05-26T11:06:43.477 回答
6

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
于 2016-09-28T20:22:04.850 回答
5
redis-cli -h <host> -p <port> keys * 

其中 * 是列出所有键的模式

于 2017-10-05T07:09:53.960 回答
4

键模式

从 1.0.0 开始可用。

时间复杂度:O(N),其中 N 是数据库中的键数,假设数据库中的键名和给定模式的长度有限。

返回所有匹配模式的键。

警告:不建议使用此命令,因为它可能会在针对大型数据库而不是 KEYS 执行时破坏性能,您可以使用SCANSETS

要使用的 KEYS 命令示例:

redis> MSET firstname Jack lastname Stuntman age 35
"OK"
redis> KEYS *name*
1) "lastname"
2) "firstname"
redis> KEYS a??
1) "age"
redis> KEYS *
1) "lastname"
2) "age"
3) "firstname"
于 2019-04-25T13:41:46.813 回答
1

为了获得 redis 服务器中可用的所有密钥,您应该打开 redis-cli 并输入: KEYS * 为了获得更多帮助,请访问此页面: 此链接

于 2018-08-16T04:02:06.870 回答
1

如果你的 redis 是一个集群,你可以使用这个脚本

#!/usr/bin/env bash
redis_list=("172.23.3.19:7001,172.23.3.19:7002,172.23.3.19:7003,172.23.3.19:7004,172.23.3.19:7005,172.23.3.19:7006")

arr=($(echo "$redis_list" | tr ',' '\n'))

for info in ${arr[@]}; do
  echo "start :${info}"
  redis_info=($(echo "$info" | tr ':' '\n'))
  ip=${redis_info[0]}
  port=${redis_info[1]}
  echo "ip="${ip}",port="${port}
  redis-cli -c -h $ip -p $port set laker$port '湖人总冠军'
  redis-cli -c -h $ip -p $port keys \*

done

echo "end"
于 2019-07-30T13:35:09.117 回答
0

我们应该在 redis 2.8 及更高版本中使用 --scan --pattern。

你可以尝试在 redis-cli 上使用这个包装器。 https://github.com/VijayantSoni/redis-helper

于 2019-10-18T09:18:53.183 回答
0

如果您使用的是 Laravel 框架,那么您可以简单地使用:

$allKeyList = Redis::KEYS("*");

print_r($allKeyList);

在核心 PHP 中:

$redis = new Redis();

$redis->connect('hostname', 6379);

$allKeyList = $redis->keys('*');

print_r($allKeyList);
于 2020-02-18T19:30:09.553 回答
0

您可以简单地使用 redis-cli 连接到您的 redis 服务器,选择您的数据库并输入 KEYS *,请记住它会为您提供所选 redis 数据库中存在的所有密钥。

于 2020-04-19T16:03:34.740 回答
0

对于那些想要打字稿助手的人(使用 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') ;

于 2021-05-13T10:24:44.347 回答