redis为什么那么快

Redis是现在最受欢迎的NoSQL数据库之一,Redis是一个使用ANSI C编写的开源、包含多种数据结构、支持网络、基于内存、可选持久性的键值对存储数据库。

一、使用内存进行存储
redis是使用内存来进行数据存储的,所以redis的访问速度要远远快于mysql,因为是使用内存存储数据,可以避免频繁的进行写盘操作,大大降低响应时间:
在这里插入图片描述

二、单线程结构
在使用多线程的过程中,对于共享变量的访问,会将多线程操作变成单线程进行操作,并且还需要增加额外的同步术语(例如java中的锁),存在的一定的性能开销,并且多个线程在进行锁竞争的时候,也会影响系统的吞吐性

redis采用单线程来处理主要的响应命令,既不需要考虑数据安全问题,不需要额外去使用锁来降低性能开销,同时可以避免多线程的上下文切换的开销

redis的单线程并不是指,在整个redis的服务端只有一个线程在进行工作,只是在接受客户端的IO请求响应进行读写的时候是单线程的操作;redis本身是存在多线程的使用场景的,比如:异步删除、持久化、集群同步。
三、高性能的多路复用IO模型
redis一个线程可以处理多个客户端连接,并且通过事件监听的机制,并通过基于事件的回调机制,即针对不同事件的发生,调用相应的处理函数,通过这种事件回调机制,可以避免redis去一直轮询关注是否有对应的事件发生,避免cpu的浪费
相当于redis单线程不会阻塞在某一个特定的操作上,所以一个redis的服务端,可以提供给多个客户端进行连接
在这里插入图片描述
四、丰富的数据结构
redis是一个键值对存储的关系型数据库,对于key来说就是单一的string结构,但对于value,提供了丰富的数据结构:string、list、hast、set、sorted set。
在这里插入图片描述
• String的底层是(简单动态字符串)
• List的底层是(双向链表和压缩链表)
• Hash的底层是(压缩链表和哈希表)
• Set的底层是(整数数组和哈希表)
• Sorted Set底层(压缩链表和跳表)

为了保证数据的快速查找redis的键值对采用的是哈希表的存储方式,来进行数据的存储,但因为其value的多样性,哈希表中存储的并不是具体的值,而是一个内存引用地址,在通过内存引用的地址查找到对应的具体的值。其结构如下图所示:
在这里插入图片描述
因为hash的结构,所以其查找数据的时间复杂度为O(1)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值