基础知识
NoSQL
NoSQL是对非SQL、非传统关系型数据库
的统称。
NoSQL一词诞生于1998年,2009年这个词汇被再次提出指非关系型、分布式、不提供ACID的数据库设计模式。
随着互联网时代的到来,数据爆发式增长,数据库技术发展日新月异,要适应新的业务需求。
随着移动互联网、物联网的到来,大数据的技术中NoSQL也同样重要。
https://db-engines.com/en/ranking
分类
- Key-value Store
redis(都支持)、memcached(只支持序列化,只能做cache) - Document Store文档
mongodb、CouchDB - Column Store列存数据库,Column-Oriented DB列数据库
HBase、Cassandra - Graph DB图数据库
Neo4j - Time Series 时序数据库
InfluxDB
Memcached
Memcached只支持能序列化的数据类型,不支持持久化,基于Key-Value的内存缓存系统
。
内存分配机制memcached
应用程序运行需要使用内存存储数据
,但对于一个缓存系统来说,申请内存、释放内存将十分频繁,非常容易导致
大量内存碎片,最后导致无连续可用内存可用。
Memcached采用了Slab Allocator机制来分配、管理内存。
- Page:分配给Slab的内存空间,默认为
1MB
,分配后就得到一个Slab
。Slab分配之后内存按照固定字节大小等分成chunk。
- Chunk:用于缓存记录kv值的内存空间。Memcached会根据数据大小选择存到哪一个chunk中,假设chunk
有128bytes、64bytes,数据只有100bytes存储在128bytes中,存在些浪费。Chunk最大就是Page的大小,即一个Page中就一个Chunk
- Slab Class:Slab按照大小分组,就组成不同的Slab Class
如果有100bytes要存,那么Memcached会选择上图中Slab Class 2存储,因为它是120bytes的Chunk。
Slab之间的差异可以使用Growth Factor控制,默认1.25
懒过期Lazy Expiration
memcached不会监视数据是否过期
,而是在取数据时才看是否过期,过期的把数据有效期限标识为0,并不清除该数据。以后可以覆盖
该位置存储其它数据。
LRU 最近最少使用
当内存不足时,memcached会使用LRU(Least Recently Used)机制来查找可用空间,分配给新纪录使用。
集群
Memcached集群,称为基于客户端的分布式集群
。
Memcached集群内部并不互相通信,一切都需要客户端
连接到Memcached服务器后自行组织这些节点,并决定数据存储的节点。
安装
将上一步的内容更清空
yum install memcached
rpm -ql memcached
cat /usr/lib/systemd/system/memcached.service
[Service]
Type=simple
EnvironmentFile=-/etc/sysconfig/memcached
ExecStart=/usr/bin/memcached -u $USER -p $PORT -m $CACHESIZE -c $MAXCONN $OPTIONS
cat /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS=""
前台显示看看效果
memcached -u memcached -p 11211 -f 1.25 -vv
systemctl start memcached
修改memcached运行参数,可以使用下面的选项修改/etc/sysconfig/memcached
文件
-u username memcached运行的用户身份,必须普通用户
-p 绑定的端口,默认11211
-m num 最大内存,单位MB,默认64MB
-c