Redis是什么

摘要:这篇笔记主要记录了Redis的基本知识,记录了我对Redis的最初的基本了解

1.引言

​ 随着时代的发展以及人们对美好生活需求的日益提高,人们开始对手机软件上的信息查询速度产生了苛刻的需求,人们都要求软件要“快”,不快的话要么骂手机商,要么骂软件商,如果有一位小姑娘在用新买的苹果手机躺在网络良好的卧室逛网商的时候,搜了个热款裙子却半天出不来,她一定不会骂手机,而会骂网商的开发者,为了维护在用户心中的良好形象,开发者们想到了一个好办法,那就是根据二八原则,建立一个基于硬件的缓冲区,将用户经常使用到的,或者当前热门搜索的信息,实现放到这个缓冲区中,当用户搜索数据的时候事先从这里进行搜索,这样就能保证搜索的快速,只有当这个缓冲区中没有数据的时候,才会从更加缓慢的数据库中搜索信息,这是一个类似于计算机内部CPU的高速缓存以及内存与磁盘之间联系的关系。

​ 既然我们建立了这样的一个更加快速的缓冲区,并且里边要存放数据,那么自然而然的,里边要有一个管理系统,由于这个硬件区域是一个告诉缓存数据区域,因此这个管理系统我们通常称之为高速缓存数据库,Redis就是一种高速缓存数据库。

2.Redis的详细知识
2.1.何为Redis

​ 我们已经知道Redis是一种高速缓存数据库了,接下来我们了解一下其更加具体的信息。Redis是一款由意大利人Salvatore Sanfilippo开发的一款基于内存存储的高速缓存数据库,全称为:Remote Dictionary Server,直译为:远程字典服务,我们也称之为远程数据服务,为什么叫字典呢?这是因为Redis的存储逻辑为键值对的方式,属于一种key-value的存储系统,这种键值对的存储逻辑是基于哈希表思想的(并非完全基于哈希表),而哈希表的设计,实际上就和字典非常相似:通过一个键值,按照相应的查找规则去寻找其所在的分类,进而获得其详细信息。因此在有些语言中也成哈希表为字典结构。Redis是基于C语言实现的,并且支持丰富的数据类型,如:String,list,set,zset,hash。在内存中运行的C程序,并且存储位置也是位于内存中,而非位于磁盘中,那肯定是比SQL数据库快的多,因此它被用于管理位于内存中的常用数据,以提升查询速度,进而提升用户体验。

2.2.Redis的特性

​ Redis的存储物理介质为内存,也就是说它管理的数据,主要是放在内存中的,它直接对内存中的数据进行各种操作,因此Redis具备普通SQL数据库望尘莫及的速度,它每秒钟的读写频率,是远远超过面向硬盘存储的SQL数据库的。

​ 尽管Redis的数据是存储在内存中,却也是持久化的,因为计算机的断电或重启,它存储的数据并不会丢失,这是因为它的存储分为三个部分:内存存储、磁盘存储、日志文件,在通电运行的过程中,Redis会不断的将内存中的数据存放入磁盘中进行备份,并且不断生成相关的日志记录,可以理解为一个动态备份的过程,同时,由于快速缓存区功能的定位,管理软件Redis中因为用户产生的新数据是远远少于它从磁盘中取得的数据的,也就是说,Redis中存在的大部分数据,实际上是磁盘中数据库已经存有的数据,它只不过是拿过来提升这些数据的查找速度而已,这些数据基本上很少被改动,因此在断电之后,再重启的话,Redis已经事先将少量的新数据存放入磁盘,且大量的原有数据本来就位于磁盘,它只需再重新从磁盘中加载这些数据即可,因此其具备持久化的能力,对于持久化过程中的一些具体操作细节,比如新数据累计到什么程度再想磁盘中提交的一些选项,都可以在配置文件中进行配置。

​ Redis支持主从模式,可以配置集群,支持分布式部署,这样使得它有能力支撑大型项目。

PS:在此,Redis位于的告诉缓存区,实际上和计算机中的内存部分非常相似,里边的大部分数据是磁盘中已存在的,新数据并不多,尽管会产生新数据的提交,但这些行为也远远小于原有的数据量,并且新数据的提交会对用户屏蔽,用户不会感知到自己上传的新数据被提交的过程,但是前端面向的直接数据存储区实际上是这个高速缓存区,因此用户在提交数据之后会立即看到自己提交成功的结果,这些由于用户提交的新数据不一定会立即提交到磁盘,但是最终一定会提交到磁盘,这由配置文件决定,尽管小小的“欺骗”了用户,但是在保证不出现提交错误的情况下,提升用户的操作体验,这是一种好事

2.3.Redis的应用场景

​ 在上面的引言中,也简单介绍了一下这种告诉缓存区的应用场景,现在我们来正式的介绍一下Redis的具体应用场景。

​ 首先,在我们进行项目开发的过程中,总是有一些经常需要调取的数据,如果我们将其存放在数据库中,那么其速度可能就会比较慢,这时我们使用Redis进行存储,就可以快速调取到,明显的提升运行速度。就比如在双十一期间,由于某个带货主播的操作,导致了埃塞俄比亚的日晒花魁咖啡豆成为了网红食品,人们趋之若鹜(比如我),开始反复的购买,因此这个原本被搁置在数据库阴冷角落里的东西一下子火了,但是,它位于数据库,在硬盘中,人们从手机端发出请求之后,请求信息通过原本就不快的还被邻居家蹭的wifi好不容易传输到服务器后,服务器要从CPU向内存发出指令,让位于内存中的oracle数据库进程去找,oracle说没问题啊,然后就开始在浩如烟海的磁盘盘片中开始了检索,好不容易找到了,还要提交给内存,然后从内存中传给CPU,CPU再将数据发送给网络端口,最终又传到了用户手机上,这时用户可能正在忙于和邻居吵架,争论是自己买咖啡重要,还是邻居家的小孩看网课上清华重要,买咖啡豆的事情早已忘干净了。因此这时我们便需要快速缓存区和里边的Redis上场,根据某位算法大神书写的用户偏好搜索算法(我瞎编的),计算出了最近热门的一些搜索信息,于是实现加载进高速缓存区中,这样用户在查询埃塞俄比亚的日晒花魁时,服务器在收到查询指令后,只需直接从由内存构建的高速缓冲区检索即可,内存的快速再加上Redis中的优质检索算法,速度要比之前的SQL数据库搜索提升不少,因此用户很快就能获取到商品的信息,并确认购买,用户开心,邻居放心。

​ 因此可见,Redis确实是一个非常有用的,能够很好提升用户体验的基础服务软件,非常值得大家来学习和使用。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