NoSQL, Memcached基本介绍, 安装与状态查看

NoSQL

  • 非关系型数据库就是NoSQL,关系型数据库代表MySQL(使用sql语句)
  • 对于关系型数据库来说,是需要把数据存储到库、表、行、字段里,查询的时候根据条件一行一行地去匹配,当量非常大的时候就很耗费时间和资源,尤其是数据是需要从磁盘里去检索
  • NoSQL数据库存储原理非常简单(典型的数据类型为k-v),不存在繁杂的关系链,比如mysql查询的时候,需要找到对应的库、表(通常是多个表)以及字段。
  • NoSQL数据可以存储在内存里,查询速度非常快
  • NoSQL在性能表现上虽然能优于关系型数据库,但是它并不能完全替代关系型数据库
  • NoSQL因为没有复杂的数据结构,扩展非常容易,支持分布式

常见NoSQL数据库

  • k-v形式的:
    memcached、redis 适合储存用户信息,比如会话session、配置文件、参数、购物车等等。这些信息一般都和ID(键)挂钩,这种情景下键值数据库是个很好的选择。
  • 文档数据库:
    mongodb 将数据以文档的形式储存。每个文档都是一系列数据项的集合。每个数据项都有一个名称与对应的值,值既可以是简单的数据类型,如字符串、数字和日期等;也可以是复杂的类型,如有序列表和关联对象。数据存储的最小单位是文档,同一个表中存储的文档属性可以是不同的,数据可以使用XML、JSON或者JSONB等多种形式存储。
  • 列存储
    Hbase

  • Neo4J、Infinite Graph、OrientDB

Memcached介绍

  • Memcached是国外社区网站LiveJournal团队开发,目的是为了通过缓存数据库查询结果,减少数据库访问次数,从而提高动态web站点性能。
  • 官方站点 http://www.memcached.org/
  • 数据结构简单(k-v),数据存放在内存里
  • 多线程(多CPU可以更好发挥作用)
  • 基于c/s架构,协议简单
  • 基于libevent的事件处理
  • 自主内存存储处理(slab allowcation)
  • 数据过期方式:Lazy Expiration 和 LRU

Memcached的数据流向

在这里插入图片描述

  • Memcached可作为web和mysql中间的缓存,缓存数据库结果

Slab allocation

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

Growth factor

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

Memcached的数据过期方式

  • Lazy Expiration
    Memcached 内部不会监视记录是否过期,而是在get时查看记录的时间戳,检查记录是否过期。这种技术被称为lazy(惰性)expiration。因此,Memcached不会在过期监视上耗费CPU时间。
  • LRU
    Memcached会优先使用已超时的记录的空间,但即使如此,也会发生追加新记录时空间不足的情况,此时就要使用名为Least Recently Used(LRU)机制来分配空间。顾名思义,这是删除“最近最少使用”的记录的机制。因此,当内存空间不足时(无法从slab class获取到新的空间时),就从最近未被使用的记录中搜索,并将其空间分配给新的记录。从缓存的实用角度来看,该模型十分理想。

Memcached安装

[root@draft ~]# yum install -y  memcached
[root@draft ~]# systemctl start memcached
[root@draft ~]# ps aux |grep memcached
memcach+  64170  0.2  0.2 350620  2168 ?        Ssl  21:41   0:00 /usr/bin/memcached -u memcached -p 11211 -m 64 -c 1024
[root@draft ~]# netstat -lntp |grep memcached
tcp        0      0 0.0.0.0:11211           0.0.0.0:*               LISTEN      64170/memcached     
tcp6       0      0 :::11211                :::*                    LISTEN      64170/memcached
[root@draft ~]# memcached -h   #一些可能用到的参数;
-m <num>      max memory to use for items in megabytes (default: 64 MB)
-l <addr>     interface to listen on (default: INADDR_ANY, all addresses)
              <addr> may be specified as host:port. If you don't specify
              a port number, the value you specified with -p or -U is
              used. You may specify multiple addresses separated by comma
              or by using -l multiple times
-d            run as a daemon
-I            Override the size of each slab page. Adjusts max item size
              (default: 1mb, min: 1k, max: 128m)
             
-f <factor>   chunk size growth factor (default: 1.25)
  • 改变memcached运行参数,运行时加上相应参数;
  • 另外一种方法是改配置文件;
[root@draft ~]# vim /etc/sysconfig/memcached 

PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS=""

查看Memcached运行状态

[root@draft ~]# 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          33
           bytes_written          54
              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       66041
            pointer_size          64
               reclaimed           0
            reserved_fds          20
           rusage_system    0.005032
             rusage_user    0.004441
                 threads           4
                    time  1575899587
       total_connections          12
             total_items           0
              touch_hits           0
            touch_misses           0
                  uptime          32
                 version      1.4.15
  • 使用nc工具
[root@draft ~]# yum install nmap-ncat.x86_64

描述    : Ncat is a feature packed networking utility which will read and
         : write data across a network from the command line.  It uses both
         : TCP and UDP for communication and is designed to be a reliable
         : back-end tool to instantly provide network connectivity to other
         : applications and users. Ncat will not only work with IPv4 and IPv6
         : but provides the user with a virtually limitless number of potential
         : uses.
[root@draft ~]# echo stats | nc 127.0.0.1 11211
STAT pid 66041
STAT uptime 387
STAT time 1575899942
STAT version 1.4.15
STAT libevent 2.0.21-stable
STAT pointer_size 64
STAT rusage_user 0.007740
STAT rusage_system 0.024282
STAT curr_connections 10
STAT total_connections 14
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 44
STAT bytes_written 1087
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
[root@draft ~]# yum install -y libmemcached
[root@draft ~]# memstat --servers=127.0.0.1:11211
Server: 127.0.0.1 (11211)
	 pid: 66041
	 uptime: 560
	 time: 1575900115
	 version: 1.4.15
	 libevent: 2.0.21-stable
	 pointer_size: 64
	 rusage_user: 0.010668
	 rusage_system: 0.033072
	 curr_connections: 10
	 total_connections: 15
	 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: 61
	 bytes_written: 2132
	 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
发布了125 篇原创文章 · 获赞 5 · 访问量 4623

猜你喜欢

转载自blog.csdn.net/tanyyinyu/article/details/103466285