NoSQL之redis学习 1.NoSQL概念 https://zh.wikipedia.org/wiki/NoSQL https://www.jianshu.com/p/2d2a951fe0df 传统的关系型数据库RDBMS: A.理论基础:事务可靠 ACID Atomicity – 原子性 Consistency – 一致性 Isolation – 隔离性 Durability – 持久性 NoSQL数据库(not only SQL或者是non-SQL): A.理论基础: 优点:易扩展、大数据量、数据类型灵活、高可用 缺点;不支持存储过程、不支持SQL、没有标准、特性大多不够丰富 B.分布式系统理论: 分布式系统介绍:多台服务器协同工作,处理单台服务器无法完成的任务,尤其是高并发或者大数据量的任务;网络传输是瓶颈,单服务器性能不是太大的问题。一般是横向扩展 而不是纵向扩展 CAP理论:C:Consistency A:Availability P:Partitiontolerance 严格一致性和可用性要互相取舍 分区容错性是分布式系统的基本需求,所以架构师要在C和A之间寻求平衡 C:一致性。all nodes see the same data at the same time。 从客户端来看,一致性主要指的是多并发访问时更新过的数据如何获取的问题 从服务端来看,则是更新如何复制分布到整个系统,以保证数据最终一致。 一致性是因为有并发读写才有的问题,因此在理解一致性的问题时,一定要注意结合考虑并发读写的场景。 从客户端角度,多进程并发访问时,更新过的数据在不同进程如何获取的不同策略,决定了不同的一致性。对于关系型数据库,要求更新过的数据能被后续的访问都能看到,这是强一致性。 如果能容忍后续的部分或者全部访问不到,则是弱一致性。 如果经过一段时间后要求能访问到更新后的数据,则是最终一致性。 A:即服务一直可用,而且是正常响应时间 P:Partition tolerance – 分区容错性the system continues to operate despite arbitrary message loss or failureof part of the system” A P without C 要高可用并允许分区,则需放弃一致性。一旦分区发生,节点之间可能会失去联系。 为了高可用,每个节点只能用本地数据提供服务,而这样会导致全局数据的不一致性。现在众多的NoSQL都属于此类。 BASE理论:Base = Basically Available + Soft state + Eventuallyconsistent BA - Basically Available - 基本可用 S – Soft State - 软状态 E - Eventually Consistent - 最终一致性 分布式存储算法: 一致性算法-paxos Paxos 算法解决的问题是一个分布式系统如何就某个值(决议)达成一致。一个典型的场景是,在一个分布式数据库系统中,如果各节点的初始状态一致, 每个节点执行相同的操作序列,那么他们最后能得到一个一致的状态。为保证每个节点执行相同的命令序列,需要在每一条指令上执行一个“一致性算法” 以保证每个节点看到的指令一致。一个通用的一致性算法可以应用在许多场景中,是分布式计算中的重要问题。 因此从20世纪80年代起对于一致性算法的研究就没有停止过。 节点通信存在两种模型:共享内存(Shared memory)和消息传递(Messages passing)。Paxos 算法就是一种基于消息传递模型的一致性算法。 不仅仅是在分布式系统中,凡是多个过程需要达成某种一致的场合都可以使用Paxos 算法。 一致性算法可以通过共享内存(需要锁)或者消息传递实现,Paxos 算法采用的是后者。 Paxos 算法适用的几种情况:一台机器中多个进程/线程达成数据一致; 分布式文件系统或者分布式数据库中多客户端并发读写数据;分布式存储中多个副本响应读写请求的一致性。 分区(Partitioning) 原来所有的数据都是在一个数据库上的,网络IO及文件IO都集中在一个数据库上的,因此CPU、内存、文件IO、网络IO都可能会成为系统瓶颈。 而分区的方案就是把某一个表或某几个相关的表的数据放在一个独立的数据库上, 这样就可以把CPU、内存、文件IO、网络IO分解到多个机器中,从而提升系统处理能力。 分区有两种模式,一种是主从模式,用于做读写分离;另外一种模式是分片模式,也就是说把一个表中的数据分解到多个表中。 一个分区只能是其中的一种模式 一致性哈希: 一致性哈希算法是分布式系统中常用的算法。比如,一个分布式的存储系统,要将数据存储到具体的节点上,如果采用普通的hash方法,将数据映射到具体的节点上,如key%N,key是数据的key,N是机器节点数, 如果有一个机器加入或退出这个集群,则所有的数据映射都无效了,如果是持久化存储则要做数据迁移,如果是分布式缓存,则其他缓存就失效了。 一致性哈希基本解决了在P2P环境中最为关键的问题——如何在动态的网络拓扑中分布存储和路由。每个节点仅需维护少量相邻节点的信息,并且在节点加入/退出系统时,仅有相关的少量节点参与到拓扑的维护中。 所有这一切使得一致性哈希成为第一个实用的DHT算法。 C.RDBMS理论: ACID:C是一致性,指的是数据库执行事务前后,数据库的完整性没有被破坏。 D.NoSQL数据库的分类: 键值存储数据库 k-v redis memcached mongdb 列存储数据库 分布式文件系统 文档类型数据库 图形数据库 E:redis 场景:实时数据搜集、实时通讯、分布式缓存 为什么要用NoSQL? https://www.infoq.cn/article/2011%2F01%2Fnosql-why 2.redis教程 简介:Redis是数据库,啥样的数据库呢?C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value;支持多种语言的API 特点:Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用;Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储;Redis支持数据的备份,即master-slave模式的数据备份。 优势:性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s ;丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作;原子 – Redis的所有操作都是原子性的;丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。 安装:略 配置:redis.conf或者CONFIG 命令 数据类型:string(字符串)可以包含任何数据 ,hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。 HyperLogLog:是用来做基数统计的算法 Redis 发布订阅:是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息 事务:Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证:批量操作在发送 EXEC 命令前被放入队列缓存。收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。 单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。 事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做 Redis 连接:Redis 连接命令主要是用于连接 redis 服务。 Redis 服务器:Redis 服务器命令主要是用于管理 redis 服务。如何获取 redis 服务器的统计信息?redis 127.0.0.1:6379> INFO 3.redis高级教程