【Redis】关于它为什么快?使用场景?以及使用方式?为何引入多线程?

目录

1.既然redis那么快,为什么不用它做主数据库,只用它做缓存?

2.Redis 一般在什么场合下使用?

 3.redis为什么这么快

4.Redis为什么要引入了多线程?


1.既然redis那么快,为什么不用它做主数据库,只用它做缓存?

redis设计者的初衷,就只是为了存储小量级的共享数据

所以,他敢直接单线程直接干上去,因为数据量小,所以够快。

因此,一旦碰到大key的情况, redis的风险就来了。

我曾经遇到过,用redis做队列,产生了大key,然后导致主服务器阻塞。

接下里引发了集群的客观下线,数据全面紊乱。

试想一下,如果用redis存储个千万级别的数据,那select一下,是不是其他线程都别玩了。

ok,你可以说,那咱们搞个多线程版的redis不就解了。

但别忘了,关系型数据库,牛逼之处就是对事务的管控,比如mysql的mvcc

那redis有这些东西吗?它没有啊。

那强行上车,到时候各种脏读,不可重复读,幻读全来了。

何必呢,有mysql这种现成的产品,何必为了追求那一点效率,去回炉重造呢?

2.Redis 一般在什么场合下使用?

Redis 是一种开源的、支持网络、基于内存、可持久化的键值数据库。常用于在高并发、高性能场景下进行缓存、消息队列、计数器、排序等操作。

  1. 缓存:Redis 的读写性能非常高,适合做缓存。
  2. 消息队列:Redis 支持发布订阅模式,可以作为消息队列使用。
  3. 计数器:Redis 支持原子计数器操作,可以用来统计网站的访问量等。
  4. 排序:Redis 支持对数据进行排序,可以用来做排行榜等应用。



 3.redis为什么这么快

Redis 之所以被认为是快速的原因有以下几点:

内存存储:Redis 将数据存储在内存中,这使得它能够提供快速的读写操作。与传统的磁盘存储相比,内存存储的访问速度更快,因为它无需进行磁盘 I/O 操作。

单线程模型:Redis 使用单线程模型来处理所有的客户端请求。这样可以避免多线程之间的上下文切换开销和锁竞争,使得请求的处理更加高效。此外,单线程模型还简化了 Redis 的实现和维护。

非阻塞 I/O:Redis 使用非阻塞的网络 I/O 模型,通过使用事件驱动的方式处理客户端请求。它利用操作系统提供的 epoll、kqueue 等机制,在单线程中同时处理多个客户端连接,避免了传统阻塞 I/O 的等待时间,提高了并发性能。

简单数据结构:Redis 提供了一些简单而高效的数据结构,如字符串、哈希表、列表、集合和有序集合等。这些数据结构的实现经过了优化,能够在常数时间内执行大多数操作,如插入、删除和查找等。

持久化选项:Redis 提供了多种持久化选项,包括快照(snapshot)和日志(append-only file)。通过将数据保存到磁盘上的文件,可以在重启后快速恢复数据,保证数据的持久性。

高效的操作:Redis 提供了丰富的命令和功能,可以通过一条命令完成复杂的操作。例如,它支持原子操作、批量操作、管道操作和事务等,这些操作可以减少网络往返次数,提高了性能。

4.Redis为什么要引入了多线程?

1、线程是什么?

线程是操作系统能够进行运算调度的最小单位,换句话说线程就是cpu调度的最小单位。在多线程编程中,线程是程序执行的流程,每个线程都有自己的执行路径和上下文,并且可以独立执行和同步与其他线程。

2、使用线程带来的好处?

  • 并发处理:线程可以让程序同时执行多个任务,实现并发处理。多线程可以充分利用多核处理器的优势,提高系统的处理能力。
  • 资源共享:线程可以共享进程的资源,如内存、文件等。这样可以减少资源的重复创建和占用,提高系统的效率和性能。
  • 提高响应性:通过多线程,可以将耗时的操作和阻塞任务放在后台线程中处理,保持主线程的响应性,提高用户体验。

3、Redis引入线程后的好处?

  • 并发处理能力:Redis是一个高性能的缓存和数据存储系统,引入多线程可以提高其并发处理能力,同时处理多个客户端请求,减少请求的排队等待时间。
  • 提高吞吐量:通过多线程处理客户端请求,Redis可以同时执行多个命令,提高系统的吞吐量,加快数据处理速度。
  • 高效利用资源:Redis引入线程后,可以更好地利用多核处理器的性能,充分发挥硬件资源的优势,提高系统的效率和性能。

总的就是redis引入多线程可以提高并发处理能力和性能,能够更好地应对高并发的请求,而且能充分利用多核处理器的性能,提高系统的吞吐量和响应速度。多线程还可以优化资源的利用和提高系统的效率,好好处多多。

另外很多人有个误解redis 不是单线程的吗?怎么并发处理?

这是对于Redis的误解。事实上,Redis在处理客户端请求时采用了单线程的模型,但这并不意味着它不能并发处理。

Redis之所以可以并发处理,主要有以下几个原因:

  • 非阻塞式I/O:Redis使用了非阻塞式的网络I/O模型,通过异步地处理网络请求,减少了对于阻塞等待的需求,提高了系统的并发处理能力。
  • 高速内存访问:Redis将数据存储在内存中,并通过内存访问来处理请求,相比于磁盘访问,内存访问更快速,能够更快地响应客户端请求。
  • 单线程模型的优化:虽然Redis使用单线程处理请求,但它通过使用高效的数据结构和算法来优化性能,例如使用跳表(Skip List)来实现有序集合,使用字典(Dictionary)来实现快速的键值查找,这些优化使得Redis能够在单线程下处理大量的请求。
  • 多路复用技术:Redis使用多路复用技术来管理多个客户端连接,通过监听多个连接的事件并进行处理,从而实现了同时处理多个客户端请求的能力。

尽管Redis在处理客户端请求时采用了单线程的方式,但它通过上面优化策略,使得单线程能够高效地处理并发请求。这也是Redis在性能高的原因之一。

Redis 6引入多线程主要是为了提高Redis的性能和并发处理能力。在之前的版本中,Redis是单线程的,只能利用单个CPU核心的性能。而随着硬件的发展,CPU核心数量的增加,单线程Redis已经无法满足高并发的需求,因此Redis 6引入多线程来解决这个问题Redis 6的多线程实现采用了一种“多Reactor模式”的架构,称为IOR多路复用器。该架构中,Redis主线程(Acceptor线程)只负责接收新的连接请求,而IO线程池负责处理所有的IO操作(读写请求、定时器等),这些IO线程采用了多Reactor模式,利用多个EventLoop线程来处理IO事件,每个EventLoop线程都有自己的EventLoop对象和事件循环机制,可以独立地处理IO事件,从而提高了Redis的并发处理能力。 具体来说,Redis多线程实现采用了以下几个关键技术: 1. IO多路复用:采用epoll机制管理网络连接,通过多路复用技术来实现高效的事件监听和IO处理。 2. 事件驱动模型:采用Reactor模式来处理IO事件,通过事件驱动机制实现回调函数的调用和IO事件的处理。 3. 多线程采用多Reactor模式,将IO事件分配给不同的EventLoop线程处理,通过线程池来管理IO线程,提高Redis的并发处理能力。 总的来说,Redis 6的多线程实现采用了一种高效的事件驱动模型,利用多路复用技术和多线程技术来实现高并发的IO操作,提高了Redis的性能和并发处理能力,使其能够更好地应对高并发场景下的数据处理需求。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值