redis-学习笔记(redis 单线程模型)

redis 在宏观上是多线程运行, 在微观上是单线程模型

什么是线程安全问题
在多线程中, 会出现多个线程同时对一个变量进行操作(如自增), 那么两次操作之后, 可能会出现结果不准确的情况(比如两次自增只让该变量的值+1, 而非+2)

redis 中不存在线程安全问题
redis 只使用一个线程, 来处理所有命令请求, 所以当多个请求同时到达 redis 服务器, 这些请求会在队列中排队, 再等待 redis 服务器 一个一个将队列里的请求取出执行, 因此, 微观上讲, redis 服务器是串行 / 顺序执行这多个命令的.

redis 能够使用单线程模型很好工作的原因
redis 的核心业务逻辑, 都是短平快的, 不太消耗 cpu 资源, 因此也就不太吃多核了
(老板向员工分派任务, 只要说你去整理一下报表, 具体表的结构, 内容, 整理方式 etc, 不需要老板再给你详细说了吧, 那只是分一下任务, 自然短 - 平 - 快 !)

redis 使用单线程模型效率仍然很高, 速度仍然很快的原因 (参照物是数据库 mysql, Oracle, sql server …)

  1. redis 访问内存. 数据库则是访问硬盘.
  2. redis 的核心功能, 比数据库的核心功能更简单
  3. 单线程模型, 避免了一些不必要的线程竞争开销
  4. 处理网络 IO 的时候, 使用了 epoll 这样的 IO多路复用机制

什么是 IO 多路复用机制
一个线程可以管理多个 socket
对 TCP 来说, 服务器每服务一个客户端, 就会分配一个 socket 给客户端
但是同一时间只有少数 socket 是活跃的
如果使用一个线程来管理一个 socket , 那么大多数时间都会是静默的
因此 我们可以使用一个线程来处理多个 socket, 这就是 IO 多路复用

Linux 上提供 IO 多路复用, 主要是三套 API
select 轮询, 挨个查看, 该事件会不会被调用
poll
epoll 事件通知 / 回调机制 (新出的, 效率高)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值