我必须经常使用stackexhange.redis C#在redis缓存中添加N(独立)项目,每个C#都有不同的到期时间,这样客户端和min阻塞时间最短。服务器端的成本。 Redis服务器每秒会收到数百个获取请求,因此我根本不想弄乱获取时间。
我已阅读文档here并回答here。我找不到执行此操作的单个方法。考虑不同的选择:
哪个应该是最好的方法? 我假设竞争操作意味着2个插入,并且一个get和insert不能一起使用,尽管它们可能正在访问不同的键。我在这方面是否正确,否则是什么意思?
答案 0 :(得分:0)
Redis在数据库上读取或写入时都是单线程的。
您的案例中最好的解决方案是什么?谁知道,它可能取决于很多变量,每个用例都应该分别进行分析,以实现正确的解决方案。
除非您希望在应用程序层出现问题时损坏数据,否则无法避免Redis MULTI
。实际上,如果您想避免向Redis发出许多请求,则应使用Lua scripts代替。
另一方面,Redis的目的是尝试进行许多操作,但要确保这些操作尽可能小,因为Redis是单线程的。没错,除非你执行一个花费太多时间的操作,否则速度非常快。
总之,我不会太担心将许多请求作为内存数据库发送并在光速下工作。另外,请考虑Redis Cluster(即分片)的奇迹,以便能够优化您的方案。
最后,我会看看这个Redis教程:Redis latency problems troubleshooting
答案 1 :(得分:0)
您应该添加到选项列表Lua脚本。请参阅EVAL。
另外,请考虑您将使用的数据结构。例如,您可以使用MSET在Redis中以一跳发送多个值。