微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何获取 ISubscriber 连接的客户端 ID?

如何解决如何获取 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

有人可以提供一些建议吗?

解决方法

这是一个非常有趣的问题;特别是:

  1. CLIENT ID 操作仅从 Redis 5.0 开始存在
  2. 一旦连接处于订阅者模式,就无法执行 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 举报,一经查实,本站将立刻删除。