Redis是单线程为什么查询这么快

Redis采用单线程模型,每条命令执行如果占用大量时间,会造成其他线程阻塞,对于Redis这种高性能服务是致命的,所以Redis是面向高速执行的数据库

一、Redis是非关系型数据库

NoSQL是基于键值对的,不需要经过sql层的解析,所以性能非常高

二、Redis是单线程:

避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,没有线程阻塞和锁竞争。没有加锁和释放锁的操作,不会出现死锁而导致的性能消耗;

三、Redis是纯内存操作:

完全基于内存,所有数据基本上都存在于内存当中,redis 自身是一个 Map,其中所有的数据都是采用 key : value 的形式存储 ,Map的优势就是查找和操作速度快。会定时以追加或者快照的方式刷新到硬盘中。由于redis是一个内存数据库, 所以读取写入的速度是非常快的, 所以经常被用来做数据, 页面等的缓存。

四、数据结构简单

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

类型
String
通常使用字符串,如果字符串以整数的形式展示,可以作为数字操作使用
List
保存多个数据,底层使用双向链表存储结构实现
Set
hash 存储结构完全相同,仅存储键,不存储值( nil ),并且值是不允许重复的
Hash
一个存储空间保存多个键值对数据
sorted_set
set 的存储结构基础上添加可排序字段

 

五、底层模型不同

Redis 直接自己构建了 VM 机制 ,不会像一般的系统会调用系统函数处理,会浪费一定的时间去 移动 和 请求。

Redis 的 VM (虚拟内存)机制就是暂时把不经常访问的数据(冷数据)从内存交换到磁盘中,从而腾出宝贵的内存空间用于其它需要访问的数据(热数据)。通过 VM 功能可以实现冷热数据分离,使热数据仍在内存中、冷数据保存到磁盘。这样就可以避免因为内存不足而造成访问速度下降的问题。

Redis 为了保证查找的速度,只会将 value 交换出去,而在内存中保留所有的 Key。所以它非常适合 Key 很小,Value 很大的存储结构。

六、非阻塞I/O:

Redis采用epoll作为I/O多路复用技术的实现,再加上Redis自身的事件处理模型将epoll中的连接,读写,关闭都转换为了时间,不在I/O上浪费过多的时间。

I/O 多路复用机制是指一个线程处理多个 IO 流,select/epoll 机制。在 Redis 只运行单线程的情况下,该机制允许内核中,同时存在多个监听 Socket 和已连接 Socket。内核会一直监听这些 Socket 上的连接请求或数据请求。一旦有请求到达,就会交给 Redis 线程处理,这就实现了一个 Redis 线程处理多个 IO 流的效果。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值