如何解决如何获取 ISubscriber 连接的客户端 ID?
我正在使用 StackExchange.Redis NuGet 包。
我想获取调用 i ab
x a
1 {'a': {}}
pre {'a': {}}
2 {}
last {'b': '$'}??????????????????????????????????
i ac
x a
pre {'a': {'b': '$'}}!!??From the above "last",where comes the **'a':** ????
2 {'b': '$'}
last {'b': '$','c': '$'}
{'a': {'b': '$','c': '$'}}
时创建的连接的客户端 ID。此方法返回一个 redis.GetSubscriber()
类型的对象并创建一个到 redis 服务器的新连接。
我在此对象上找不到任何属性或方法来提供对其使用的连接的客户端 ID 的访问权限。
我知道我可以将 ISubscriber
命令发送到 redis,但这无济于事,因为似乎没有办法通过 CLIENT ID
对象或任何方式手动发送此命令可从其方法和属性访问的对象。
我知道我可以调用 ISubscriber
然后运行 redis.GetDatabase()
,但是 db.Execute("CLIENT","ID")
创建了一个新连接,并且返回的客户端 ID 不是 GetDatabase()
使用的那个{1}} 个对象。
ISubscriber
有人可以提供一些建议吗?
解决方法
这是一个非常有趣的问题;特别是:
-
CLIENT ID
操作仅从 Redis 5.0 开始存在 - 一旦连接处于订阅者模式,就无法执行
CLIENT ID
操作
要查看后者,请考虑以下跟踪(在 #
之后添加我的评论)
> ping # check connection
< +PONG
> client id # check can get client id on vanilla connection
< :5
> subscribe foo # switch to subscriber mode
< *3
< $9
< subscribe
< $3
< foo
< :1
> client id # check can get client id on subscriber connection
< -ERR only (P)SUBSCRIBE / (P)UNSUBSCRIBE / PING / QUIT allowed in this context
这意味着要获得订阅者连接的 CLIENT ID
,我们需要更改库以在管道中比您有权访问的更早发出该命令,然后才能成为订阅者。实际上,我们需要发出一个推测性的 CLIENT ID
以防万一我们以后需要它作为连接握手的一部分。我并不反对 - 它足够便宜,我们可以轻松地为所有连接做到这一点;但是:它确实需要更改库。
我猜测这是因为您正在尝试使用 CLIENT TRACKING
选项实现 REDIRECT
,因为没有那么多 订阅者客户端 ID 的替代用途。
注意:您可以尝试用 CLIENT LIST
猜测,但我不建议这样做。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。