Redis的底层原理和单线程架构

Redis(C语言实现)

 

 底层为hashtable


    1.非关系型的键值对数据库,可以根据键以O(1)的时间复杂度取出或插入关联值
    2.Redis的数据是存在内存中的
    3.键值对中键的类型可以是字符串,整型,浮点型等,且键是唯一的,但是最终存储形式都会转换为string类型
    4.键值对中的值类型可以使string,hash,list,set,sorted set等
    5.Redis内置了复制,磁盘持久化,LUA脚本,事务,SSL,ACLs,客户端代理等功能
    6.通过Redis哨兵和自动分区提供高可用性

Redis执行步骤

步骤一:client通过网络向Redis发送一条命令

步骤二:由于Redis是单线程应用,可以把Redis想像成一个队列,client执行的所有命令都在排队等着server端执行

步骤三:Redis服务端按顺序执行命令

步骤四:server端把命令结果通过网络返回给client

 

  Redis使用了单线程架构和I/O多路复用模型来实现高性能的内存数据库服务

Redis为何采用单线程架构?

单线程和多线程的区别:

    (1)需要完成一个项目,一个人做的话需要10天。10个人同时做的话需要1天(简单理解单线程和多线程)

    (2)单线程就是每次只处理一条请求。多线程同时处理多条请求

   (3)单线程处理完所有任务耗时长,但是安全

   (4)多线程处理完所有任务耗时短,但是不安全。(也有可能耗时长,由于是同时进行,所以有可能争抢同一块资源,造成死循环)

   (5)单线程避免了线程切换和竞态产生的消耗

    Redis客户端对服务端的每次调用都经历了发送命令,执行命令,返回结果三个过程。其中执行命令阶段,由于Redis是单线程来处理命令的,所有每一条到达服务端的命令不会立刻执行,所有的命令都会进入一个队列中然后逐个被执行。并且多个客户端发送的命令的执行顺序是不确定的。但是可以确定的是不会有两条命令被同时执行,不会产生并发问题,这就是Redis的单线程基本模型。

  (6)单线程可以简化数据结构和算法的实现。

 

Redis访问快的原因

    (1)单线程架构,避免了线程切换和竞态产生的消耗

   (2)将数据全部存储在内存中,内存访问快

    (3)非阻塞I/O,Redis使用epoll作为I/O多路复用技术的实现,再加上Redis自身的事件处理模型将epoll中的连接、读写、关闭都转换为事件,避免在网络I/O上浪费过多的时间

 

Redis的优势

  • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
  • 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
  • 原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作合并后的原子性执行。(事务)
  • 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值