gpt4 book ai didi

c# - stackexchange redis缓存性能

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

我必须使用 stackexhange.redis C# 在 redis 缓存中频繁添加 N 个(独立)项目,每个项目具有不同的过期时间,以便客户端的时间最短,服务器端的阻塞和成本最小。 Redis 服务器每秒将收到数百个获取请求,因此我根本不想打乱获取时间。

我已阅读文档 here并回答here .我找不到执行此操作的单一方法。考虑不同的选择:

  1. 使用事务——这将阻止服务器端的任何操作。所以这不应该是正确的解决方案
  2. 使用批处理——这将阻止客户端的任何操作,直到所有批处理操作完成。这不应该是正确的解决方案。
  3. 使用流水线 - 这不会阻止客户端和服务器端的任何操作。但它可以发送多个请求(小于 N 的数据包)可能会消耗更多网络,但可能会增加客户端的内存消耗,从而导致延迟。
  4. 使用即发即弃 - 这也不会阻止客户端和服务器端的任何操作。但它会发送多个请求(比流水线更多的数据包),这可能会消耗更多的网络带宽,但在客户端不会消耗内存。

哪种方法最好?我假设竞争操作意味着 2 个插入和一个获取和插入不能一起进行,尽管它们可能正在访问不同的键。我在这方面是否正确,否则是什么意思?

最佳答案

在读取或写入数据库时​​,Redis 是单线程的。

在您的情况下,最佳解决方案是什么?谁知道呢,它可能取决于很多变量,应该分别分析每个用例以实现正确的解决方案。

Redis MULTI 是不可避免的,除非你想在你的应用层出现问题时破坏你的数据。实际上,如果你想避免对 Redis 的许多请求,你应该使用 Lua scripts相反。

另一方面,Redis 的重点是尝试进行许多操作,但由于 Redis 的单线程特性,请确保这些操作尽可能小。是的,它非常快,除非您执行的操作花费太多时间。

总而言之,我不会太担心发送很多请求,因为它是一个内存数据库并且以光速工作。另外,考虑一下 Redis Cluster 的奇迹(即分片)到能够优化您的场景。

最后,我想看看这个 Redis 教程:Redis latency problems troubleshooting

关于c# - stackexchange redis缓存性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42731347/

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