77:NoSQL之Memcached介绍及安装

1、nosql非关系型数据库;关系型的数据库代表是mysql;

关系型的数据库代表是mysql,可以使用sql语句(create insert update  select)等,是需要把数据库存放到库-表-行-字段里,查询的是也一行一行去匹配,当查询量非常大的时候很耗费资源;

nosql的存储原理非常简单(数据类型为k-v),一个键对应一个值,不存在繁琐的关系链,比如mysql查询的时候,需要找到库-表-多个字段;

nosql数据可以存储在内存中,查询速度非常快;

nosql在性能虽然关系型数据库,但是并不能完全代替关系型数据库;比如:部署了论坛后,用户访问量太大,数据库扛不住了,这个时候可以加一层缓存进来(内存里),也就是nosql,可以减轻数据库的压力,

比如查询完一个帖子后,先放到内存里(帖子ID对应帖子内容)及是(key对应value)一条一条把论坛的帖子内容缓存到内存里,当用户再访问的时候就不查询mysql,直接查看缓存,减轻数据库的压力,这是最典型的用法了;

nosql没有复杂的数据结构,扩展非常容易,支持分布式;如:本来商品存在的A服务器,而A服务器有瓶颈了,那怎么在B服务器上查询A服务器的数据呢,mysql数据库做不到,只有nosql可以增加服务器横向扩展;

2、常见的nosql数据库:

键值数据库(k-v);memcachedredis适合存储用户信息,比如用户会话(session)、参数、购物车,这些信息一般都和ID(键)挂钩,这种情况下键值数据库是一个很好的选择;

用户会话(session):用户登录信息,用来做session共享;

文档数据库mongodb,将数据以文档的形式存储,多个key-value组成的文档,每个文档都是一系列数据项的集合,每个数据项都有一个名词与对应的值,值可以是简单的数据类型,如字符串、数字、日期,也可以是复杂的类型,如有序列表和关联对象,存储的最小单位是文档,同一个表中存储的文档属性可以是不同的;   列存储:Hbase

3、memcached:是国外社区网站Livejournal团队开发,目的是为了通过缓存数据库查询结果,减少数据库访问次数,从而提高动态web站点性能;

官网:www.memcached.org

数据结构简单(key-value),数据存放在内存里;不支持持久化(一重启服务,数据会丢失);

多线程,基于C/S架构;

语句libevent的事件处理,自主内存存储处理;slab   allowcation

数据过期方式;Laze  expiration     LRU 

4、memcache的数据流向

c4c6f6e296cc534d93a1abb2703febfd8b3.jpg

5:slab  allcation:
Slab Allocation的原理
 将分配的内存分割成各种尺寸的块(chunk), 并把尺寸相同的块分成组(chunk的集合),每个chunk集合被称为slab。
 Memcached的内存分配以Page为单位,Page默认值为1M,可以在启动时通过-I参数来指定。
 Slab是由多个Page组成的,Page按照指定大小切割成多个chunk
d242a87a252c3948a30a703088b51e789a1.jpg

6:Growth factor:来决定thunk的大小;

 Memcached在启动时通过-f选项可以指定 Growth Factor因子。该值控制chunk大小的差异。默认值为1.25。
 通过memcached-tool命令查看指定Memcached实例的不同slab状态,可以看到各Item所占大小(chunk大小)差距为1.25 
 命令:# memcached-tool 127.0.0.1:11211 display

7:数据的过期方式;两种: Lazy  expiration      LRU

Lazy  expiration  : memcached内部不会监视记录是否过期,而是在get时查看时间戳,检查记录是否过期,这种技术成为Lazy  expriation(懒惰的过期),不会在是否过期监视上耗费CPU时间;

LRU:memecache会优先使用已超时的记录空间,当即便如此,也会发生追加新记录时空间不足的情况,此时就需要使用LRU(least recently  used)删除最近最少使用的空间,因此,当内存空间不足或者无法从slab获取到新得空间时,就会从最近未使用的记录中搜索,并将其分配给新的记录,从缓存实用角度来看,该模型十分理想;存进去数据后一直未使用的,会隔一段时间去查询下并标记,会让下次覆盖;

8:安装memcached

安装:yum  install  -y  memcached   libmemcached    libevent

启动:systemctl   start   memcache

