Redis诞生于2009年全称是 Remote Dictionary Server (远程词典服务器),是一个基于内存的键值型NoSQL数据库。
为什么是词典服务呢?之前也介绍过,redis是一个键值型的数据库,我们根据Key找value,这不就跟词典很像。
下图就是开发redis的作者,它的名字比较长,也比较绕口,因此在网络上也被成为 ANTIREZ
这个名字。
最早的时候他跟他的小伙伴一起开发了一个网站,这个网站刚开始用户量还比较少,所以基于MySQL也能满足他的需求。
但是后来随着用户量的增长,有时候并发高的时候,MySQL根本就承担不住了,此时它就希望有这么一个库:吞吐能力很强,并发能力很高,并且还有一些特殊的业务需求需要去满足,于是基于这个目的他就开发了redis。
redis服务器开发出来后,具有了一些特征:
-
键值(key-value)型,操作起来简单。value支持多种不同数据结构(字符串、集合等),功能丰富
-
单线程,因此线程是安全的,每个命令具备原子性,安全的,不会出现一个命令执行了一半,其他命令就突然插进来的情况
Redis6.0的多线程仅仅是在网络请求的处理上,而核心命令的执行依旧是单线程的。
-
低延迟,速度快
它明明是一个单线程,性能却这么好呢?
- 基于内存,内存的读写速度相对于磁盘来讲非常的高,高出了很多很多倍。
- 它尽管单线程,但是它却基于了
IO多路复用
的方式,大大的提高了整个服务的吞吐能力 - 良好的编码。redis是基于C语言编写的,并且开源在网络上,那么这个redis整体编码,无论从编码的风格上、还是从代码的习惯上来讲,可以说得到了业界的公认好评。
因此基于这三个原因,redis尽管单线程,但是性能却非常优异。
最重要的是内存!因为无论是IO多路复用,还是编码也好,这样的一些功能MySQL也能满足。
-
支持数据持久化,内存查询性能是高,但是它存在数据不安全的情况,即一旦断电,内存数据就消失了,所以为了解决这个问题,redis的作者就给它加了持久化的功能,它会定期将数据从内存持久化到词频,从而确保数据的安全性
-
支持主从集群.分片集群(把数据拆分)
主从集群MySQL也有,指的是:从节点可以去备份主节点的数据,也是一种安全性的考虑,这样依赖一旦有节点宕机,数据在其他从节点上也能找到。同时主从可以做读写分离,从而大大的提高了查询读写的效率。
分片集群:做数据的拆分,即将数据拆成n份存到不同结点上去,这样一来我用很多台机器一起来存,存储的上限就提高了,即水平的一种扩展。
-
支持多语言客户端。Java、python、C等各种各样的语言基本上都能操作reids。
功能丰富、性能还好、还支持数据持久化、安全,还能做各种集群,轻易的去做水平扩展,并且任何语言都能用,所以它不火谁火?