一、使用内存进行存储
我们都知道redis是使用内存来进行数据的存储,这也是为什么redis的访问速度要远远快于mysql的主要原因,因为是使用内存存储数据,可以避免频繁的进行写盘操作,大大降低响应时间:
二、单线程结构
多线程一定比单线程快嘛?
虽然我们知道当我们使用多线程的时候,可以加快我们的系统访问,但是在使用多线程的过程中,对于共享变量的访问,会将多线程操作变成单线程进行操作,并且还需要增加额外的同步术语(例如java中的锁),存在的一定的性能开销,并且多个线程在进行锁竞争的时候,也会影响系统的吞吐性,所以多线程不一定比单线程快。
redis采用单线程来处理主要的响应命令,既不需要考虑数据安全问题,不需要额外去使用锁来降低性能开销,同时可以避免多线程的上下文切换的开销,并且CPU并不是redis的主要性能瓶颈。
redis的单线程并不是指,在整个redis的服务端只有一个线程在进行工作,只是在接受客户端的IO请求响应进行读写的时候是单线程的操作;redis本身是存在多线程的使用场景的,比如:异步删除、持久化、集群同步。
三、高性能的多路复用IO模型
可以与java的nio进行类比,相当于就是使用的是非阻塞性io模型,一个线程可以处理多个客户端连接,并且通过事件监听的机制,并通过基于事件的回调机制,即针对不同事件的发生,调用相应的处理函数,通过这种事件回调机制,可以避免redis去一直轮询