为什么80%的码农都做不了架构师?>>>   

NoSQL介绍

什么是NoSQL?

非关系型数据库就是NoSQL,关系型数据库代表MySQL

首先NoSQL是一个数据库,它是用来存储数据的,类似于关系型数据库.
典型的数据库有Oracle、Mysql 、SQL Server都属于关系型数据库,关系型数据库它们都有一个共同的特点,就是可以使用SQL语句,比如创建库(create database )、创建表(create table)、查询(select ).
但对于非关系型数据库来说就没有这些SQL语句.

对于关系型数据库来说,是需要把数据库存储到库、表、行、字段里,查询的时候根据条件一行一行地区匹配,当量非常大的时候就很耗费时间和资源,尤其是数据是需要从磁盘里去检索.

NoSQL数据库存储原理非常简单(典型的数据类型为key-value),不存在繁杂的关系链,比如Mysql查询的时候,需要找到对应的库、表(通常多个表)以及字段,不需要一行一行去匹配,也不存在多个表相互去关联.

例如Mysql数据库,查询一个数据,会涉及到很多个表,比如典型的商品售卖,京东or淘宝,电子商务的网站,要用户下一个订单或者我们查一个订单,可能会需要很多个表,比如用户表、商品表,用户是谁,什么时候注册的,用户的属性是什么(男or女),年龄多少等; 商品表什么时候上架的,属于哪一大品类,价格等; 当产生一个订单时候,是一个哪用户在什么时间购买了哪一个商品,它需要结合用户表和商品表来去查询,这也就是关系型的数据库.

NoSQL数据可以存储在内存里,查询速度非常快
NoSQL在性能表现上虽然能优越于关系型数据库,但是它并不能完全替代关系型数据库

毕竟设计的NoSQL就是这么简单,当有比较复杂的需要,NoSQL是不满足的,那么拿NoSQL来做什么呢?
用于一些能够满足的一些应用,例如我们有一个discuz论坛,当用户访问非常大的时候,这Mysql数据库顶不住了,这时我们可以给它加一层缓存,那么就可以使用NoSQL来做缓存,缓存就是在内存里,比如查询一个帖子,把帖子查询过来,查完了之后放到内存里去(就是放到NoSQL去),帖子有一个帖子ID,帖子ID对应帖子的内容,也可以理解为帖子ID为K,帖子内容为V, 把论坛的帖子内容一条一条的缓存到NoSQL里,当用户访问的时候我们就不需要查询数据库里面的内容,直接查缓存,这样的话就很快,减轻Mysql数据库的查询压力.

NoSQL因为没有复杂的数据库结构,扩展非常容易,支持分布式

因为NoSQL没有复杂的数据库结构,所以说它扩展非常容易,比如说关系型数据库Mysql,有用户表或商品表等,需要多个表组合在一起去查询订单信息,当数据量越来越多,本来数据存在服务器A,但现在服务器A现在已经达到一定的瓶颈,想要加一台服务器过来,如何在B服务器上查A服务器上的数据呢,两个数据库结合在一起这就很麻烦了,在目前的技术手段是不能实现的,没有办法A和B服务器两个数据库结合在一起.但是NoSQL就可以实现,因为它不存A表和B表之间的关联,加一台服务器过来就可以继续存储数据,所以说它支持分布式,即使访问量很大, 我们也可以以增加服务器的方式横向扩展,而Mysql就不可以,Mysql只能做主从或者一主多从,来达到数据同步.

常见的NoSQL数据库

K-V形式的:

memcached、radis适合存储用户信息,比如会话、配置文件、参数、购物车等.这些信息一般都和ID(键)挂钩,这种情景下键值数据库是个很好的选择.

文档数据库:

mongodb将数据以为文档形式存储,每个文档都是一系列数据项的集合. 每个数据项都有一个名称与对应的值,值既可以是简单的数据类型,如字符串、数字和日期等;也可以是复杂的类型,如有序列表和关联对象. 数据存储的最小单位是文档,同一个表中存储的文档属性可以是不同的,数据可以使用XML、JSON或JSONB等多种形式存储.

列存储 Hbase

图 Neo4J、Infinite、Graph、 OrientDB

memcached介绍

memcached是介绍其中一种k-v形式的NoSQL,在LAMP和LNMP架构中mecached的角色是缓存,它可以存储论坛的帖子或一些数字,比如帖子的更新量,在线人数等信息是很容易存储在mecached里面的.

