KEYS,SCAN,FLUSHDB 等等,这些命令在哪里?

一些常见的重复性的问题是:

好像没有看到如:Key(...) 或者 Scan(...) 方法?我该怎么才能查询哪些key是在数据库中的?

或者

好像也没有 Flush(...) 方法?我该怎样才能移除掉所有在数据库中的key?

The key word here, oddly enough, is the last one: database. 这句话真不知道该怎么翻译

奇怪的是这里的关键字的最后一个是:数据库。????

由于StackExchange.Redis 服务的目标场景(或者宗旨)是集群服务,重要的是要知道命令所面向的数据库(可分布在多个节点的逻辑数据库),还有命令所面向的服务器。下面这些命令都是面向单个服务器的:

  • KEYS / SCAN
  • FLUSHDB / FLUSHALL
  • RANDOMKEY
  • CLIENT
  • CLUSTER
  • CONFIG / INFO / TIME
  • SLAVEOF
  • SAVE / BGSAVE / LASTSAVE
  • SCRIPT ( 不要与 EVAL / EVALSHA 混淆 )
  • SHUTDOWN
  • SLOWLOG
  • PUBSUB ( 不要与 PUBLISH / SUBSCRIBE 等命令混淆 )
  • 一些 DEBUG 操作

(我可能遗忘了多个命令没有列举) 其中大多数会显得很明显,但是前三行就不那么明显:

  • KEYS / SCAN 不是在所有的逻辑数据库中,而是仅列出当前服务器的key;
  • FLUSHDB / FLUSHALL 不是在所有的逻辑数据库中,而是仅移除当前数据库中的key;
  • RANDOMKEY 不是在所有的逻辑数据库中,而是仅在当前数据库中选出一个key;

事实上,StackExchange.Redis 在使用 IDatabase API的时候,欺骗了 RANDOMKEY 命令,实际上它是以一个随机的方式选择了一台目标服务器。但这对其它的来说是不可能的。

那么我该怎么使用它们?

让我们先从一个服务器开始,而不是从一个数据库开始。

// 取得目标服务器
var server = conn.GetServer(someServer);

// 在索引为0的数据库中展示出所有的key,这个key的名字必须匹配 *foo*
foreach(var key in server.Keys(pattern: "*foo*")) {
    Console.WriteLine(key);
}

// 从索引为0的数据库中清除所有的key
server.FlushDatabase();

注意:这个和 IDatabase API是不同的(在调用 GetDatabase() 方法的时候目标数据库已被选择),可以给这些方法传一个可选参数来选择数据库,默认是0。

值得特别注意的是 Keys(...) 方法:该方法没有一个对应的 *Async 异步方法。原因是在后台运作,由系统确定出一个最合适的方法来使用(KEYS vs SCAN, 基于服务器的版本),并且如果可能的话将会使用 SCAN 方法来处理你回传的 IEnumerable 参数,内部会对该参数分页处理:所以你绝不会看到游标操作的详细实现。如果 SCAN 是不可用的,那么将会使用 KEYS,这个可能会在服务器导致阻塞。无论哪种方式,SCAN 和 KEYS 都需要扫描整个键空间,所以应该避免在生产服务器上使用;或者至少值针对从服务器。

那么我需要记住我所连接的服务器吗? 那简直糟透了!

不完全是这样的,你可以使用 coon.GetEndPoints() 方法列出端点(要么是所有已知的,要么是在原始配置中指定的:这未必是同一个事情),还可以迭代 GetServer() 方法去找到你想要的服务器(例如:选择一个从服务器)。

时间: 2024-08-25 01:18:03

KEYS,SCAN,FLUSHDB 等等,这些命令在哪里?的相关文章

Redis遍历所有key的两个命令 -- KEYS 和 SCAN

