一、NoSQL

1.引子

  • 12306春节期间买票进不去,进去了刷不着票现象

  • 淘宝双十一结账,刷新半天没买到

1)特征
  • 海量用户
  • 高并发

这两个问题的出现会造成服务器瘫痪,核心原因不是应用服务器,而是关系数据库。

2)原因
  • 性能瓶颈:磁盘IO性能低下

  • 扩展瓶颈:数据关系复杂,扩展性差,不便于大规模集群

    • 例如一张表,通过它的外键关联了七八张表,这七八张表又通过外键,每张表也关联了四五张表,这样我们要拿到数据,就要从这张表到那张表又到第n张表,查询效率可想而知。
3)解决
  • 降低磁盘IO次数,越低越好
  • 去除数据间关系,越简单越好

两个特征一合并一起,就出来了一个新的概念:NoSQL

2.NoSQL概念

1)1.概念

NoSQL:即 Not-Only SQL( 泛指非关系型的数据库),作为关系型数据库的补充。 作用:应对基于海量用户和海量数据前提下的数据处理问题。

2)特征
  • 可扩容,可伸缩

    • SQL数据关系复杂,扩容难度高,Nosql 不存关系,扩容就简单一些。
  • 大数据量下高性能

    • 数据非常多的时候,不走磁盘IO,走内存,性能就高。
  • 灵活的数据模型、高可用

    • 有自己设置的数据存储格式,保证了高效率
3)常见 Nosql 数据库

Redis、memcache、HBase、MongoDB

4)应用场景-电商为例

第一类,在电商中我们的基础数据一定要存储起来,比如说商品名称,价格,生产厂商,这些都属于基础数据,这些数据放在MySQL数据库。

第二类,我们商品的附加信息,比如说,你买了一个商品评价了一下,这个评价它不属于商品本身。就像你买一个苹果,“这个苹果很好吃”就是评论,但是你能说很好吃是这个商品的属性嘛?不能这么说,那只是一个人对他的评论而已。这一类数据呢,我们放在另外一个地方,我们放到MongoDB。它也可以用来加快我们的访问,他属于NoSQL的一种。

第三,图片内的信息。注意这种信息相对来说比较固定,他有专用的存储区,我们一般用文件系统来存储。至于是不是分布式,要看你的系统的一个整个 瓶颈 了?如果说你发现你需要做分布式,那就做,不需要的话,一台主机就搞定了。

第四,搜索关键字。为了加快搜索,我们会用到一些技术,有些人可能了解过,像分ES、Lucene、solr都属于搜索技术。那说的这么热闹,我们的电商解决方案中还没出现我们的redis啊!注意第五类信息。

第五,热点信息。访问频度比较高的信息,这种东西的第二特征就是它具有波段性。换句话说他不是稳定的,它具有一个时效性的。那么这类信息放哪儿了,放到我们的redis这个解决方案中来进行存储。

22092603

二、Redis

1.概念

Redis (REmote DIctionary Server) 是用 C 语言开发的一个开源的高性能键值对(key-value)数据库。

2.特征

  1. 数据间没有必然的关联关系

  2. 内部采用单线程机制进行工作

  3. 高性能。官方提供测试数据,50个并发执行100000 个请求,读的速度是110000 次/s,写的速度是81000次/s。

  4. 多数据类型支持

    1. 字符串类型 string
    2. 列表类型 list
    3. 散列类型 hash
    4. 集合类型 set
    5. 有序集合类型 zset/sorted_set
  5. 支持持久化,可以进行数据灾难恢复

3.应用

  1. 为热点数据加速查询(主要场景),如热点商品、热点新闻、热点资讯、推广类等高访问量信息等
  2. 即时信息查询,如各位排行榜、各类网站访问统计、公交到站信息、在线人数信息(聊天室、网站)、设备信号等
  3. 时效性信息控制,如验证码控制、投票控制等
  4. 分布式数据共享,如分布式集群架构中的 session 分离
  5. 消息队列

4.安装

  • 下载安装包

wget http://download.redis.io/releases/redis-5.0.0.tar.gz

  • 解压安装包

tar –xvf redis-5.0.0.tar.g

  • 进入解压目录编译

make

  • 进入解压目录安装

make install

redis-server 服务器启动命令

redis-cli 客户端启动命令

redis.conf redis核心配置文件

redis-check-dump RDB文件检查工具(快照持久化文件)

redis-check-aof AOF文件修复工具

  • 启动服务器——参数启动

redis-server [--port port]

redis-server --port 6379

  • 启动服务器——配置文件启动

redis-server config_file_name

redis-server redis.conf

  • 启动客户端

redis-cli [-h host] [-p port]

  • 创建配置文件存储目录

mkdir conf

  • 创建服务器文件存储目录(包含日志、数据、临时配置文件等)

mkdir data

  • 创建快速访问链接

ln -s redis-5.0.0 redis

  • 设置服务器以守护进程的方式运行,开启后服务器控制台中将打印服务器运行信息(同日志内容相同)

daemonize yes|no

  • 绑定主机地址

bind ip

  • 设置服务器端口号

port port

  • 设置服务器文件保存地址

dir path

  • 服务器允许客户端连接最大数量,默认0,表示无限制。当客户端连接到达上限后,Redis会拒绝新的连接

maxclients count

  • 客户端闲置等待最大时长,达到最大值后关闭对应连接。如需关闭该功能,设置为 0

timeout seconds

  • 设置服务器以指定日志记录级别

loglevel debug|verbose|notice|warning

  • 日志记录文件名
    • 注意:日志级别开发期设置为verbose即可,生产环境中配置为notice,简化日志输出量,降低写日志IO的频度

logfile filename

5.基本操作

设置 key,value 数据

set key value

根据 key 查询对应的 value,如果不存在,返回空(nil)

get key

退出客户端

quit

exit

Ctrl+C