StackExchange.Redis 系列 9:使用 KEYS, SCAN, FLUSHDB 等命令
本系列博文是“伪”官方文档翻译,并非完全将官方文档进行翻译,而是我在查阅、测试原始文档并转换为自己东西后进行的“准”翻译。
本系列本博文基于 redis 5.0.6,系列中部分博文跟官方文档有出入,有不同见解 / 说明不当的地方,还请大家不吝拍砖。
StackExchange.Redis 面向的是 redis 集群,所以需要直到哪些命令面向 database,哪些命令面向 server。
KEYS, SCAN, FLUSHDB 这些命令都属于服务端命令。
以下命令面向的是单台服务器(包含但不限于)
-
KEYS / SCAN:仅列出当前服务器上的 key;不包括更广逻辑上的 database。
-
FLUSHDB / FLUSHALL:仅移除当前服务器上的 key,不包括更广逻辑上的 database。
-
RANDOMKEY:仅随机选择当前服务器上的 key,不包括更广逻辑上的 database。
-
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
如何使用这些命令?
eg:使用 IServer 提供的方法,而非 IDatabase
1 | // get the target server |
-
注意,跟 IDatabase API 不同,IServer 的方法提供了可选参数来指定 database,默认情况下是 db0
-
Keys(…) 方法没有提供异步声明,因为在后台处理的时候,系统基于服务版本自行确定最宜使用的方法(如 KEYS 或者 SCAN)。如果可能的话,会使用 SCAN 方法返回一个已经完成分页的 IEnumerable
。当 SCAN 不可用的时候,会使用 KEYS ,这会导致 Redis 服务器阻塞。 -
无论是使用 KEYS 还是 SCAN,都会清除整个 keyspace,应避免在生产环境使用这 2 个命令或者至少应在从库上使用。
获取服务终结点
通过 conn.GetEndPoints()可以列出端点(终结点和你连接时配置的终结点可能不同),之后可以通过遍历 GetServer() 找到所需的服务器(例如,从库信息)。