NoSql简介
说起redis就要说起他的来源,一个技术的出现必然有他的道理。
-
大数据时代的3V:
1.海量 Volume
2.多样 Variety
3.实时 Velocity -
互联网需求的3高
1.高并发
2.高可用(高可扩)
3.高性能 -
NoSQL数据库的四大分类:
1.K/V键值:redis等,
2.文档型数据库(Bson格式比较多):CouchDB,MongoDB
3.列存储数据库:Cassandra,HBase
4.图关系数据库:他不是放图形的,放的是关系比如:朋友圈社交网络,广告推荐系统,社交网络,推荐系统等。专注于构建关系图谱:Neo4J,InfoGrid -
CAP+BASE:
1.传统的ACID分别是什么:
1):A (Atomicity) 原子性
2):C (Consistency) 一致性
3):I (Isolation) 独立性
4): D (Durability) 持久性
2.CAP:
C:Consistency(强一致性)
A:Availability(可用性)
P:Partition tolerance(分区容错性)
3.BASE:
基本可用(Basically Available)
软状态(Soft state)
最终一致(Eventually consistent)理解:
-
C:Consistency : 一致性,
“all nodes see the same data at the same time”,即更新操作成功并返回客户端后,所有节点在同一时间的数据完全一致,这就是分布式的一致性。一致性的问题在并发系统中不可避免,对于客户端来说,一致性指的是并发访问时更新过的数据如何获取的问题。从服务端来看,则是更新如何复制分布到整个系统,以保证数据最终一致。 -
A:Availability : 可用,
可用性指“Reads and writes always succeed”,即服务一直可用,而且是正常响应时间。好的可用性主要是指系统能够很好的为用户服务,不出现用户操作失败或者访问超时等用户体验不好的情况。 -
P:Partition Tolerance : 分区容错性,
即分布式系统在网络正常的情况下可以看成是一个整体,当遇到某节点或网络发生故障的时候,其中一个节点无法访问,就出现了分区。所以为了提高分区容错性,就会数据项复制到多个节点上,那么出现分区之后,这一数据项就可能分布到各个区里。容忍性就提高了。 -
综上所述在分布式系统中,说是分布式肯定少不了的就是各个子节点的部署,少不了的网络传输,那就肯定会出现网络状况拥堵,甚至网络断开的情况。所以P就一定要满足,为什么说C和A不能全部满足呢 简单的例子:
当发生写操作在一个节点N1中,这个时候网络断开,N1节点的最新数据无法同步到其他的节点中,这个时候另一个请求过来读取N2节点的数据,如果说要满足C,则这个请求就会阻塞,直到网络恢复 数据同步完成之后才会回复客户端,这样就不满足A。如果满足A那么这个请求立刻返回客户端数据就会是N2节点老的数据,就不满足C。
所以在大型的分布式系统中大部分的架构都是满足AP 的。
-
redis是什么:
-
是完全开源免费的,用c语言编写的,最受BSD协议,是一个高性能的(k/v)分布式内存数据库,基于内存运行并支持持久化的NoSQL数据库,是当前热门的NoSQL数据库之一,
redis有一下3个特点1.支持数据持久化,可以将内存中的数据保存到磁盘中,重启的时候可以再次加载进行使用
2.不仅仅支持简单的k-v类型的数据,同时还提供list,set,zset,hash等数据结构的存储
3.支持数据备份,master-slave模式的数据备份
能干嘛:
- 内存存储和持久化,redis支持异步将内存中的数据写到磁盘上,同时不影响继续服务
- 取最新N个数据的操作,如:可以将最新的10条评论的ID放在redis的list集合里边
- 模拟类似于HttpSession这种需要设定过期时间的功能
- 发布、订阅消息系统
- 定时器,计数器
redis安装 helloword
- 1.将 redis-4.0.11.tar.gz 安装包放到 linux 中的opt文件夹下,然后执行
tar -xvfz redis-4.0.11.tar.gz 命令 解压。 - 2.解压之后进入到解压后的文件夹,执行make命令 这个时候如果正常就会安装成功,如果报gcc找不到则:
执行:
yum -y install gcc gcc-c++ //命令在线安装
- 3.gcc安装成功之后 再次make 如果提示:
则执行 :
make distclean
- 4.成功之后再次 make 成功!
- 5.启动redis: 默认的安装路径是 usr/local/bin 下
- 6.查看当前redis进程:
ps aux|grep redis
- 7.进入redis设置键值对:
redis-cli -p 6379 //进入redis
//设置键值对
set key value
get key
- 8.退出:
SHUTDOWN
redis杂项基础知识
- 1.但进程模型来处理客户端请求,对读写事件的响应是通过对epoll函数的包装来做到的,redis的实际处理速度完全依靠主进程的执行效率。
- 2.默认16个数据库,类似数组下角标一样的从零开始,初始默认使用0号库,用 select 数 指令切换数据库
- 3.DBsize查看当前数据库的key的数量(会有一些系统自带的key)
- 4.flushall是删除全部的库的key,flushdb是删除当前的库的key
- 5.redis的16个库都是统一的密码,一个登不上全部登不上
- 6.默认端口号是6379
关于redis的基础使用可以查看我的另外一篇:
redis使用