[root@localhost_001 ~]# yum list |grep memcached   
libmemcached.x86_64                       1.0.16-5.el7                 base        
libmemcached-devel.x86_64                 1.0.16-5.el7                 base     
memcached.x86_64                          1.4.15-10.el7_3.1            base         
memcached-devel.x86_64                    1.4.15-10.el7_3.1            base         [root@localhost_001 yum.repos.d]# yum  install  -y  memcached   libmemcached    libevent 
[root@localhost_001 yum.repos.d]# systemctl start memcached
[root@localhost_001 yum.repos.d]# ps aux |grep memcached
memcach+   1444  0.0  0.0 325604  1200 ?        Ssl  18:59   0:00 /usr/bin/memcached -u memcached -p 11211 -m 64 -c 1024
root       1451  0.0  0.0 112720   968 pts/0    R+   18:59   0:00 grep --color=auto memcached
[root@localhost_001 yum.repos.d]# netstat -lnpt |grep memcached
tcp        0      0 0.0.0.0:11211           0.0.0.0:*               LISTEN      1444/memcached      
tcp6       0      0 :::11211                :::*                    LISTEN      1444/memcached  

注释:如上图例,-u指定以memcache用户运行,-p监听的端口号,-m指定内存大小, -c指定并发数(concurrency);

注释:如上图例,memcache的监听端口是11211,

9:那么如果想自定义监听端口或者内存大小并发数等;有如下两种方法:(memcached没有配置文件)

1:加上这个参数去启动;/usr/bin/memcached -u memcached -p 11211 -m 64 -c 1024

[root@localhost_001 yum.repos.d]# /usr/bin/memcached -u memcached -p 11211 -m 128 -c 2048
[root@localhost_001 yum.repos.d]# ps aux |grep memcached
memcach+   1494  0.0  0.0 325604  1200 pts/0    Tl   19:06   0:00 /usr/bin/memcached -u memcached -p 11211 -m 128 -c 2048
root       1501  0.0  0.0 112720   968 pts/0    R+   19:07   0:00 grep --color=auto memcached

2:编辑/etc/sysconfig/memcached这个配置文件;

[root@localhost_001 yum.repos.d]# vim /etc/sysconfig/memcached 
cat /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS=""

注释:OPTIONS=""       表示监听的主机;   -l  指定监听IP,    -d   后台启动;

注释:平时基本修改-m就可以了;

10:查看memcached的状态;          memcache-tool    IP:端口  stats

memcached-tool    127.0.0.1:11211 stats

[root@localhost_001 ~]# memcached-tool 127.0.0.1:11211 stats
#127.0.0.1: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
                 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_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        1826
            pointer_size          64
               reclaimed           0
            reserved_fds          20
           rusage_system    0.017159
             rusage_user    0.012256
                 threads           4
                    time  1542199271
       total_connections          11
             total_items           0
              touch_hits           0
            touch_misses           0
                  uptime         344
                 version      1.4.15

注释:平时中重点关注两个参数:  cmd_get      get_hits

cmd_get     表示总的get次数;

get_hist        表示命中率;

一般用get_hist  除以 cm_get来计算命中率;

(2):还可以使用nc命令:   安装:    yum    install  -y     nc

echo   stats |nc 127.0.0.1 11211

[root@localhost_001 ~]# echo stats |nc 127.0.0.1 11211
STAT pid 1826
STAT uptime 832
STAT time 1542199759
STAT version 1.4.15
STAT libevent 2.0.21-stable
STAT pointer_size 64
STAT rusage_user 0.027198
STAT rusage_system 0.024725
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 1024
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

可以看到 nc 命令查询的结果和memcache查询的结果是一样子的;

如果查看libmemcached这个包后,还可以查询它的服务状态;

memstat --servers=127.0.0.1:11211

[root@localhost_001 ~]# memstat --servers=127.0.0.1:11211
Server: 127.0.0.1 (11211)
	 pid: 1826
	 uptime: 1101
	 time: 1542200028
	 version: 1.4.15
	 libevent: 2.0.21-stable
	 pointer_size: 64
	 rusage_user: 0.039654
	 rusage_system: 0.027262
	 curr_connections: 10
	 total_connections: 13
	 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: 30
	 bytes_written: 2068
	 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

注释:有三种方法可以查询memcache的状态;

memcached-tool  127.0.0.1:11211 stats

echo stats  |nc  127.0.0.1 11211

memstat  --servers=127.0.0.1:11211

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/yuanhaohao/blog/2873150

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值