Redis入门-架构篇

一笑奈何 提交于 2019-12-09 22:27:09

  关系代数的RDB,发展了很多年,很多成熟的产品和技术;K-V的redis,现在到了3.x,支持lua脚本、订阅、集群等;图形的neo4j,还有支持分布式的titan;文档数据库mongodb,换装wt引擎后更强劲;
  还有hbase、cassandra等列式数据库,在大数据方向蛮火;最后,别忘了文件系统,nfs、fastdfs、gridfs等,好多东东,整吧,你已经上了贼船。

    来张redis的图:
  

   其实redis的核心就是内存存储、以及大量应用了map这种数据结构,虽说达不到O(1),但内存会肯快,相比网络IO;
   数据结构,比memcache丰富得多,list、map、set、有序set、bitmap,而且具体的数据结构实现有linkedlist、ziplist、intset、skiplist、hashtable等,你可以兼顾内存消耗与效率。
   日志:RDB一次性dump,AOF缓冲区,按策刷盘,高并发还是用aof的;
   事务:redis引擎虽说是单线程的,但不保证ACID事务,当然lua脚本很灵活;
   主从:主动复制模式,支持树状结构,全量复制和部分复制;
   高可用:主客观下线、哨兵选举、故障转移,那个sentinel选举就是paxos的简化版;
   集群:gossip协议配置更新,支持集群的伸缩,就是槽位的变化,当然最好配合smart客户端。
   有观点认为redis支持事务,但你muti的命令,执行出错也不会回滚,日志也不一定是及时写入,个人感觉没必要当RDB来看。
  简单事务,redis支持watch,乐观并发那种锁,其实redis、mongodb虽然不严格支持RDB那种事务,但是也提供一些原子性的操作,别说你没用过。
  那个哨兵选举,确实是paxos的实现,但是主节点选举,以及集群高可用,个人认为,不能保证数据最新,比如只有从节点A节点的数据最新,但发起的投票请求,因为阻塞、丢包,没到达哨兵||集群主节点,其他的从节点发起的投票到达,然后当选了,这种情况不能保证数据的最新。

  详见redis设计与实现。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!