Memcached是国外社区网站LiveJournal团队开发的,目的是为了通过缓存数据库查询结果,以达到减少数据库查询次数,从而提高动态web站点的性能.

官方站点http://www.memcached.org/

数据结构简单(k-v形式),数据存放在内存里
(memcached数据不支持持久化,也就意味着当重启memcached或重启服务的时候,存储在内存的数据就会丢失,如果数据比较重要的话,需要特别注意一下,当需要重启服务的时候先数据导入磁盘,重启之后再把数据导出到memcached)

多线程

基于c/s架构,协议简单

基于libevent的事件处理

自主内存存储处理(slab allocation)

数据过期方式:Lazy Expiration 和LRU

Memcached的数据流向

例如有一个数据库MySQL, 有一个web服务器(Nginx+php-fpm), 正常的话php和Mysql打交道,Nginx调用php进行数据的交互,比如我们查询一个帖子内容,那肯定是用户发起请求给nginx,Nginx把这个php的请求交给php的脚本,php交给php-fpm服务,php-fpm解析完这个脚本之后,发现是查询某一个帖子内容,就去mysql数据库查找数据库,查询到数据最终由nginx返回给用户,这一个正常数据流向.

但这样去Mysql数据库查询数据速度有点,因为并发量很大,这时候可以给加缓存层,可以把查询到的结果缓存到内存里,当用户再次查询的时候,直接在内存里拿到结果返回给用户,不需要去Mysql数据库里面去查询,从而降低了查询Mysql的次数.

自主内存存储处理(slab allocation)

slab Allocation的原理:将分配的内存分割成各种尺寸的块(chunk),并把尺寸相同的块分成组(chunk的集合),每个chunk集合被称为slab.

Memcached的内存分配以Page为单位,Page默认值为1M,可以在启动时通过-I参数来指定.

slab是由多个Page组成的,Page按照指定大小切割成多个chunk.

Growth factor是决定chunk的大小,Memcached在启动时通过-f选项可以指定Growth factor因子.该值控制chunk大小的差异,默认值是1.25.

通过mecached-tool命令查看指定Memcached实例的不同slab状态,可以看到各个ltem所占大小,(chunk大小)差距为1.25

chunks属于最小的单元,其次就是Page,Page包含了多个chunks, 而slab包含了多个Page.

Memcached的数据过期方式

Lazy Expiration:
memcached内部不会监控记录是否过期,而是在get时查看记录的时间戳,检查记录是否过期.这种技术被称为Lazy Expiration. 因此memcached不会在过期监视上耗费CPU时间.

LRU:
Memcached会优先使用已超时的记录的空间,但即使如此,也会发生追加新的记录时空间不足的情况,此时就要使用为Least Recently Used (LRU)机制来分配空间。顾名思义,这是删除“最近最少使用“ 的记录的机制.因此,当内存空间不足时(无法从slab class 获取到新的空间时),就从最近未被使用的记录中搜索,并将其空间分配给新的记录。从缓存的实用角度俩看,该模型十分理想.

安装memcached

直接yum安装即可

yum install -y memcached

启动memcached

 systemctl start memcached

查看进程

 ps aux |grep memcached
memcach+   2180  0.0  0.1 325556  1184 ?        Ssl  15:43   0:00 /usr/bin/memcached -u memcached -p 11211 -m 64 -c 1024
root       2187  0.0  0.0 112664   968 pts/0    S+   15:43   0:00 grep --color=auto memcached

监听的端口11211

 netstat -nlpt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:11211           0.0.0.0:*               LISTEN      2180/memcached
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1379/sshd
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      2107/sendmail: acce
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      1997/php-fpm: maste
tcp6       0      0 :::11211                :::*                    LISTEN      2180/memcached
tcp6       0      0 :::22                   :::*                    LISTEN      1379/sshd       

memcached没有配置文件,在/etc/sysconfig/memcached可以自定义端口,最大的连接数、内存

 vim /etc/sysconfig/memcachedPORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS=""OPTIONS  //可以指定主机CACHESIZE //内存MAXCONN //最大连接数USER //用户PORT //端口

查看memcached状态

说明: memcached-tool 命令是查看memcached状态的.
         平时需要关注 get_hits( 查询成功未获取到数据的总次数)和 curr_items(Memcached 当前存储             的内容数量) 的数字.
          get_hits的数字除以 curr_items 的数字 是为计算命中率,当我们把缓存做好了, 若没有访问到
          那么这个缓存就没有起到任何的作用.

 memcached-tool 127.0.0.1:11211 stats
