75.nosql memcached与安装及查看状态

21.1 nosql介绍

21.2 memrcached介绍

21.3 安装memcached

21.4 查看memcachedq状态

 

 

 

 

21.1 nosql介绍

 

什么是NoSQL:

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

也是一种数据库,来存储数据的。典型的关系型数据库就是mysql等等,关系型数据库都有一个特点就是可以使用sql语句。 对于非关系型数据库没有这样的用法

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

关系型数据库最小的单元是字段。比如我们创建了一个表,这个表包括了用户的名字、ID、年龄、职业等等,每个字段了都有他对应的数据,我们查询的时候纪要根据条件一行一行的去匹配,就会很慢。因为我们是吧数据存放在磁盘里,他需要整个的遍历,一点一点的去查。所以这种关系型数据库,当量非常大的时候,是比较耗费资源的

3.NoSQL数据库存储原理非常简单(典型的数据类型为k-v),不存在繁杂的关系链,比如mysql查询的时候,需要找到对应的库、表(通常是多个表)以及字段。

k-v表示一个键一个值。 比如存数据,就只存用户,对应的他的名字,再存一个值比如年龄,是20岁。就类似这么简单的数据。那么查询的时候也很容易,直接查用户就能直接出来,不需要一行一行的去匹配。

他不需要多个表的关联,比如商品的售卖(京东、淘宝),他要查一个订单,就要多个表结合起来一起查。因为不同的表存的东西不一样,比如一个表放顾客信息,一个表放商品信息等等。所以叫关系型数据库,他们有相互的关联。而非关系型的设计理念就是不需要这些错综复杂的理念在里头,就非常简单的一个k一个v

4.NoSQL数据可以存储在内存里,查询速度非常快

他的优势。内存比磁盘的读取要快很多

5.NoSQL在性能表现上虽然能优于关系型数据库,但是它并不能完全替代关系型数据库

当我们有复杂的需求的时候,是不能满足的

比如我们访问discuz的时候,当访问量很大的时候,数据库顶不住了。那我们可以加一层缓存,那这层缓存就可以使用nosql。那缓存必然是在内存里。我们比如要查一个帖子,查完之后现放到内存里(nosql),那帖子有一个帖子ID,对应着帖子的内容。那就可以理解帖子ID叫做K,帖子内容是V。而我们一条一条的把论坛的帖子内容,缓存在nosql里,当用户访问的时候,我们不去查数据库里的,直接查缓存。从而减轻数据库的查询压力。这是最典型的用法

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

相对于mysql来说,我们要把多个表联合起来,查一个信息。那当A机器数据量满了,我们加一台B服务器,我们在查询的时候就会比较麻烦。目前的技术手段是不能实现的,不能把他们结合在一起。但nosql就可以,因为他没有关系,不存在A表B表之间的关联,我们就可以横向扩展。我加一台服务器过来,那就继续存呗,所以他支持分布式。那也就是说当他访问量很大的时候,我们可以以增加服务器的形式老实现横向扩展

那mysql怎么处理这种瓶颈问题呢?只能做主从,一主多从,针对这些从做负载均衡。那还有一种方案就是分库分表,放在不同的服务器上,当然了,关联的要放在一起,不关联的才能分开。这是他的局限性

 

常见NoSQL数据库:

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

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

特殊的用法,比如可以存储二进制的东西

3.列存储 Hbase

4.图 Neo4J、Infinite Graph、OrientDB #作为了解

 

 

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

 

 

21.2 memcached介绍

 

 

 

Memcached在LNMP、LAMP架构里承担的角色是缓存。他可以存储比如说,论坛的贴子,也可以存储数字,用户访问量、在线人数等等,这样见得数字很容易缓存在memcached里面的

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

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

3.数据结构简单(k-v),数据存放在内存里

memchcaed的数据不支持落地,不支持持久化。也就意味着一旦重启服务器,或者已重启memcached服务,原来存储的数据就会丢失。所以存储的数据很重要的话,还是要注意一下。为保证数据的安全,可以不定期的把数据做一个落地,把它存到硬盘里去。比如我们每次重启服务,先把数据存到磁盘里,启动之后再把磁盘的数据导入到mencached里面去

