是否有一个Redis命令获取数据库中的所有键?我见过一些python-redis库获取它们。但我想知道从redis-client是否可以。
当前回答
对于那些需要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-cli,你可以连接到你的远程redis-server,然后命令:
KEYS *
没有显示任何东西,或者更好,它显示: (空列表或集合)
如果你绝对确定你使用的Redis服务器就是你拥有数据的服务器,那么可能你的Redis -cli没有连接到正确的Redis数据库实例。
正如Redis文档中提到的,新连接默认连接到db 0。
在我的情况下,KEYS命令没有检索结果,因为我的数据库是1。为了选择您想要的db,请使用select。 db用整数标识。
SELECT 1
KEYS *
我发布这个信息是因为之前的答案都没有解决我的问题。
如果你的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"
如果你正在使用Laravel框架,那么你可以简单地使用这个:
$allKeyList = Redis::KEYS("*");
print_r($allKeyList);
在核心PHP:
$redis = new Redis();
$redis->connect('hostname', 6379);
$allKeyList = $redis->keys('*');
print_r($allKeyList);
试着看看KEYS命令。KEYS *将列出redis中存储的所有键。
编辑:请注意KEYS文档页顶部的警告:
时间复杂度:O(N), N为数据库中的键数,假设数据库中的键名和给定模式的长度有限。
UPDATE (V2.8或更高版本):SCAN是KEYS的更好替代方案,因为它不会阻塞服务器,也不会消耗大量资源。更喜欢使用它。
对于那些需要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是单线程的,那么它如何做并发I/O?
- 如何连接远程Redis服务器?
- 无法连接到Redis在127.0.0.1:6379:连接拒绝与自制
- 多Redis数据库的意义是什么?
- 如何列出所有的Redis数据库?
- 为什么我们需要像RabbitMQ这样的消息代理而不是像PostgreSQL这样的数据库?
- 检查Redis服务器版本
- Redis键命名约定?
- Linux—只安装redis-cli
- Redis只是一个缓存吗?
- 对持有错误类型值php的键进行操作
- WSL Redis遇到系统没有启动,systemd作为初始化系统(PID 1)。不能操作
- Redis使用的底层数据结构是什么?
- Redis字符串vs Redis哈希表示JSON:效率?
- 什么时候去Redis?什么时候使用MongoDB?