Redis单线程模型

Redis单线程模型解析

什么是Redis

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings)散列(hashes)列表(lists)集合(sets)有序集合(sorted sets) 与范围查询, bitmapshyperloglogs地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication)LUA脚本(Lua scripting)LRU驱动事件(LRU eviction)事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。

Redis的单线程模型

Redis的单线程模型采用非阻塞IO多路复用的机制,使用单线程轮训监控与客户端的socket连接,监控socket命令所形成的AE_READABLE。拿到命令不直接执行,而是放入队列中,一个一个执行,不会有并发问题。
在这里插入图片描述

单线程的Redis为什么这么快?

  • 纯内存操作,查找和操作的时间复杂度都是O(1)
  • 单线程操作,避免了频繁的上下文切换,而多线程切换会涉及到锁以及消耗更多CPU
  • 采用非阻塞IO多路复用机制:内部采用epoll+自己实现的简单事件框架。在epoll中的读,写,关闭,连接都转化成了事件,然后利用epoll的多路复用机制,绝不在IO上浪费一点时间
  • 数据结构简单,对数据操作也简单

Redis为什么是单线程的?

官方答案:
因为Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了。

如果CPU成为Redis的瓶颈怎么办?

可以考虑多起几个Redis进程,只要客户端分清楚哪些数据在哪个Redis进程就可以了。使用redis-cluster更好。

单线程处理的缺点?

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值