标签:机制 日期 least json mem 启动 loaded errors 协议
什么是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对数据查询结果进行缓存,减少对关系型数据库访问,加速数据请求结果的反馈响应
数据存放在内存中,因为数据是存在内存当中的,如果一旦关机或断电等意外操作,会造成数据丢失,为了避免这种情况发生。需要对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我们可以使用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自带工具查看运行状态
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数据导出和应用请看我后续笔记内容
标签:机制 日期 least json mem 启动 loaded errors 协议
原文地址:http://blog.51cto.com/8844414/2314138