Redis系列一之《Redis设计与实践》整体观感
Posted 鼠标的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis系列一之《Redis设计与实践》整体观感相关的知识,希望对你有一定的参考价值。
笔者别的Redis方面的书没有读过,读完这一本,力荐,作者黄建宏,对Redis不太熟悉的,但是对编程稍微有些基础的,全部
读下来应该无压力。作者的编写和讲解非常详细,覆盖的面基本上都讲到,之前一直都是零零碎碎的阅读别人的帖子,总感觉都是
碎的,连接不起来,作者分了四部分来讲分别为数据结构与对象,单机数据库的实现,多机数据库的实现,独立功能的实现。
读完一遍,整体感觉软件设计并非我想象的那般正常人无法理解或者无法想到的,很多设计是正常逻辑"查漏补缺",类似Hash
结构的扩容,主从复制过程中的缓冲区设计其实也是大家能想到的,从A转移到B,转移需要时间,这个时间又有新的数据进来怎么办,
这个问题一般人也都想得到,并且处理方式也正是用缓冲区存下新进来的数据,并做一个标记,告诉它现在开始转移了,后进来的数
据存在这儿,存到一定时间点后转移到目标区域等等。
在数据结构与对象这部分,先介绍了6种底层数据结构,了解数据结构的读起来不会太艰难,他们分别是简单动态字符串、整数集
合字典,链表,跳跃表,压缩列表,这6种数据结构是Redis大多功能的底层实现。以这6种数据结构为底层实现,Redis创建了自己的对
象系统,这才是我们经常用到的字符串对象,列表对象,哈希对象,集合和有序集合对象,Redis的键值对都是对象,也就是键对象和
值对象,Redis总是以字符串对象作为键对象,这个和java中通常以String作为键的理由相似,多次散列要得到相同的整数结果。
Redis为什么快?因为他是一个内存数据库,既然是内存数据库,那么就要考虑宕机问题,宕机了数据怎么办?存磁盘,Redis支持
持久化,有两种方式,基于键值对保存的RDF方式和基于执行写命令的AOF方式
最精彩的部分属于第三部分,也就是Sentinel,复制和集群这3章,这部分的设计看的让人有点天马行空的感觉,尤其是选举领头羊的
这一部分,简直有点像读小说一样,大家互相发消息,互相收消息,互相判断对方状态,突然这厮不行了,A说,领头羊不行了,你们怎
么看?B说,我这里也没他消息,估计吧?C说,擦,我也没,难道头挂了?》》》过了一会儿,大家意识到,领头羊真的不行了,于是
开始投票选举争取拉票,第一位过半(也可能不是过半,1/3?)的被选为新的领头羊,其他人挨个儿滴血效忠。
上面瞎扯了很多,总体读下来还是有一番波澜的,高潮部分,就是第三部分,Redis的命令很多,但是分类比较清晰,上手也比较容
易,目前集成在java项目中的两种方式:Jedis和Spring集成的RedisTemplate.后面有时间我会继续出系列来些干货,排版没花时间,有缘
人见~~
以上是关于Redis系列一之《Redis设计与实践》整体观感的主要内容,如果未能解决你的问题,请参考以下文章
同程旅行王晓波:同程凤凰缓存系统在基于 Redis 方面的设计与实践(上篇)