StackExchange.Redis 官方文档(四) KeysScan
KEYS
, SCAN
, FLUSHDB
方法在哪?
经常有人问这些问题:
好像并没有看到
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 withEVAL
/EVALSHA
)SHUTDOWN
SLOWLOG
PUBSUB
(not to be confused withPUBLISH
/SUBSCRIBE
/ etc)- some
DEBUG
operations
(我可能会漏掉不止一个。。。)他们当中大部分都可以很明显的看出来,除了前面三个:
KEYS
/SCAN
只会列出当前server上的keys:而不是整个逻辑数据库FLUSHDB
/FLUSHALL
同样只会移除当前server上的所有的keysRANDOMKEY
同样只会选出当前服务器上的一个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)
StackExchange.Redis 官方文档(四) KeysScan的更多相关文章
- StackExchange.Redis 官方文档
原文:StackExchange.Redis 官方文档 时隔多年的翻译终于完成了第六个,也是很重要的的官方文档,是介绍有关链接管理,管道流水线和多路复用的 官方地址在这里:官方文档 下面做个汇总: S ...
- StackExchange.Redis 官方文档(六) PipelinesMultiplexers
原文:StackExchange.Redis 官方文档(六) PipelinesMultiplexers 流水线和复用 糟糕的时间浪费.现代的计算机以惊人的速度产生大量的数据,而且高速网络通道(通常在 ...
- StackExchange.Redis 官方文档(五) Keys, Values and Channels
原文:StackExchange.Redis 官方文档(五) Keys, Values and Channels Keys, Values and Channels 在使用redis的过程中,要注意到 ...
- StackExchange.Redis 官方文档(一) Basics
基本使用方法: StackExchange.Redis的核心是 StackExchange.Redis 命名空间的 ConnectionMultiplexer 类;它隐藏了多服务器的实现细节.Conn ...
- StackExchange.Redis 官方文档(三) Events
事件 ConnectionMultiplexer类型提供了很多可以用来了解表面状态下正在发生着什么的事件.这对日志是很有用的. ConfigurationChanged - ConnectionMul ...
- StackExchange.Redis 官方文档(二) Configuration
配置 有多种方式可以配置redis,StackExchange.Redis提供了一个丰富的配置模型,在执行Connect (or ConnectAsync) 时被调用: var conn = Conn ...
- Redis官方文档》持久化
原文链接 译者:Alexandar Mahone 这篇文章从技术层面描述了Redis持久化,建议所有读者阅读.如果希望更多了解Redis持久化和持久性保障,建议阅读Redis持久化揭秘. Redis ...
- Redis官方文档资源
官方文档: 如果要深入研究时,官方提供的文档是最权威的. 英文: https://redis.io/documentation 中文: http://www.redis.cn/documentatio ...
- 《Redis官方文档》用Redis构建分布式锁
用Redis构建分布式锁 在不同进程需要互斥地访问共享资源时,分布式锁是一种非常有用的技术手段. 有很多三方库和文章描述如何用Redis实现一个分布式锁管理器,但是这些库实现的方式差别很大,而且很多简 ...
随机推荐
- PAT (Advanced Level) 1102. Invert a Binary Tree (25)
简单题. #include<cstdio> #include<cstring> #include<cmath> #include<vector> #in ...
- STL笔记之set
//---------------------------------------------------------// set综述//------------------------------- ...
- dpkg -P xx
dpkg -l | grep ^rc | cut -d' ' -f3|xargs dpkg -P http://www.linuxquestions.org/questions/debian-26/h ...
- regress_partition.sql
--ENV --UAT @/test/change/env/env_test_uat.sql set echo on time on timing on set feedback on set pag ...
- java代码如何发送QQ邮件
近来想写一个qq之间互相发送邮件的工具.奈何一直报错服务错误: org.apache.commons.mail.EmailException: Sending the email to the fol ...
- Fragment(四)Fragment生命周期分析(转)
Fragment(四)Fragment生命周期分析 转载请注明:http://blog.csdn.net/liaoqianchuan00/article/details/24271607 例子一 ...
- 转:Selenium的延迟等待
Selenium的延迟等待分为 显式等待(Explicit Wait) & 隐式等待(Implicit Wait). 1.显式等待 显式等待,就是明确的要等到某个元素的出现或者是某个元素的可点 ...
- 简单三段式状态机实验1-SOS
一直想从一段式状态机切换到三段式状态机,从书上和网上不断搜寻三段式案例及方法,感觉很简单,就想拿之前做过的实验把一段式改成三段式,可是写起来并非那么简单,很棘手,改完后也没有成功,尤其状态机里面的计数 ...
- armstrong's programming erlang 2nd
Re: json handling map functions in erlang 17 I have not read Joes final book on the matter (several ...
- COC建筑拖动的实现
最近在玩COC,多体验一下手游的体验,因为自己毕竟一直是做页游的,有些观念需要转变一下. 好像偏了,玩了几次之后突然想起COC那个地图拖动的自己之前实现过,那是2010年左右的时候,模拟经营类页游大行 ...