数据库十二星座 之 射手座的闪电_数据库

作为数据库十二星座的文章的小结,选择了射手座,为什么是射手座,因为这个星座是我钟爱的,虽然我自己不是这个星座的,但我独爱这个星座的人,他们乐观,开朗,友善,我众多的朋友,家人,有恩之人都在这个星座里面。在某些星座评论里面,说这个星座的人,傻,没心眼,懒,花心,不上进等等, 我只想问一句,你是有多恨这个星座,你了解吗? 人云亦云有意思吗!

数据库十二星座 之 射手座的闪电_数据库_02

回到数据库,REDIS 作为数据库中的异类,有人说他根本不算数据库,就是缓存而已,和传统数据库比,他毫无数据库的样子,即使和同为NOSQL的MONGODB 比较,他也显得和扎眼。 曾经也有REDIS 和 memcached之间一段较长时间的PK,虽然memcached 对比REDIS 哪里都好,可偏偏大家都喜欢用REDIS,事实上REDIS 将自己的本分做的很棒,看市场上的REDIS的占比就知道了,你只要用缓存数据库,第一个就会想到REDIS,memcached 好像慢慢被人忘记了。

和射手座一样,表面看似漫不经心的,游戏人间,其实人家手底下的“活”,一直没有闲着。手段多着呢,属于学校里面看着天天不学习,人家晚上回家不睡觉的学,你看的见吗?

数据库十二星座 之 射手座的闪电_redis_03

射手座 REDIS 绝招之一,飞,

飞也算绝招吗? 当然,12个星座唯一能飞的就是射手座,一对翅膀那是相当让人嫉妒,射手座REDIS 打败看似比他先进的 memcached ,手段之一,就是集群。作为内存数据库REDIS ,能有集群这是一个看似没有什么的,但确实是大杀招的功能。

数据库十二星座 之 射手座的闪电_redis_04

如果一个大型网站,为了提高访问速度,单台机器最大能提供的内存有多大,你愿意用一台昂贵的机器,仅仅跑REDIS, REDIS 早就想好这一切,每台机器几十G的内存,将多台廉价的机器的内存通过 HASH SLOT 的方式进行整合,经数据分散到集群中的某台机器上, 集群是一种无中心化的方式,并非所有其他数据库的 主  --- 从 之间的关系,如同射手座看上去的散漫,不喜欢别人的支配,你越管他,他越跑的厉害,不如就随他去了,早晚玩累了就回来了。

数据库十二星座 之 射手座的闪电_memcached_05

REDIS 的集群是将16384个槽位进行分割,到每个REDIS的节点上的,如果其中一个节点坏掉了,如果你没有备份节点,那那那,就死了,所以每个节点还是要配备用节点的,这点有点类似MONGO 分片,但每个分片其实也有主和从节点。(不完全一样,只为理解方便)

不过相比REDIS集群的方案,大部分企业还是使用的Redis Sentinel 中文名哨兵。这样的方式来对Redis进行使用, 下面就是REDIS  Sentinel,(让我想起 MYSQL的 MHA 的 manager 节点),通过一个Sentinel 可以管理多个 REDIS的 高可用。

数据库十二星座 之 射手座的闪电_数据库_06


数据库十二星座 之 射手座的闪电_memcached_07

射手座绝招 -- 原子光速拳 


看似绝招光速拳,还不如狮子座的 闪电拳厉害,其实光速拳不光是快,比快这绝招绝对不占优势,但要是又快,又是大面积打击呢? 汽油弹了解一下,一个汽油弹好像没有什么,美军打击伊拉克时,大面积投掷汽油弹,那场面何等是一个 “漂亮”百公里让你寸草不生。

REDIS 在面这方面做的的确是厉害,周边的生态环境建立的那是一个全,射手座的人一般属于世外高人,不做则已,做了就不会白做。


隶属一下内存数据库有的功能


1 事务,没有听错,事务,REDIS 将要执行的多个命令通过MULTI来进行组合,一次将多个操作执行,保证多个操作的事务性,不过也有一点点点小问题,他不支持回滚,为什么,(你想让射手座低头认输,那是不可能的,嘴硬的和金刚石一样,虽然心里知道,嘴上那是不会饶了你的,和射手座别斗嘴,斗你就输了),所以一个单线程的快速执行的数据库,将多个操作快速一次执行,怎么能给你回滚,虽然也有REDIS 有日志,但这样做大大影响他的速度,这和他的天性相反,所以还是别想了。


2 实现分布式锁,针对多个线程或进程的对某个资源的争夺,通过分布式锁,来将数据更新有序化,这是多线程中必要的控制,没有这样的控制,则系统将无法处理多线程下的数据更新,这有点传统数据库中的锁的概念,使用场景是什么。

例如我们有一个秒杀的环境,众多人在秒杀,我们怎么保证一个人在秒杀中,如果她成功,不能再秒杀,否则如果她一个人包揽了所有的奖品,你到哪里去哭。

完成这样的事情,方法很多,例如传统的数据库的主键,唯一索引等等,但如果在快速,大量,频繁的情况下,这样的方法,估计就会死的很好看了。通过 REDIS 来做,前端几十台机器,同时都有这位小姐的触发点击,如果将这位小姐的 用户ID 存入 REDIS ,每次点击都判断一下这位小姐是不是已经获奖了,如果她获奖了,就让她OUT, 这在REDIS 里面做是非常简单的,如果用数据库的主键和唯一索引,很可能在高并发下,让数据库死翘翘。当然你也可以用 zookeeper 来实现。那又是另一个话题了。


3 索引的创建,对对对,REDIS 内存的数据库也能建立索引,如同你听到MOGNO 一个 文档数据库也能建立索引一样,他们都可以,只有更快,没有最快,在极端的高并发场景,为REDIS 里面的一些大键,建立索引,或者是复合索引,可以让查询的速度变得更快。


4 丰富的操作管理方式 (这里就不说了,对比某内存数据库,REDIS在这方面做的要棒的多),尤其是在WINDOWS 下也有CLIENT 的操作,的确是感官好的多。

数据库十二星座 之 射手座的闪电_memcached_08


射手座终极大招,黄金箭,光一样的速度,射出必中

数据库十二星座 之 射手座的闪电_memcached_09

REDIS 无疑是快的,别的数据库在用MS级别来标志着自己的速度,而REDIS 的单位是US ,慢过上百 US 就已经要看看是不是要调优,要慢查询了。如同 射手座的人,说话大部分时间都是直来直去,简简单单,要不就不说,说了就找准点,痛也会痛的过瘾。并且REDIS 本身也有日志功能,在REDIS DOWN 机后启动,会自动读取DOWN机时的日志,将数据恢复到宕机时的状态,尤其在多大内存的REDIS 这是十分有用的。

如同箭走直线,单线程的redis 处理某些需要序列性的任务也是非常的得心应手,快速生成表中的 唯一性 ID 。




数据库十二星座 之 射手座的闪电_redis_10




不过可千万别以为射手座,“”傻“”好欺负,傻的是认为他们傻的人,人家狠起来,绝对是重量级的选手,化了你于无形,不鸟你只是觉得你呀,不值得。人家还要,信仰,长寿,蓝天,白云,人间的各种欢愉。


如同REDIS ,单线程简简单单,速度快的似闪电,射手座的人们看似简单,其实串联起来看,他们走过的每个点,早就准确无误的到了他们要去的点,只不过信仰使然,快乐的表面下,隐藏着看透这世界的箭。


祝射手座的亲,2019 快乐,平安,幸福。