4.多线程

memcached是个多线程的服务。当你的cpu很多的时候,用memcached是很快的

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

使用memcached就要启动一个服务,客户端去连接这个服务端,去通信

6.基于libevent的事件处理

之前的nginx也是基于libevent

7.自主内存存储处理(slab allowcation) #下面详解

8.数据过期方式:Lazy Expiration 和 LRU

 

Memcached的数据流向:

 

正常情况下,用户发起请求给nginx(比如LNMP架构),nginx给php-fpm,php-fpm解析完之后,如果发现查询的是一个帖子,就去mysql里查,最终由nginx反馈给用户,这是一个正常的数据流向。

而这里memcached,是先到mysql里查数据,查到之后,通过php-fpm把结果存储到memcached里面去,再次查询就不需要去mysql里查了,直接从memcached缓存层里返回给用户就可以了

 

Slab allocation:

1.Slab Allocation的原理

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

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

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

chunk的大小由下面的Growth factor (增长因子),来决定

Growth factor (增长因子): #作为了解

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

比如第一个chunk,最小的chunk是多少,然后第二大的,第三大的。这样依次是多大,就由Growth factor (增长因子),来决定

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

3.命令:# memcached-tool 127.0.0.1:11211 display

 

 

 

以上文字与图,chunk属于最小的一个单元,其次是page。那page里面包含了多个chunk。而slabs又包含了多个page

 

Memcached的数据过期方式:

 

1.Lazy Expiration 

第一种就是懒惰的方式。意思为我们在创建一个k-v的时候,就需要给k指定一个过期的时间,比如我们指定他一个小时过期,过期后不存在内存里了。这种就是我们用户来决定的

Memcached 内部不会监视记录是否过期,而是在get时查看记录的时间戳,检查记录是否过期。这种技术被称为lazy(惰性)expiration。因此,Memcached不会在过期监视上耗费CPU时间。

2.LRU

第二种就是会标记不被访问的数据,当内存空间不足时,就会被覆盖、腾空间给新的数据

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

其实包括linux操作系统,内存的使用管理,也是有这个LRU的

 

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

 

 

21.3 安装memcached

 

 

1.yum install -y memcached libmemcached libevent

在这里我们yum安装。也可以去官方下载源码包编译安装

直接yummemcached,会连带安装后面两个

2.systemctl start memcached #启动

3.vim /etc/sysconfig/memcached 可以配置参数

比如加上监听的ip,可以把OPTIONS="" 改为OPTIONS="127.0.0.1"

其中-m指定memcached分配内存

-c指定最大并发数

-u指定运行memcached服务的用户

 

 

实例:

[root@axinlinux-01 ~]# yum list |grep memcached

Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast

memcached.x86_64 1.4.15-10.el7_3.1 base #可以先看一下这个包为1.4版本

[root@axinlinux-01 ~]# yum install -y memcached #直接yum安装

[root@axinlinux-01 ~]# rpm -qa |grep libevent #之前讲过memcached是基于libevent的,域名安装的时候会连带安装libevent

libverto-libevent-0.2.5-4.el7.x86_64

libevent-2.0.21-4.el7.x86_64

[root@axinlinux-01 ~]# systemctl start memcached #启动

[root@axinlinux-01 ~]# ps aux |grep memcached

memcach+ 1776 0.0 0.0 344080 1664 ? Ssl 23:28 0:00 /usr/bin/memcached -u memcached -p 11211 -m 64 -c 1024

#以上这里-u指定了那个用户在执行,-p指定了他的监听端口11211,-m给他分配了内存有多大(64m),-c最大并发数。当然这些都可以去更改(以下)

root 1785 0.0 0.0 112720 980 pts/0 S+ 23:29 0:00 grep --color=auto memcached

[root@axinlinux-01 ~]# vim /etc/sysconfig/memcached #他没有配置文件,在这个文件里更改

PORT="11211" #监听的端口

USER="memcached" #用户

MAXCONN="1024" #最大连接数

CACHESIZE="64" #内存(为m)。平时我们改一下-m也就差不多了,不需要改太多的地方

