gpt4 book ai didi

c# - Redis 作为分布式缓存不执行?

转载 作者:可可西里 更新时间:2023-11-01 11:36:20 27 4
gpt4 key购买 nike

我有一个相当复杂的 asp.net 站点,可以动态构建页面(我想就像 WordPress 一样)。它在很大程度上依赖于缓存来保持良好和活泼(0.5 秒响应时间)。

我最近负责对应用程序进行负载平衡,这样做需要将缓存放入分布式环境(我已经在使用 SQL Server session 状态)。所以我做了研究,选择了 redis,并选择了 StackExchange.Redis 客户端。

我让我的对象非常简单,使用“type_dbIndex”键命名约定的小对象,然后使用集合链接所有具有关系的对象。我委托(delegate)了一个专用于 redis 的 Ubuntu 盒子,并且非常兴奋地打开了开关。不幸的是,我严重不知所措。事实证明,我的 redis 缓存平均比内存缓存慢 3 倍(1.5 秒)。

现在我将第一个承认我不是 Redis 专家,只是基本的安装和设置,但我也没有时间成为 Redis 调优大师来尝试从中挤出一秒钟。我可以想象真正的罪魁祸首是网络延迟。每个请求平均从缓存中加载大约 100-200 个对象,所有这些对象都需要序列化/反序列化并通过网络推送(服务器位于使用本地网络的同一个 DMZ 中)。

那么对于我的问题,我得到的结果是异常糟糕,还是这是常态?我是否需要为所有对象编写自定义序列化程序?我应该使用 ProtoBuf 而不是标准序列化器吗?我是否需要在两台机器之间创建一个内部网络(专用网卡就像我们过去在 SQL 和 Web Server 之间所做的那样)?基本上,是否有希望达到黄金半秒标记,因为管理负载平衡服务器之间的进程内内存缓存是一场噩梦,以至于完全不切实际。我是否错误地使用了缓存?

我感谢任何建议/帮助/ war 故事。

编辑:我想我会在这里粘贴一个 miniprofiler 输出,这样你就可以进一步看到我的难题......

Miniprofiler Outputs

最佳答案

您的问题不是 redis,而是通过网络访问 redis 100-200 次。试试这些内置的 Redis 解决方案:

  1. 流水线:这可以批量发送 Redis 请求,并在一个(或多个)网络请求中获取所有数据。

http://redis.io/topics/pipelining

  1. Lua 脚本:服务器端 Lua 脚本让您可以将 Lua 代码发送到 Redis 服务器,在那里进行评估,并在单个网络请求中返回数据。

在您的特定情况下,管道将是最有效的解决方案,它适用于所有 redis 驱动程序,如 python、php 等。

关于c# - Redis 作为分布式缓存不执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33111240/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com