1. 简介
  1. nosql(not only structured query language) 
  1. 泛指非关系型数据库
  1. 设计原因:和关系型数据库可以在功能上进行互补
  2. 具体产生背景:随着使用sql的人增多,多用户同时使用即高并发,对后台服务的要求高,sql基于硬盘的基于内存缓存的nosql就产生了,能够解决sql性能不足的问题。
  1. 在设计上不采取关系型数据库的设计范式(六大范式-越高的范式数据冗余度越小),为某一领域特定场景设计。
  1. 优点:为某一领域特定场景设计,从而让性能、容量、延展性达到一定提升。
  1. 对数据高并发的读写(redis内存存储+数据结构简单-高并发要求读写速度快,防延迟)
  2. 海量数据的读写(hbase存在hdfs+实现实时随机读写)
  3. 对数据高可扩展性的(搭集群+和其他插件配合?)
  1. 缺点:不支持sql标准,不支持事务原则acid
  1. 不能即席查询(sql结构化存储使之能够处理复杂的关系,进行快速查询)
  2. 不适用需要事务支持的场景
  1. 常见的有:memcached\redis\hbase\mongoDB等(由于不采取一致的设计范式,所以nosql之间没有很多共同点,不像是sql中的mysql和oracle能有80%共同点)
  1. redis
  1. 优点及应用场景
  1. 内存存储数据,处理速度快
  2. 可持久化,能够将数据作备份,重新进入会话后恢复数据
  1. 应用:一般是作为缓存数据库去辅助持久化数据库
  2. 原理:用户发送请求到项目中,项目中的server服务在处理请求时会用到数据的读写;数据读写是基于mysql去做的,而mysql需要后台数据服务作读写操作--读写的性能高不高决定了请求处理的快慢,而mysql从磁盘里面做读写,速度慢。所以解决办法是在前面用一个memcached数据库搭建一个缓存,缓存热点(访问频率高的)数据。之后收到请求就先到mem里面找数据,找不到再走后台服务到后面磁盘找数据--这一次的数据要放到缓存中。
  1. 支持丰富的数据类型
  1. 启停
  1. 通过客户端停止服务(服务端停服务直接ctrl+c)
  2. 可能出现服务报错停不掉-原因是在启动服务的路径下创建持久化文件,而此目录不属于你登录的用户从而导致没有权限问题(比如说在root的目录中用atguigu用户无法创建文件)。

nosql的ER图_redis




  1. 技术
  1. -kv存储系统
  2. 单线程+多路IO复用技术-不用考虑并发安全性问题
  1. redis的五大数据类型
  1. string
  2. list
  3. set
  4. zset
  5. hash
  1. 实例
  1. 将user对象存起来--都能存,但要根据需求确定合适不合适、选哪一个方案
  2. 具体方案
  1. 一个对象存成一个string--但redis没有json格式,要调出来转格式再存进去

nosql的ER图_database_02



  1. 一个对象的每个属性存成一个string类型的k,v--但存的太散了,kv太多


nosql的ER图_持久化_03



  1. 一个对象存成kv,v存成hash--尤其适合存对象型的,看似是整体,但能一个一个操作

nosql的ER图_数据库_04



nosql的ER图_nosql的ER图_05

  1. API
  1. 代码思想
  1. windows里写的代码怎么去连接hadoop102里面的redis服务呢?
  1. 所有的客户端去操作服务端时都需要拿到一个连接对象(客户端对象),指定一下要去连哪台机器、哪个端口号,才能找到服务,从而开辟连接,返回一个对象帮助我们操作redis,这个对象叫jedis。
  2. jedis对象的创建
  1. 持久化
  1. RDB(redis database)-打快照的方式存进硬盘(临时快照文件->覆盖硬盘持久化文件)--但最后一次持久化的数据会丢失(比如30s才写入硬盘,但还不到30s时服务掉了)---还要周期性的对持久化文件进行备份,防止持久化文件被破坏)
  2. AOF(append only file)-记录所有操作到硬盘--恢复的时候就是把所有操作从头再来一遍(所以速度比RDB慢,且耗费磁盘空间)---实时记录(若中途开启aof,要在命令行先开启aof把历史数据(将rdb的数据拷贝)加过来)
  3. 同时用时aof优先