当我们需要遍历Redis所有key或者指定模式的key时,首先想到的是KEYS命令: KEYS pattern   官网对于KEYS命令有一个提示: KEYS 的速度非常快,例如,Redis在一个有1百万个key的数据库里面执行一次查询需要的时间是40毫秒 .但在一个大的数据库中使用它仍然可能造成性能问题,如果你需要从一个数据集中查找特定的 KEYS, 你最好还是用 Redis 的集合结构 SETS 来代替. KEYS命令使用很简单. redis> MSET one 1 two 2 three

Redis学习笔记之五:redis keys命令 (24个)

Redis 版本:3.2.100 Redis 命令 Redis 命令用于在 redis 服务上执行操作. 要在 redis 服务上执行命令需要一个 redis 客户端. 一.客户端连接服务器 基本语法: redis-cli [-h host -p port -a password] 不带参数,则默认连接本地,带上三个参数,则连接远程服务器. 举例: 如何连接到主机为 127.0.0.1,端口为 6379 ,密码为 mypass 的 redis 服务上. redis-cli -h 127.0.0.

Redis 常用数据结构及其控制命令整合

Redis 键值支持5种基本结构,分别是字符串,列表,哈希,集合,有序集合.每一种数据结构都有对应的取值和设值命令,辅助命令,除此之外,还有一些全局命令,用来管理Redis存储的所有 键. 全局命令 查看所有键 keys * 127.0.0.1:6379> keys *1) "name"2) "fuck"3) "mlist"4) "dict:test"5) "fuck1"6) "hello&

分布式缓存技术redis学习系列(二)——详细讲解redis数据结构(内存模型)以及常用命令

Redis数据类型 与Memcached仅支持简单的key-value结构的数据记录不同,Redis支持的数据类型要丰富得多,常用的数据类型主要有五种:String.List.Hash.Set和Sorted Set. Redis数据类型内存结构分析 Redis内部使用一个redisObject对象来表示所有的key和value.redisObject主要的信息包括数据类型(type).编码方式(encoding).数据指针(ptr).虚拟内存(vm)等.type代表一个value对象具体是何种数

分布式缓存技术redis学习(二)——详细讲解redis数据结构(内存模型)以及常用命令

Redis数据类型 与Memcached仅支持简单的key-value结构的数据记录不同,Redis支持的数据类型要丰富得多,常用的数据类型主要有五种:String.List.Hash.Set和Sorted Set. Redis数据类型内存结构分析 Redis内部使用一个redisObject对象来表示所有的key和value.redisObject主要的信息包括数据类型(type).编码方式(encoding).数据指针(ptr).虚拟内存(vm)等.type代表一个value对象具体是何种数

Redis批量删除keys

redis中del可以删除单个key,对于批量删除key的需求我们可以借助linux的xargs 代码如下: /usr/local/bin/redis-cli keys xxxxxx | xargs redis-cli del //如果redis-cli没有设置成系统变量,需要指定redis-cli的完整路径 //如:/opt/redis/redis-cli keys "*" | xargs /opt/redis/redis-cli del 如果要指定 Redis 数据库访问密码,使用

redis-cli命令

redis-cli 3.2.3 Usage: redis-cli [OPTIONS] [cmd [arg [arg ...]]] -h <hostname> Server hostname (default: 127.0.0.1). -p <port> Server port (default: 6379). -s <socket> Server socket (overrides hostname and port). -a <password> Pass

mac 使用命令行向 github 提交代码

让 mac 本地和自己的 github 网站建立连接(ssh) 下载安装 git 网址: https://git-scm.com/downloads 查看安装是否成功: git -version $ git version git version 2.15.1 (Apple Git-101) chengyuandeMBP:.ssh chengyuan$ 创建 ssh 密钥:查看是否有 ssh $ cd ~/.ssh $ ls id_rsa id_rsa.pub known_hosts 建议不管有

Redis基础--API

Redis:Remote Dictionary Server 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件.C语言实现,单线程 Redis特性: 1.速度快:官方声明可以达到10W OPS 2.持久化:aof.rdb 3.支持多种数据结构:String.Hash Table.LinkedList.Set.Sort Set.BitMaps位图.HyperLogLog超小内存唯一值计数.GEO(地理定位) 4.支持多种语言:Java.PHP.Python.