首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Redis性能调优

Redis性能调优
EN

Stack Overflow用户
提问于 2013-05-30 16:32:37
回答 3查看 42.9K关注 0票数 19

我们正在运行一个web应用程序,并从memcached切换到redis (2.4)进行缓存。现在我们对redis的表现有些失望。Redis运行在同一台服务器上,我们只使用非常简单的GET和SET操作。对于一些大量使用缓存值的请求,我们有多达300个请求到redis,但是这些请求需要150 we。我们有大约200000个活动密钥,每秒大约有1000个redis请求。磁盘io、ram或cpu没有问题。由于我们现有的代码,我们不能简单地将redis请求分组在一起。Memcached的速度大约快了4倍。我们喜欢redis的地方是,我们不需要任何缓存升温,将来可能会使用更高级的数据存储功能。我们期望redis的表现类似于memcached。因此,也许我们忽略了配置中的一些内容,这基本上是默认配置。

您知道redis性能调优的最佳实践吗?

EN

回答 3

Stack Overflow用户

发布于 2013-05-30 19:18:42

首先,您可能需要阅读Redis基准页面。它提供了一个很好的总结要点,以检查调整Redis。

即使假设你不使用流水线,300得到150毫秒并不是那么有效。这意味着平均延迟是500 us。然而,它实际上取决于对象的大小。更大的对象,更多的延迟。在我非常老的2 GHz AMD盒上,我可以测量150个小对象的延迟时间(几个字节)。

要快速检查Redis实例的平均延迟,可以使用:

代码语言:javascript
复制
$ redis-cli --latency

一定要使用最近的Redis版本(而不是2.4)来获得这个选项。注意: 2.4现在已经很老了,使用Redis 2.6 -如果需要编译您自己的Redis版本,这是非常简单的。

要快速运行基准测试来研究延迟,您可以启动:

代码语言:javascript
复制
$ redis-benchmark -q -n 10000 -c 1 -d average_size_of_your_objects_in_bytes

它以独特的连接运行,没有流水线,因此可以从吞吐量中推断延迟。尝试将这些基准测试的结果与应用程序测量的数字进行比较。

您可能需要检查以下几点:

  • 您使用哪个Redis客户端库?用哪种开发语言?对于某些脚本语言,需要安装hiredis模块才能获得高效的客户端。
  • 你的机器是虚拟机吗?在哪个操作系统上?
  • 与Redis的连接是否持久?(也就是说,您不应该在应用程序服务器的每个HTTP请求时连接/断开连接)。

为什么和memcached在一起更好?嗯,一个memcached实例肯定比单个Redis实例更具有可伸缩性,并且可能比单个Redis实例更有响应性,因为它可能运行在多个线程上。Redis是快速的,但单线程-所有命令的执行都是序列化的。因此,当命令正在进行连接时,所有其他客户端都必须等待--给定命令上的错误延迟也会影响所有挂起的命令。一般来说,在低吞吐量时,性能是可以比较的。

在1000 q/s ( Redis或memcached标准的低吞吐量)时,我要说,与Redis服务器本身相比,您的问题更可能发生在客户端(即选择客户端库、连接/断开等)。

最后,我要指出的是,如果您在每个HTTP请求中生成了大量的Redis查询,请考虑尽可能地将发送给Redis的命令流水线。开发高效的Redis应用程序确实是一个关键问题。

如果应用服务器与Redis位于同一个框中,则还可以使用unix域套接字代替TCP回送连接到Redis。它稍微提高了性能(在不使用流水线的情况下,吞吐量提高了50% )。

票数 30
EN

Stack Overflow用户

发布于 2014-05-18 07:56:10

检查redis是否正在使用OS交换内存。如果是这样的话,就会增加延迟。要找到答案,请在这里搜索“交换诱导的延迟”:http://redis.io/topics/latency

如果您的服务器硬件具有NUMA功能,最好使用numactl启动redis-server。不要忘记在sysctl中关闭区域回收模式(vm.zone_reclaim_mode=0),如果您使用NUMA开始使用redis-server。

票数 1
EN

Stack Overflow用户

发布于 2015-07-11 07:19:35

尝试在Lua脚本中编写300获取请求的脚本。它应该工作得更快,因为即使您的客户端代码在本地运行到Redis,在触摸TCP/IP堆栈时也节省了时间。

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

https://stackoverflow.com/questions/16841469

复制
相关文章

相似问题

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