1.为什么使用redis
1、单线程 效率快
2、有丰富的数据类型
3、存储在硬盘上
4、支持持久化
5、高可用支持集群
6、存储的数据较大,单个key和value可以存储到1G
2.Redis 为什么快呢?
redis 的速度非常的快,单机的 redis 就可以支撑每秒 10 几万的并发,相对于 mysql 来说,性能是 mysql 的几十倍。速度快的原因主要有几点:
-
完全基于内存操作
-
C 语言实现,优化过的数据结构,基于几种基础的数据结构,redis 做了大量的优化,性能极高
-
使用单线程,无上下文的切换成本
-
基于非阻塞的 IO 多路复用机制
3.关于两个服务之间redis取不到值时:
1:key是否一致 2:是否连着同一个redis 3:查看两个服务的redis编码格式是否一致 4:是否过期
4.线程模型
严格来说, Redis Server是多线程的, 只是它的请求处理整个流程是单线程处理的。 这一点我们一定要清楚了解到,不要单纯地认为Redis Server是单线程的。
Redis的性能非常之高,每秒可以承受10W+的QPS,它如此优秀的性能主要取决于以下几个方面:
-
Redis大部分操作在内存完成
-
采用IO多路复用机制
-
非CPU密集型任务
-
单线程的优势
5.纯内存操作
Redis是一个内存数据库,它的数据都存储在内存中,这意味着我们读写数据都是在内存中完成,这个速度是非常快的。
Redis底层采用了高效的数据结构,例如哈希表和跳表,这是它实现高性能的一个重要原因。
6.采用IO多路复用机制
Redis 基于 Reactor 模式开发了自己的网络事件处理器:这个处理器被称为文件事件处理器(file event handler)。文件事件处理器使用 I/O 多路复用(multiplexing)程序来同时监听多个套接字,并根据套接字目前执行的任务来为套接字关联不同的事件处理器。
当被监听的套接字准备好执行连接应答(accept)、读取(read)、写入(write)、关闭(close)等操作时,与操作相对应的文件事件就会产生,这时文件事件处理器就会调用套接字之前关联好的事件处理器来处理这些事件。
虽然文件事件处理器以单线程方式运行,但通过使用 I/O 多路复用程序来监听多个套接字,文件事件处理器既实现了高性能的网络通信模型,又可以很好地与 Redis 服务器中其他同样以单线程方式运行的模块进行对接,这保持了 Redis 内部单线程设计的简单性。
7.非CPU密集型任务
采用单线程的缺点很明显,无法使用多核CPU。Redis作者提到,由于Redis的大部分操作并不是CPU密集型任务,而Redis的瓶颈在于内存和网络带宽。
在高并发请求下,Redis需要更多的内存和更高的网络带宽,否则瓶颈很容易出现在内存不够用和网络延迟等待的情况。
当然,如果你觉得单个Redis实例的性能不足以支撑业务,Redis作者推荐部署多个Redis节点,组成集群的方式来利用多核CPU的能力,而不是在单个实例上使用多线程来处理。
8.单线程的优点
基于以上特性,Redis采用单线程已足够达到非常高的性能,所以Redis没有采用多线程模型。
另外,单线程模型还带了以下好处:
-
避免多线程上下文切换导致的性能损耗
-
避免多线程访问共享资源加锁导致的性能损耗
所以Redis正是基于有以上这些优点,所以采用了单线程模型来完成请求处理的工作。
9.单线程的缺点
单线程处理最大的缺点就是,如果前一个请求发生耗时比较久的操作,那么整个Redis都会被阻塞,其他请求也无法进来,直到这个耗时久的操作处理完成并返回,其他请求才能被处理到。
我们平时遇到Redis响应变慢或长时间阻塞的问题,大部分都是因为Redis处理请