首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >stackexchange redis缓存性能

stackexchange redis缓存性能
EN

Stack Overflow用户
提问于 2017-03-11 04:25:00
回答 2查看 1.4K关注 0票数 2

我必须使用stackexhange.redis C#经常在redis缓存中添加N(独立)项,每个项目的过期时间不同,这样客户端的时间最少,服务器端的阻塞和成本最小。Redis服务器每秒将接收数百个get请求,因此我根本不想浪费获取时间。

我已经阅读了文档这里并回答了这里。我找不到一个方法来执行这个操作。考虑到不同的选择:

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

哪一个应该是最好的方法?我假设竞争操作意味着两个插入和一个get和insert不能在一起,尽管它们可能访问不同的密钥。我说对了吗,否则这意味着什么?

EN

回答 2

Stack Overflow用户

发布于 2017-03-12 21:48:35

对于数据库中的读或写,Redis是单线程的。

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

如果应用程序层出了问题,除非您想破坏您的数据,否则就无法避免Redis MULTI。实际上,如果您想避免向Redis发出许多请求,则应该使用https://redis.io/commands/eval

另一方面,Redis的要点是尝试进行许多操作,但要确保这些操作尽可能小,因为Redis是单线程性质的。是的,它烧得很快,除非你执行一项花费了太多时间的手术。

总之,我不会太担心将许多请求作为内存中的数据库发送,并以光速工作。此外,考虑https://redis.io/topics/cluster-tutorial (即分片)的奇妙之处,以便能够优化您的场景。

最后,我想看看这个Redis教程:Redis延迟问题疑难解答

票数 0
EN

Stack Overflow用户

发布于 2017-03-14 13:15:09

您应该将Lua脚本添加到您的选项列表中。见埃瓦尔

另外,考虑一下您将要使用的数据结构。例如,您可以使用MSET在Redis中用一跳发送多个值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42731347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档