【问题标题】:Redis StringGet in Batch / Transaction?Redis StringGet 批量/事务?
【发布时间】:2018-01-08 11:15:47
【问题描述】:

我们有一个使用 Redis 进行缓存的 Web 应用程序。

我注意到当使用几乎并发的请求(Fiddler Shift + R 的同一请求 20 - 50)访问具有 200KB 值 的 Key次)。

项目的正常读取时间约为 50 毫秒,但会飙升至 800 毫秒左右。

我在想是否有办法优化这个?有没有办法使用管道/批处理进行 GET?会有所不同吗?

【问题讨论】:

    标签: c# multithreading optimization redis


    【解决方案1】:

    有可能吗?可能是。问题是,您看到的请求不相关,并且彼此不了解。因此,要进行 批处理,您需要执行以下操作:

    1. 从传入请求中收集所有要请求的密钥。
    2. 每 n 毫秒为多个键发出一个 redis GET
    3. 将结果分发给所有等待的呼叫者。

    这会产生大量管理开销,并减慢请求速度。

    可能更好的是使用内存中的 cache 将结果存储一段时间,并将其重用于未来的请求。

    这仍然很棘手,因为一个请求进入了另一个请求当前从 redis 获取的密钥。如果您关心这类事情,可能很难对飞行中的请求进行重复数据删除。

    【讨论】:

    • 感谢 captncraig。内存缓存的想法听起来很棒。我想知道为什么 Redis StringGet 似乎飙升。我认为这可能与争夺 Connection 访问权限的请求有关。
    • 由于时间安排如此糟糕,感觉您的 redis 实例可能规模过小或动力不足,但从这里很难判断。可以是任意数量的网络因素或配置。
    • 20-50 个请求对于一个 redis 实例来说确实是一个很小的数字。即使是小型服务器上的大请求也应该比这更快。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-23
    • 2014-04-20
    • 2021-01-20
    • 2015-08-15
    • 2016-05-15
    • 2019-02-20
    相关资源
    最近更新 更多