这是我参与「第五届青训营 」伴学笔记创作活动的第 17 天.
今天老师主要讲解了关于redis的用法,用mysql引入redis,为什么已经了mysql数据库还需要引入缓存进行存储,主要原因的速度,将数据写入mysql速度慢于redis,所以在突然大量性读取数据时redis处理性能会优于mysql。
老师将网页传数据的基本流程进行了展示,一部分由mysql集群将数据写入redis缓存,服务端会定时校验缓存数据,以保证数据的实时性。因为用户随时会访问服务端数据,从redis中读取速度非常快。
redis数据库主要是各种不同的数据结构组成。
如上图的String数据结构,会包含一个指针,指针会首先向左读取数据,flags表示存放数据的类型,alloc表示初始内存分配大小,len代表实际存放的数据长度。当扫描到len为5时,该指针向右读取5个单元的数据即可以读取到hello。
在消息通知中,整个文章数据以链表的形式进行连接,以此可以将最新的消息进行推送。所以整个组件设计的逻辑都是由数据结构组成。
在hash数据结构中,利用索引的方式将数据进行查询和迁移,总体需要保证处理事务的阻塞情况达到最小。将整体数据的迁移可以变化为指针的更换,使其IO开销也减小。所以在何种逻辑结构的设计中Hash的设计非常关键。
在zset数据结构中,利用到跳跃式查找,中层跳跃层利用双链表结构进行设计。
在找跳跃表中的6时不需要根据0->1->2->3进行依次查找,而是可以根据索引先找到3再找到5最后找到6,这样的查找速度会十分快。跳跃性则根据数据结构的设计规则进行双链表回溯,可以在短时间找到更多的位置。所以redis的底层设计都是跟数据结构有关。
为了解更为具体的redis需要先学会使用该数据库,并且对比于mysql之间的性能,最后才能体会到对每一个底层结构设计的巧妙。老师讲的很详细并在每个实际情况下进行了举例,所以还需要课后继续深入学习。