memcached的安装启动(仅介绍安装和启动)

什么是NoSQL

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

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

列存储  Hbase
图Neo4J、 Infinite Graph、OrientDB

memcached介绍

memcached对数据查询结果进行缓存,减少对关系型数据库访问,加速数据请求结果的反馈响应
数据存放在内存中,因为数据是存在内存当中的,如果一旦关机或断电等意外操作,会造成数据丢失,为了避免这种情况发生。需要对memcachd的数据做持久化存储,将数据存入磁盘
多线程服务处理请求,多cpu的服务器架构处理数据会很快
memcached基于c/s架构,协议简单。由一个客户端来链接服务端来存储数据
memcached基于libevent的事件处理(nginx也是基于libevent方式的)
libevent事件处理,自主内存存储处理(slab allocation)

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

Griwth factor(增长因子)指定控制chunk的大小差异,在启动时使用-f来指定。默认值为1.25
数据过期方式
Lazy Expiration
Memcached内部不会监视记录是否过期,而是在get时查看记录的时间戳,检查记录是否过期。这种技术被称为lazy (惰性) expiration。 因此,Memcached不会在过期监视上耗费CPU时间。
LRU
Memcached会优先使用已超时的记录的空间,  但即使如此,也会发生追加新记录时空间不足的情况,此时就要使用名为LeastRecentlyUsed  (LRU)机制来分配空间。顾名思义,这是删除“最近最少使用”的记录的机制。因此,当内存空间不足时( 无法从slab class获取到新的空间时),就从最近未被使用的记录中搜索,并将其空间分配给新的记录。从缓存的实用角度来看,这是非常理想的存储方式。

数据流请求关系
用户第一次请求会直接访问数据库内容,memcached同时缓存这次请求的结果,当用户下次访问请求时,再次使用该数据memcached会直接从缓存中向客户端发送结果

安装memcached

memcached我们可以使用yum来进行安装,如果需要使用更新的版本功能则需要官网下载编译安装包来安装
memcached依赖libevent这个依赖包,如果没有安装可以主动安装或在安装memcached时会自动安装上

[root@localhost ~]# yum list |grep memcached
libmemcached.i686 1.0.16-5.el7 base     
libmemcached.x86_64 1.0.16-5.el7 base     
libmemcached-devel.i686 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.i686 1.4.15-10.el7_3.1 base     
memcached-devel.x86_64 1.4.15-10.el7_3.1 base     
opensips-memcached.x86_64 1.10.5-3.el7 epel     
php-ZendFramework-Cache-Backend-Libmemcached.noarch
php-pecl-memcached.x86_64 2.2.0-1.el7 epel     
python-memcached.noarch 1.48-4.el7 base     
uwsgi-router-memcached.x86_64 2.0.17.1-1.el7 epel     
[root@localhost ~]# rpm -qa libevent
libevent-2.0.21-4.el7.x86_64
[root@localhost ~]# yum install -y memcached
Loaded plugins: fastestmirror
base | 3.6 kB 00:00:00     
epel/x86_64/metalink | 4.8 kB 00:00:00     
epel | 3.2 kB 00:00:00     
extras                                       
省略-------------------
Running transaction
  Installing : memcached-1.4.15-10.el7_3.1.x86_64 1/1 
  Verifying : memcached-1.4.15-10.el7_3.1.x86_64 1/1 
Installed:
  memcached.x86_64 0:1.4.15-10.el7_3.1                                                                                                           
Complete!

定义memcached的启动配置参数
可以在memcached启动时来指定参数,可以在启动时指定这些配置。
查看memcached的进程,并了解memcached启动信息
-u是指定运行服务的用户,-p是监听的端口,-m预分配内存大小,-c最大产生进程数量

[root@localhost ~]# ps -aux |grep memcached
memcach+ 28555 0.0 0.0 344084 1672 ? Ssl 16:39 0:00 /usr/bin/memcached -u memcached -p 11211 -m 64 -c 1024

另一种方式指定memcached的启动参数配置,需要编辑/etc/sysconfig/memcached这个配置文件
PORT指定监听端口
USER指定运行用户
MAXCONN指定最大进程数
CACHESIZE指定启动时分配的内存使用量大小
OPTIONS指定主机,可以在启动时使用-I选项指定监听ip,更多选项可以使用memcached -h来查看参数帮助

[root@localhost ~]# vim /etc/sysconfig/memcached 
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS=""

查看memcached的工作状态

使用memcached自带工具查看运行状态
curr_time是缓存的项目数,get_hits是查询的命中数,使用命中数除以项目数可以得出memcached的命中率

[root@localhost ~]# 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 28555
            pointer_size 64
               reclaimed 0
            reserved_fds 20
           rusage_system 0.018183
             rusage_user 0.036366
                 threads 4
                    time 1538989698
       total_connections 11
             total_items 0
              touch_hits 0
            touch_misses 0
                  uptime 1759
                 version 1.4.15

使用nc命令来查看memcached服务状态
nc命令默认不会安装在系统中,需要我们进行yum安装,nc命令的包名为nmap-ncat
安装nc命令

[root@localhost ~]# yum install nmap-ncat
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * epel: mirrors.tuna.tsinghua.edu.cn
Resolving Dependencies
--> Running transaction check
---> Package nmap-ncat.x86_64 2:6.40-13.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
----------------------------省略
Running transaction
  Installing : 2:nmap-ncat-6.40-13.el7.x86_64 1/1 
  Verifying : 2:nmap-ncat-6.40-13.el7.x86_64 1/1 
Installed:
  nmap-ncat.x86_64 2:6.40-13.el7                                                                                                                 
Complete!

使用echo过滤出nc的stats状态的输出内容
使用nc命令我们也可以查找出memcached存储和查询的数量相关状态信息

[root@localhost ~]# echo stats |nc 127.0.0.1 11211
STAT pid 28555
STAT uptime 2144
STAT time 1538990083
STAT version 1.4.15
STAT libevent 2.0.21-stable
STAT pointer_size 64
STAT rusage_user 0.043580
STAT rusage_system 0.021790
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 1026
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

使用memstat命令工具查看memcached的状态信息
使用memstat命令需要安装一个安装包才能正常使用,安装包名为libmamcached,若安装了则不需要再次进行安装(安装memcached时已经安装过了的)
使用memstat命令也可以查看到memcached的运行状态信息

[root@localhost ~]# memstat --servers=127.0.0.1:11211
Server: 127.0.0.1 (11211)
  pid: 28555
  uptime: 2522
  time: 1538990461
  version: 1.4.15
  libevent: 2.0.21-stable
  pointer_size: 64
  rusage_user: 0.053708
  rusage_system: 0.021790
  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: 2072
  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

memcached数据导出和应用请看我后续笔记内容

猜你喜欢

转载自blog.51cto.com/8844414/2314138