首页
精选文章Redis查看全文Redis是一个开源软件,遵守BSD 协议,其本质上是一个Key-Value类型的内存数据库。但是和其他的KV缓存例如memcached不同的地方是其功能更加完善,特性更加丰富。Redis支持多种的数据结构,例如String,Hash,List,Set,ZSet等 Redis支持数据持久化 Redis支持主从结构,支持集群化部署 Redis支持原子操作,可以安全地 SET 或 INCR 键,添加和删除集合中的元素等。 Redis支持通过Lua脚本语言实现事务,原子操作包装等 Redis有较高的性能,支持pipeline等批量操作。 线程模型 Redis基于Reactor模式实现了网络处理模块,该模块分为4部分 套接字管理,Redis是Client-Server架构,Client请求数据的时候需要通过网络链接,所以Redis Server需要对这些链接进行管理,比如移除超时的连接等。 IO多路复用程序,Redis的I/O多路复用有多套实现,分别利用select、epoll、evport和kqueue这些I/O多路复用函数库来实现。 事件分发,多路复用会根据IO事件的类型,例如链接事件,读事件,写事件进行不同的处理逻辑,所以需要事件分发器分到不同的处理器。 事件处理器,不同的事件处理器分别处理连接、读、写等事件。 Redis的IO模型是基于Reactor的单线程,但是可以承担较高的QPS,原因如下: Redis的操作都是基于内存的,所以速度非常快。 Redis使用哈希作为索引,对于大部分查询只需要O(1)的事件复杂度就可以找到key对应的数据。 Redis是基多路复用模型中的epoll模型进行网络通讯的,epoll模型的事件监听机制…计算机编码查看全文在早期机械的计算装置中,计算器是辅助人脑进行计算的,所以使用的都是十进制,例如西方发明的手摇机械计算器利用内部精密的齿轮完成计算,齿轮上的10个格子代表数字,从第一个格子1以此类推至第9个格子代表9,转动一圈完成进位计算,将此类齿轮级联10个可以表示0到999999999的数字。再配合其他的机械设备,就可以实现加减乘除的计算。中国的算盘也是十进制的计算器,传统的算盘每一个格子分上下两栏,下方5个算珠每个代表1,上侧2个算珠每个代表5,所以算盘的每一格表示10。 十进制计算器和人类数学的知识体系是相通的,所以中间不需要进行额外的转码操作。 电子计算机的发明使得十进制的表达出现了困境,电子元件只有开和关两种基本的状态,表达十进制过于复杂。物理限制决定了以电子管为基础的电子计算机采用二进制来存储和表达数据。 计算机使用二进制有以下优点: 电路中容易实现 当计算机工作期间,电路通电工作,每个输出端就有了电压。电压的高低通过模数转换很方便转换为二进制,例如高电平(一般3.2伏以上)表示1,低电平(一般2.5伏以下)表示0,模拟电路转换成为数字电路就实现了二进制的转换。 物理存储方便实现 二进制在物理上最易实现存储,通过磁极的取向、表面的凹凸、光照的有无等可以实现数据存储。例如光盘,就是将激光束聚集为小光束融化盘片表面上的合金薄膜形成凹坑来记录1的,而没有被激光照耀过的位置可以记录0。 计算机使用二进制表示信息例如数字,但是人类数学知识体系中的数字是用10进制表达的,表达方式的差异就需要进行编码。 计算机世界只有0和1两个数字,但是需要表现的信息如此的复杂,从计算程序使用的数字到表现各种信息的字符,英文字符,中文字符,拉丁字符等,还有各种声音的信息…MVCC查看全文数据库在多个客户端并发更新的时候,数据会产生多个版本。数据库查询或者操作时使用哪个版本是数据库的隔离级别关注的问题域,MVCC是该领域的解决方案之一。MVCC,是多版本控制协议的缩写,MVCC技术的主要目的是通过数据的多版本快照读取逻辑实现数据库特定的隔离级别。数据库的隔离级别一般分为读未提交,读已提交,可重复读,串形化等。MVCC只在读已提交(Read Committed)和可重复读(Repeatable Read)两个隔离级别下工作。读未提交以及串行化两个隔离级别和MVCC是不兼容的 未提交读,总数读取最新的数据行,而不是读取符合当前事务版本的数据行。 串行化(Serializable)则会对读的所有数据多加锁。 除了MVCC之外数据库还可以使用锁来实现隔离性。 锁的问题是锁的颗粒度以及时间问题,从锁的颗粒度来说,锁可以分为独占锁,读些锁,以及乐观锁等, 独uode独占锁锁住一个资源后其他线程无法访问同一个资源。但是部分应用的特点是读多写少,数据读取的时候互相排斥不是必要的。读写锁可以部分解决独占锁的问题,读锁和读锁之间不互斥,而写锁和写锁、读锁都互斥,这样就很大提升了系统的并发能力。但是即使使用读写锁,在资源被修改的期间数据也是不是读取的。 MVCC就提供了读写可以并发的方式,实现方案就是资源在修改期间,保存了之前的数据快照,数据读取时可以指定读取某个快照版本的数据,这样就避免了读锁就和写锁的冲突,不同的事务会话可以查询自己特定版本的数据。 MVCC除了解决读写阻塞的问题之外,还降低了死锁的概率,以及实现了一致读。 MVCC的实现需要三个模块,分别是数据快照,版本链,以及ReadView。 数据快照存储了数据的多个版本… |
热门分类开源Golang消息队列JavaJavascriptLinuxMysqlNLPPHP事务内存管理分布式理论分类存储常用存储开源软件操作系统画图网络编程数据库算法虚拟化前端存储理论常用算法微服务数据结构算法应用计算机原理中间件共识算法分布式分治动态规划容器并发排序架构组件绘图工具网络协议编程语言理论算法思想树缓存架构C++字符串算法工程思想搜索
算法题库精选内容 |