zoukankan      html  css  js  c++  java
  • 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() 方法去找到你想要的服务器(例如:选择一个从服务器)。

  • 相关阅读:
    SpringMVC异常处理
    SpringMVC参数绑定、Post乱码解决方法
    @RequestMapping与controller方法返回值介绍
    Git学习总结(标签管理)
    Git分支管理
    远程仓库
    可用来修改bean对象的BeanPostProcessor
    @Configuration的使用
    Spring配置:用context:property-placeholder替换PropertyPlaceholderConfigurer
    深入剖析 Spring 框架的 BeanFactory
  • 原文地址:https://www.cnblogs.com/carldai/p/5497050.html
Copyright © 2011-2022 走看看