我们通常在Spring项目中使用redis进行缓存。我的问题是,由于redis是单线程的,所以当访问redis时,我们的并发请求变成了序列化请求。那么,使用redis有什么意义?
仅仅是因为“ CPU成为Redis的瓶颈并不常见,因为Redis通常是内存或网络绑定的。 ...... 使用在一般Linux系统上运行的流水线Redis可以每秒发送甚至一百万个请求…… “?
我正在学习Redis,Redis document FAQ
答案 0 :(得分:0)
您基本上已经在一个问题中问了两个问题:
使用Redis的意义是什么。
好吧,Redis被认为是快速的,因为它可以将数据保存在内存中。如果您问一个单线程应用程序是否有严格的限制-那么,它的产品在设计上可以像这样工作,如果它是多线程的,它的性能可能会更高,这毕竟取决于实际的实现。
无论如何,它提供的不仅仅是“在内存中获取数据”: -许多可以使用的原语 -可配置的持久性 -数据复制 还有更多
如果问题是内存缓存是否会更快(您已经提到了Spring框架,那么您就在Java Land上)-是的。
事实上,Spring Cache支持Guava Cache(Spring 5 / spring boot 2出于相同的目的使用Caffeine)-是的,与Redis进行正面对比时,它会更快。但是,如果您有一个包含许多实例的分布式应用程序,并且一个实例计算了一些内容并将其缓存,那么如何从另一个实例中获取相同的信息而不在实例之间分配信息呢?嗯,有类似Hazelcast之类的工具,但是这个问题超出了范围,关键是,当应用程序超出基本范围时,诸如缓存同步/保持其最新状态之类的任务就变得不那么明显了。
如果您每秒可以交付一百万次操作。
现在这个问题太模糊了,无法回答:
无论如何,在进行基准测试时,您可以通过选项方式设置系统并使用Redis本身提供的工具:
Redis Benchmarking Chapter in Redis tutorial
该工具称为redis-benchmark
,您可以使用各种参数运行它,并查看redis的实际运行速度:
以下是一个示例(建议您阅读链接中的全文):
$ redis-benchmark -t set,lpush -n 100000 -q
SET: 74239.05 requests per second
LPUSH: 79239.30 requests per second
这表示:连接到本地主机上可用的redis服务器,以安静模式(-q参数)运行(-n)100000个请求,并且仅运行特定于两个命令的测试:set和lpush