OPTIONS="" #其他,比如可以增加-l(监听的主机)。可以memcached -h看一下其他的选项

[root@axinlinux-01 ~]# memcached -h #以上其他的选项

 

 

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

 

21.4 查看memcachedq状态

 

 

我们平时是需要查看他的运行状态的,比如连接了多少、命中率有多少(比如我们缓存了帖子,那这个帖子有没有通过memcached去访问呢)

1.memcached-tool 127.0.0.1:11211  stats

命中率=get_hits/cmd_get(这个是我们平时要去关注的)

2.或者echo stats |nc 127.0.0.1 11211  需要安装nc工具  yum install -y nc

3.若安装libmemcached后,可以使用命令

memstat --servers=127.0.0.1:11211 查看memcached服务状态

 

 

实例:

1.

[root@axinlinux-01 ~]# memcached-tool 192.168.208.128:11211 stats

#192.168.208.128:11211 Field Value

accepting_conns 1

auth_cmds 0

auth_errors 0

bytes 0

bytes_read 7

bytes_written 0

cas_badval 0

cas_hits 0

cas_misses 0

cmd_flush 0

cmd_get 0 #总的get次数(需关注)

cmd_set 0

cmd_touch 0

conn_yields 0

connection_structures 11

curr_connections 10

curr_items 0

decr_hits 0

decr_misses 0

delete_hits 0

delete_misses 0

evicted_unfetched 0

evictions 0

expired_unfetched 0

get_hits 0 #get的总命中次数(需关注)

get_misses 0

hash_bytes 524288

hash_is_expanding 0

hash_power_level 16

incr_hits 0

incr_misses 0

libevent 2.0.21-stable

limit_maxbytes 67108864

listen_disabled_num 0

pid 1776

pointer_size 64

reclaimed 0

reserved_fds 20

rusage_system 0.035322

rusage_user 0.052984

threads 4

time 1541605626

total_connections 11

total_items 0

touch_hits 0

touch_misses 0

uptime 1114

version 1.4.15

2.

[root@axinlinux-01 ~]# echo stats |nc 192.168.208.128 11211

STAT pid 1776

STAT uptime 1805

STAT time 1541606317

STAT version 1.4.15

STAT libevent 2.0.21-stable

STAT pointer_size 64

STAT rusage_user 0.084054

STAT rusage_system 0.044499

STAT curr_connections 10

STAT total_connections 12

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 13

STAT bytes_written 1025

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

[root@axinlinux-01 ~]# rpm -qf `which nc` #rpm -qf `xxx`查看命令是哪个包安装来的

nmap-ncat-6.40-13.el7.x86_64

3.

[root@axinlinux-01 ~]# rpm -qa memstat #查看memstat这个命令有没有安装

[root@axinlinux-01 ~]# yum install -y libmemcached #yum安装一下

[root@axinlinux-01 ~]# memstat --servers 127.0.0.1:11211

Server: 127.0.0.1 (11211)

pid: 1776

uptime: 2222

time: 1541606734

version: 1.4.15

libevent: 2.0.21-stable

pointer_size: 64

rusage_user: 0.097368

rusage_system: 0.058421

curr_connections: 10

total_connections: 14

connection_structures: 11

reserved_fds: 20

cmd_get: 0

cmd_set: 0

cmd_flush: 0

cmd_touch: 0

get_hits: 0

get_misses: 0

delete_misses: 0

delete_hits: 0

incr_misses: 0

incr_hits: 0

decr_misses: 0

decr_hits: 0

cas_misses: 0

cas_hits: 0

cas_badval: 0

touch_hits: 0

touch_misses: 0

auth_cmds: 0

auth_errors: 0

bytes_read: 37

bytes_written: 3099

limit_maxbytes: 67108864

accepting_conns: 1

listen_disabled_num: 0

threads: 4

conn_yields: 0

hash_power_level: 16

hash_bytes: 524288

hash_is_expanding: 0

bytes: 0

curr_items: 0

total_items: 0

expired_unfetched: 0

evicted_unfetched: 0

evictions: 0

reclaimed: 0

 

 

 

 

 

转载于:https://my.oschina.net/u/3866149/blog/2873252

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值