私信  •  关注

Marc Gravell

Marc Gravell 最近创建的主题
Marc Gravell 最近回复了
3 年前
回复了 Marc Gravell 创建的主题 » RedisServerException:运行脚本时出错

我怀疑您在这里使用的库使用的脚本假定给定的密钥是“散列”类型,尤其是:仅通过同一个库和脚本创建的散列(使用存储值的不同子值、滚动过期细节等)。但你的密钥似乎不是——也许是原始的“字符串”类型。您可以使用各种redis工具(“例如,调试对象”)来调查密钥,但如果这是一个缓存服务器,则从orbit中直接将其核化可能更容易,并假设只有当前库选项使用的是一块空白板。

6 年前
回复了 Marc Gravell 创建的主题 » c tcp服务器同时接收python客户端发送的两条消息

TCP是 流动 协议,不是 小包裹 协议。有 绝对没有保证 您将获得与发送数据完全相同的数据块—所保证的是,您将获得正确顺序的字节(或失败或超时等)。您可以分别获取每个字节,或者一次获取14条消息。或介于两者之间的任何东西,包括一个接收中的一半消息,以及下一个接收中的另一半消息。在unicode(etc)的情况下,这也意味着可以在多个接收端拆分单个字符。

任何基于TCP的多消息协议都需要包含 框架 ,也就是说,您可以通过某种方式知道每个单独消息的开始和结束位置。由于您使用的是基于文本的协议,一个常见的选项是使用CR、LF或CR+LF分隔逻辑消息,然后您的工作是缓冲数据,直到您有一个完整的消息为止,方法是查找行结尾。对于完整性:在二进制协议的情况下,通常使用某种表示有效负载中数据量的头作为有效负载的长度前缀,然后您只需要解析头、确定长度和缓冲区,直到您有那么多数据。

在具有文本协议且无挑战性可伸缩性问题的简单应用程序中,可以使用 StreamReader (在 NetworkStream )为你做那部分,然后用 ReadLine ReadLineAsync .不过,请注意,这在“真正的”服务器中是个坏主意(尤其是 阅读线 )-你不希望恶意的或有缺陷的客户端仅仅因为发送了几个字符就永远锁定一个线程 没有行尾 ,然后没有发送任何其他…永远。当然,在一个严肃的服务器中,你不会在每个客户机上使用线程 无论如何 是的。

6 年前
回复了 Marc Gravell 创建的主题 » 如何通过stackexchange.redis删除redis中的所有键值

你可能在找 FLUSHDB / FLUSHALL 是的。尽管有这个名称,但这不是“数据库”级命令,而是“服务器”级命令(意思是:在redis集群的上下文中,它只影响一个服务器,而不是整个密钥空间; this distinction is explained more here ,因此可以从 IServer 在东南地区:

ConnexctionMultiplexer redis = ...
var server = redis.GetServer({your server here});
server.FlushDatabase(); // or await server.FlushDatabaseAsync();