zoukankan      html  css  js  c++  java
  • StackExchange.Redis 官方文档(四) KeysScan

    https://www.cnblogs.com/ArvinZhao/p/6096557.html

    KEYSSCANFLUSHDB 方法在哪?

    经常有人问这些问题:

    好像并没有看到 Keys(...) 或者 Scan(...)方法?那我要怎么查询数据库里面存有哪些key?

    或者

    好像没有Flush(...)方法?那我要怎么清除数据库里面的所有key?

    问题的关键就在这里:数据库。因为StackExchange.Redis旨在cluster等场景,知道哪些命令的目标是database(逻辑数据库可以分布在多个节点上)和哪些命令的目标是server是很重要的。下面的命令的目标全部指向一个单独server:

    • KEYS / SCAN
    • FLUSHDB / FLUSHALL
    • RANDOMKEY
    • CLIENT
    • CLUSTER
    • CONFIG / INFO / TIME
    • SLAVEOF
    • 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 只会列出当前server上的keys:而不是整个逻辑数据库
    • FLUSHDB / FLUSHALL 同样只会移除当前server上的所有的keys
    • RANDOMKEY 同样只会选出当前服务器上的一个key

    事实上,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()就已经选好了target database),这些方法对database都有一个可选的参数,或者默认为0

    Keys(...)方法需要特别注意的是:它的与众不同之处在于它没有对应的*Async方法。原因是在scene下,系统会判断出最适合采用的方法(KEYS vs SCAN,基于服务器版本),而且如果可以的话将会使用SCAN在内部处理分页的方式返回一个IEnumerable<RedisKey>-所以并不需要知道当前操作的实现细节。如果SCAN不可用,将会采用KEYS,这将会造成服务器阻塞,无论哪一种方式,SCAN and KEYS需要遍历整个key控件,所以在production server要避免使用这个方法-至少,在从服务器上使用。

    那我就需要记住我连接是哪一台服务器?that sucks。。。

    不,并不需要。你可以使用conn.GetEndPoints()列出节点(或者是所有已知的,或者在config当中指出来的-两者不一定是相同的),然后使用GetServer()迭代查处需要的server(例如:选择一个slave)

  • 相关阅读:
    Python基础
    SQL脚本
    PDF技术之-jasperreports的使用
    redis缓存和mysql数据库如何保证数据一致性
    理解MySQL的乐观锁,悲观锁与MVCC
    intellj idea创建maven项目一直处于加载的解决问题
    Linux目录详解,软件应该安装到哪个目录
    总结
    总结
    总结
  • 原文地址:https://www.cnblogs.com/liuqiyun/p/9111396.html
Copyright © 2011-2022 走看看