【发布时间】:2017-08-01 13:31:18
【问题描述】:
我必须使用 stackexhange.redis C# 在 redis 缓存中频繁添加 N 个(独立)项目,每个项目都有不同的到期时间,以便客户端的时间最短,服务器端的阻塞和成本最低。 Redis 服务器每秒会收到数百个获取请求,所以我根本不想弄乱获取时间。
我已阅读文档here 并回答here。我找不到执行此操作的单一方法。考虑不同的选择:
- 使用事务- 这将阻止服务器端的任何操作。所以这不应该是正确的解决方案
- 使用批处理 - 这将阻止客户端的任何操作,直到所有批处理操作完成。这不应该是正确的解决方案。
- 使用流水线 - 这不会阻止客户端和服务器端的任何操作。但它可以发送多个请求(小于 N 的数据包)可能会消耗更多的网络,但可能会增加客户端的内存消耗,从而可能导致延迟。
- 使用即发即弃 - 这也不会阻止客户端和服务器端的任何操作。但它会发送多个请求(比流水线更多的数据包),这可能会消耗更多的网络带宽,但不会消耗客户端的内存。
哪个应该是最好的方法? 我假设竞争操作意味着 2 个插入和一个 get 和 insert 不能同时进行,尽管它们可能正在访问不同的键。我在这方面是否正确,否则是什么意思?
【问题讨论】:
标签: c# performance redis stackexchange.redis