`
gaojingsong
  • 浏览: 1181915 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

【Redis到底有多快】

阅读更多

Redis采用的是基于内存的采用的是单进程单线程模型的KV数据库,由C语言编写。官方提供的数据是可以达到100000+的qps。这个数据不比采用单进程多线程的同样基于内存的KV数据库Memcached差。

 

Redis快的主要原因是:

完全基于内存

数据结构简单,对数据操作也简单

使用多路 I/O 复用模型

 

 

 

单进程单线程好处

代码更清晰,处理逻辑更简单

不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗

不存在多进程或者多线程导致的切换而消耗CPU

 

 

单进程单线程弊端

无法发挥多核CPU性能,不过可以通过在单机开多个Redis实例来完善;

其他一些优秀的开源软件采用的模型

 

多进程单线程模型:Nginx

单进程多线程模型:Memcached

 

 

 

影响 Redis 性能的因素

有几个因素直接决定 Redis 的性能。它们能够改变基准测试的结果, 所以我们必须注意到它们。一般情况下,Redis 默认参数已经可以提供足够的性能, 不需要调优。

  • 网络带宽和延迟通常是最大短板。建议在基准测试之前使用 ping 来检查服务端到客户端的延迟。根据带宽,可以计算出最大吞吐量。 比如将 4 KB 的字符串塞入 Redis,吞吐量是 100000 q/s,那么实际需要 3.2 Gbits/s 的带宽,所以需要 10 GBits/s 网络连接, 1 Gbits/s 是不够的。 在很多线上服务中,Redis 吞吐会先被网络带宽限制住,而不是 CPU。 为了达到高吞吐量突破 TCP/IP 限制,最后采用 10 Gbits/s 的网卡, 或者多个 1 Gbits/s 网卡。
  • CPU 是另外一个重要的影响因素,由于是单线程模型,Redis 更喜欢大缓存快速 CPU, 而不是多核。这种场景下面,比较推荐 Intel CPU。AMD CPU 可能只有 Intel CPU 的一半性能(通过对 Nehalem EP/Westmere EP/Sandy 平台的对比)。 当其他条件相当时候,CPU 就成了 redis-benchmark 的限制因素。
  • 在小对象存取时候,内存速度和带宽看上去不是很重要,但是对大对象(> 10 KB), 它就变得重要起来。不过通常情况下面,倒不至于为了优化 Redis 而购买更高性能的内存模块。
  • Redis 在 VM 上会变慢。虚拟化对普通操作会有额外的消耗,Redis 对系统调用和网络终端不会有太多的 overhead。建议把 Redis 运行在物理机器上, 特别是当你很在意延迟时候。在最先进的虚拟化设备(VMWare)上面,redis-benchmark 的测试结果比物理机器上慢了一倍,很多 CPU 时间被消费在系统调用和中断上面。
  • 如果服务器和客户端都运行在同一个机器上面,那么 TCP/IP loopback 和 unix domain sockets 都可以使用。对 Linux 来说,使用 unix socket 可以比 TCP/IP loopback 快 50%。 默认 redis-benchmark 是使用 TCP/IP loopback。
  • 当大量使用 pipelining 时候,unix domain sockets 的优势就不那么明显了。
  • 当使用网络连接时,并且以太网网数据包在 1500 bytes 以下时, 将多条命令包装成 pipelining 可以大大提高效率。
  • 在多核 CPU 服务器上面,Redis 的性能还依赖 NUMA 配置和 处理器绑定位置。 最明显的影响是 redis-benchmark 会随机使用 CPU 内核。为了获得精准的结果, 需要使用固定处理器工具(在 Linux 上可以使用 taskset 或 numactl)。 最有效的办法是将客户端和服务端分离到两个不同的 CPU 来高校使用三级缓存。 
  • 在高配置下面,客户端的连接数也是一个重要的因素。得益于 epoll/kqueue, Redis 的事件循环具有相当可扩展性。Redis 已经在超过 60000 连接下面基准测试过, 仍然可以维持 50000 q/s。一条经验法则是,30000 的连接数只有 100 连接的一半吞吐量。 
  • 在高配置下面,可以通过调优 NIC 来获得更高性能。最高性能在绑定 Rx/Tx 队列和 CPU 内核下面才能达到,还需要开启 RPS(网卡中断负载均衡)。更多信息可以在 thread 。Jumbo frames 还可以在大对象使用时候获得更高性能。
  • 在不同平台下面,Redis 可以被编译成不同的内存分配方式(libc malloc, jemalloc, tcmalloc),他们在不同速度、连续和非连续片段下会有不一样的表现。 如果你不是自己编译的 Redis,可以使用 INFO 命令来检查内存分配方式。 请注意,大部分基准测试不会长时间运行来感知不同分配模式下面的差异, 只能通过生产环境下面的 Redis 实例来查看。
  • 大小: 83.7 KB
  • 大小: 22.6 KB
0
0
分享到:
评论

相关推荐

    「Redis」Redis是单线程的,但Redis为什么这么快?

    「Redis」Redis是单线程的,但Redis为什么这么快?

    Redis实战_Redis实战中文完整版_Redis快速入门_Redis数据类型及操作_Redis常用

    - **有序集合(Sorted Set)**:与集合类似,但每个元素都有一个分数,可以按照分数排序。 3. **Redis命令操作**:书中会详细介绍每种数据类型的命令,如`SET`、`GET`、`HSET`、`LPOP`、`SADD`、`ZADD`等,以及事务...

    redis2.6.14快速安装

    在提供的压缩包中,有两个tar文件:"make-install.tar"和"copy-install.tar",分别代表了编译安装和复制安装两种方式。 1. **编译安装**(make-install.tar): - 下载Redis源码:你需要从Redis官方网站或Git仓库...

    REDIS_redis的工具包_redisinlabview_labviewredis_labview调用redis_redis

    它可能包含了一个或多个库,这些库封装了Redis协议,以便于LabVIEW中的数据传输。通过这个工具包,用户可以直接在LabVIEW程序中执行诸如设置键值、获取键值、执行事务、操作列表和集合等操作。`Palette`文件夹中的...

    Redis-5.0.0集群配置

    不同版本的Redis可能会有不同的配置选项,了解这些差异有助于更好地配置和管理集群。 #### 23. 大压力下Redis参数调整要点 在高负载环境下,合理调整Redis的相关参数至关重要,包括但不限于内存管理、网络设置等。...

    redis3.0安装包 window 64位

    (3)多主复制:Redis 3.0支持多主复制,可以将多个Redis实例之间的数据进行同步,有效高了Redis的可靠性; (4)集群:Redis 3.0支持集群,可以将多个Redis实例拼接成一个集群,并实现负载均衡,提高Redis的可用性...

    RedisStudio Redis监控工具

    1. **内存存储**: Redis的所有数据都存储在内存中,读写速度极快,但这也意味着需要关注内存使用情况,防止内存耗尽。 2. **持久化**: Redis提供了RDB(快照)和AOF(追加日志)两种持久化策略,确保在系统宕机后...

    redis客户端连接工具 RedisDesktopManager

    4. **主从复制**:为了提高可用性和扩展性,Redis支持主从复制,一个主节点可以有多个从节点,数据更新会从主节点同步到从节点,实现读写分离。 5. **事务**:Redis支持事务,用户可以一次性执行多条命令,保证原子...

    redis快速入门详解

    redis快速入门详解,包括主从备份、详细配置说明~

    redis 和 redis 可视化工具

    1. **高速度**:Redis 是内存数据库,读写速度极快,适合处理高并发场景。 2. **数据持久化**:Redis 提供了AOF(Append Only File)和RDB(Snapshotting)两种持久化方式,确保即使在系统崩溃后也能恢复数据。 3. *...

    redis-windows-7.0.11

    Redis在Windows上的安装和使用相对于Linux来说稍微有些麻烦,但是有一些第三方工具可以帮助我们在Windows上使用Redis。其中最常用的是redis-windows,它是一个Windows下的Redis管理工具,可以方便地安装、配置和管理...

    redis-windows-redis7.0.5.zip

    在"redis-windows-redis7.0.5.zip"这个压缩包中,可能包含的文件有: 1. `redis-server.exe`:Redis服务器的二进制文件,用于启动和管理Redis实例。 2. `redis-cli.exe`:Redis命令行客户端,用于与Redis服务器交互...

    redis快速入门与详解

    redis的快速入门与详解.让你快速了解和掌握redis的使用

    Redis实战Redis实战

    Redis支持字符串、哈希、列表、集合和有序集合等多种数据结构,每种都有其特定的应用场景。例如,字符串常用于存储简单数据,哈希可以存储对象,列表适用于实现消息队列,集合则用于存储互不重复的元素,而有序集合...

    Redis和RedisDesktop

    Redis Desktop Manager支持连接到多个Redis实例,无论是本地还是远程服务器,同时提供实时日志查看、数据搜索功能,以及对Redis配置文件的编辑。此外,它还具有加密连接和SSL/TLS安全支持,确保数据传输的安全性。 ...

    redisredis redis redis redis

    RDB 定时保存数据库状态,恢复速度快但有数据丢失风险;AOF 记录所有写操作,恢复完整但速度较慢,可配置同步策略平衡性能与安全性。 3. **复制**:Redis 支持主从复制,通过复制,可以创建多个从节点来提高读取...

    redis,phpredis中文手册

    phpredis同样支持对多个键进行操作,如MSET和MGET命令,它们分别用于一次性设置和获取多个键值对。MSET命令可提高存储效率,而MGET则能够一次性检索多个键的值。 在模式匹配方面,KEYS命令用于根据给定的模式匹配...

    Windows 上安装 Redis安装,redis7.2安装到windows上面

    在Windows上安装Redis的过程涉及到多个步骤,包括启用必要的Windows功能、安装WSL2(Windows Subsystem for Linux 2)、设置默认WSL版本以及在Linux环境中安装Redis。以下是对这些步骤的详细说明: 1. **启用...

    windows版Redis1

    Redis是世界上最受欢迎的开源键值存储系统之一,它在Linux操作系统上原生运行,但为了满足Windows用户的需求,也提供了Windows版本。标题“windows版Redis1”表明我们讨论的是一个适用于Windows操作系统的Redis...

Global site tag (gtag.js) - Google Analytics