#127.0.0.1:11211   Field       Valueaccepting_conns           1auth_cmds           0auth_errors           0bytes           0bytes_read          33bytes_written          54cas_badval           0cas_hits           0cas_misses           0cmd_flush           0cmd_get           0cmd_set           0cmd_touch           0conn_yields           0connection_structures          11curr_connections          10curr_items           0decr_hits           0decr_misses           0delete_hits           0delete_misses           0evicted_unfetched           0evictions           0expired_unfetched           0get_hits           0get_misses           0hash_bytes      524288hash_is_expanding           0hash_power_level          16incr_hits           0incr_misses           0libevent 2.0.21-stablelimit_maxbytes    67108864listen_disabled_num           0pid        2180pointer_size          64reclaimed           0reserved_fds          20rusage_system    0.146913rusage_user    0.058765threads           4time  1507625378total_connections          12total_items           0touch_hits           0touch_misses           0uptime        3992version      1.4.15time                    Memcached 当前的UNIX时间  uptime                  Memcached 运行时间,单位:秒 version                 Memcached 的版本号    rusage_user             该进程累计的用户时间,单位:秒    rusage_system           该进程累计的系统时间,单位:秒    curr_items              Memcached 当前存储的内容数量    total_items             Memcached 启动以来存储过的内容总数    bytes                   Memcached 当前存储内容所占用的字节数(*/1024/1024=mb)    curr_connections        当前连接数量    total_connections       Memcached 运行以来接受的连接总数    connection_structures   Memcached 分配的连接结构的数量    cmd_get                 查询请求总数    cmd_set                 存储(添加/更新)请求总数    get_hits                查询成功获取数据的总次数    get_misses              查询成功未获取到数据的总次数    bytes_read              Memcached 从网络读取到的总字节数    bytes_written           Memcached 向网络发送的总字节数    limit_maxbytes          Memcached 在存储时被允许使用的字节总数  

nc命令

[root@root-01 ~]# nc
\-bash: nc: 未找到命令

yum 安装nc命令

[root@root-01 ~]# yum install -y nc

nc命令查看memcached状态

说明:nc命令查看到的结果和memcached查看到的结果基本上是一致的.

[root@root-01 ~]# echo stats |nc 127.0.0.1 11211
STAT pid 2180
STAT uptime 5414
STAT time 1507626800
STAT version 1.4.15
STAT libevent 2.0.21-stable
STAT pointer_size 64
STAT rusage_user 0.092976
STAT rusage_system 0.185952
STAT curr_connections 10
STAT total_connections 13
STAT connection_structures 11
STAT reserved_fds 20
STAT cmd_get 0
STAT cmd_set 0
STAT cmd_flush 0
STAT cmd_touch 0
STAT get_hits 0
STAT get_misses 0
STAT delete_misses 0
STAT delete_hits 0
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT touch_hits 0
STAT touch_misses 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 39
STAT bytes_written 1081
STAT limit_maxbytes 67108864
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT hash_power_level 16
STAT hash_bytes 524288
STAT hash_is_expanding 0
STAT bytes 0
STAT curr_items 0
STAT total_items 0
STAT expired_unfetched 0
STAT evicted_unfetched 0
STAT evictions 0
STAT reclaimed 0
END

libmemcached 包

yum安装libmemcached命令

yum install -y libmemcached

安装了libmemcached的包之后,就可以使用memstat命令可以查看memcached的服务状态

[root@root-01 ~]# memstat --servers=127.0.0.1:11211
Server: 127.0.0.1 (11211)pid: 2180uptime: 6052time: 1507627438version: 1.4.15libevent: 2.0.21-stablepointer_size: 64rusage_user: 0.120223rusage_system: 0.194207curr_connections: 10total_connections: 14connection_structures: 11reserved_fds: 20cmd_get: 0cmd_set: 0cmd_flush: 0cmd_touch: 0get_hits: 0get_misses: 0delete_misses: 0delete_hits: 0incr_misses: 0incr_hits: 0decr_misses: 0decr_hits: 0cas_misses: 0cas_hits: 0cas_badval: 0touch_hits: 0touch_misses: 0auth_cmds: 0auth_errors: 0bytes_read: 56bytes_written: 2126limit_maxbytes: 67108864accepting_conns: 1listen_disabled_num: 0threads: 4conn_yields: 0hash_power_level: 16hash_bytes: 524288hash_is_expanding: 0bytes: 0curr_items: 0total_items: 0expired_unfetched: 0evicted_unfetched: 0evictions: 0reclaimed: 0

