zoukankan      html  css  js  c++  java
  • 【译】StackExchange.Redis 中文文档(九)服务器相关命令

    Where are KEYS, SCAN, FLUSHDB etc?

    一些非常常见的重复出现的问题是:

    似乎没有 Keys(...)Scan(...) 方法? 如何查询数据库中存在哪些键?

    or

    似乎没有 Flush(...) 方法? 如何删除数据库中的所有 keys?

    这里的关键词是最后一个:数据库。因为 StackExchange.Redis 的目标是针对群集等场景,所以了解哪些命令针对 database(可以分布在多个节点上的逻辑数据库)以及哪些命令针对 server 很重要。以下命令均以单个服务器为目标:

    • KEYS / SCAN
    • FLUSHDB / FLUSHALL
    • RANDOMKEY
    • CLIENT
    • CLUSTER
    • CONFIG / INFO / TIME
    • REPLICAOF
    • SAVE / BGSAVE / LASTSAVE
    • SCRIPT (not to be confused with EVAL / EVALSHA)
    • SHUTDOWN
    • SLOWLOG
    • PUBSUB (not to be confused with PUBLISH / SUBSCRIBE / etc)
    • some DEBUG operations

    其中大多数看上去都很明显,但是前三行并不是那么明显:

    • KEYS / SCAN 仅列出当前服务器上的密钥;不是更广泛的逻辑数据库
    • FLUSHDB / FLUSHALL 只删除当前服务器上的密钥;不是更广泛的逻辑数据库
    • RANDOMKEY 仅选择当前服务器上的密钥;不是更广泛的逻辑数据库

    实际上,StackExchange.Redis 通过简单地随机选择目标服务器来欺骗 IDatabase API 上的 RANDOMKEY,而其他服务器则不可能。

    怎么使用?

    简单: 开启一个 server 对象,而非 database 对象。

    // get the target server
    var server = conn.GetServer(someServer);
    
    // show all keys in database 0 that include "foo" in their name
    foreach(var key in server.Keys(pattern: "*foo*")) {
        Console.WriteLine(key);
    }
    
    // completely wipe ALL keys from database 0
    server.FlushDatabase();
    

    请注意,与 IDatabase API(在 GetDatabase() 调用中已选择目标数据库)不同,这些方法采用数据库的可选参数,或者默认为 0

    Keys(...) 方法值得一提:它不具有 *Async 对应项,这是不寻常的。原因是系统将确定最适合使用的方法(根据服务器版本,使用 KEYSSCAN),并且在可能的情况下,将使用 SCAN 方法退回。 一个 IEnumerable<RedisKey> 在内部完成所有分页的操作:因此你无需查看游标操作的实现详细信息。如果 SCAN 不可用,它将使用 KEYS,这可能会导致服务器阻塞。无论哪种方式,SCANKEYS 都需要清除整个密钥空间,因此应避免在生产服务器上使用,或至少应针对副本服务器。

    我必须记住连接的服务器是哪个?

    你可以使用 conn.GetEndPoints() 列出端点(所有端点或原始配置中指定的端点:不一定是同一件事),并使用 GetServer() 进行迭代以找到你要使用的服务器。

    原文地址:Where are KEYS / SCAN / FLUSH*?

  • 相关阅读:
    xshell中的nohup与&的含义
    eclipse启动服务报错:Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/maven/cli/MavenCli : Unsupported major.minor version 51.0
    关于MyEclipse启动报错:Error starting static Resources;下面伴随Failed to start component [StandardServer[8005]]; A child container failed during start.的错误提示解决办法.
    组件/服务之间的通信-事件广播和订阅可以有效减少全局变量
    #css3# 可以多背景图设置
    #RXJS# 基础
    #TS# get/set
    #css3# : vs ::
    #css3# box-sizing
    #DOM# 最佳实践:head里面标签的顺序
  • 原文地址:https://www.cnblogs.com/liang24/p/13847233.html
Copyright © 2011-2022 走看看