【问题标题】:How can i cache grpc channels into Redis?如何将 grpc 通道缓存到 Redis 中?
【发布时间】:2022-11-04 11:51:52
【问题描述】:

我有一个 grpc 项目,我想用 grpc 在多服务器之间发送请求。所以,我想缓存 grpcChannels 以供每次使用。如何一键将 grpcChannels 保存到 redis 中?

将 grpc 通道缓存到 Redis 数据库中

【问题讨论】:

  • 你试过简单的序列化和反序列化吗?
  • 您可以将值存储到数据库中,而不是对象。至少不是你认为可以的方式。
  • 本来想把频道列表保存为redis数据库中的roundrobin,可惜保存为null,所以最后使用hash类型,将频道列表保存到redis数据库中。 @LeBigCat
  • Hashes 会起作用。但您可能还想看看使用Sets
  • 使用哈希很好,但是当我在 redis 中缓存 GrpcChannel 时,我无法反序列化它。例外是“找不到用于 Grpc.Net.Client.GrpcChannel 类型的构造函数。一个类应该有一个默认构造函数、一个带参数的构造函数或一个构造函数”@GuyRoyse

标签: c# asp.net-core redis grpc stackexchange.redis


【解决方案1】:

有关使用 gRPC 的最佳实践,请参阅 Microsoft 的 doc。来自文档的引用:

gRPC 客户端是使用通道创建的。 gRPC 客户端是轻量级对象,不需要缓存或重用。

【讨论】:

  • 感谢您的建议,但我将频道列表保存在 redis 数据库中为了不创建新频道,这是一个想法,但我喜欢查看您的评论。
  • 确保不要将客户与渠道混淆。通道应该被重用,客户端不需要。
【解决方案2】:

不幸的是,无法从 Redis 存储和加载 grpc 通道。 grpc 通道的主要资源是打开到另一端(客户端/服务器)的连接,这就像您的应用程序的文件描述符,这就是为什么它不能从 redis 加载的原因。但这不是问题:在您的应用程序中尽可能多地重用一个通道,即不要在每次 RPC 调用后关闭一个通道(更多信息请参见 learn.microsoft.com/en-us/aspnet/core/grpc /…)。但是应用进程在启动时创建通道是可以的

【讨论】:

    猜你喜欢
    • 2020-04-20
    • 1970-01-01
    • 2021-04-24
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    • 2023-03-12
    相关资源
    最近更新 更多