转载于:https://my.oschina.net/AnnaWu/blog/1548701

NoSQL介绍、memcached介绍、安装memcached、 查看memcached状态相关推荐

  1. windows 安装 php memcached,Windows安装配置php+memcached的方法

    Windows下Memcached的安装配置方法 1.将第一个包解压放某个盘下面,比如在c:\memcached. 2.在终端(也即cmd命令界面)下输入 'c:\memcached\memcache ...

  2. linux memcached 运行,linux下查看Memcached运行状态

    查看Memcached运行状态的命令是:echo stats | nc 127.0.0.1 11211 查看memcached状态的基本命令,通过这个命令可以看到如下信息: STAT pid 2245 ...

  3. memcached介绍,安装与基本使用

    Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态.数据库驱动网站的速度.Memcached ...

  4. nosql介绍、memrcached介绍、安装memcached、查看memcachedq状态

    1.nosql介绍 非关系型数据库就是NoSQL,关系型数据库代表MySQL 对于关系型数据库来说,是需要把数据存储到库.表.行.字段里,查询的时候根据条件一行一行地去匹配,当量非常大的时候就很耗费时 ...

  5. 21.1-21.4 memcached介绍,安装使用,状态查看

    NoSQL 21.1 什么是NoSQL 非关系型数据库就是NoSQL,关系型数据库代表MySQL 对于关系型数据库来说,是需要把数据存储到库.表.行.字段里,查询的时候根据条件一行一行地去匹配,当量非 ...

  6. memcached 介绍及启动

    1.memcached 介绍 1.1 memcached 是什么? memcached 是以LiveJournal旗下Danga Interactive 公司的Brad Fitzpatric 为首开发 ...

  7. Memcached介绍及相关知识

    memcached简介 1.memcached是一个免费开源的.高性能的,具有分布式内存对象的缓存系统.memcached通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括 ...

  8. 软件官网与memcached介绍

    常见官网 http://www.keepalived.org http://nginx.org/ documentation 模块说明 http://www.apache.org/ https://o ...

  9. memcached 介绍

    博客园相关文章功能中使用了memcached,在网上搜集了一些memcached方面的文章: memcached完全剖析 分布式缓存系统Memcached简介与实践 Memcached深度分析 自己实 ...

最新文章

  1. 李彦宏的百度 AI 落地战略,由王海峰来实现
  2. 数据库的网站基础运用
  3. 【Android】JNICALL could not be resolved
  4. 七牛云的存储对象的地区改变之后
  5. 【Spring MVC学习】详解spring mvc 3.0常用注解
  6. [NewLife.XCode]百亿级性能
  7. 一些sql 语句(行列转换等)
  8. python导出项目所依赖的所有的库文件以及安装
  9. vmware配置centos全套
  10. 程序员父亲的遗产——编程十诫 转载
  11. 排序算法Java实现(快速排序)
  12. bp神经网络matlab代码_基于Matlab的BP神经网络识别26个英文字母
  13. 【数据结构笔记40】哈希表冲突处理方法:开放地址法(线性探测、平方探测、双散列、再散列),分离链接法
  14. java中4种修饰符访问权限的区别
  15. php 之将图片转换base64编码(为百度ocr作准备,解决 image format error)
  16. 【案例24】NC6.3-6.3X前台无法录spr日志
  17. 【Beta】 第六次Daily Scrum Meeting
  18. PLC通讯实现-C#实现三菱PLC通讯(三)
  19. 照片生成3D虚拟数字人,虚拟形象主播搭建(软件+教程)
  20. LINUX:Ubuntu重装虚拟机后无法拖拽文件的解决方法

热门文章

  1. web.config中配置Session
  2. iOS开发OC基础:Xcode中常见英文总结,OC常见英文错误
  3. 行业B2B网站策划6个基本要求
  4. as3绘制抛物线(二)
  5. 让Everest 0.6支持Intel 82852/82855 GM/GME显卡图形登录
  6. 解决kubernetes中ingress-nginx配置问题
  7. D3.js 教程: 使用 JavaScript 创建可交互的柱状图
  8. 系统定制封装 step1
  9. Mobile OpenCart 自适应主题模板 ABC-0074
  10. [Android] Gradle 安装