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

Memcached Memcached是国外社区网站LiveJournal团队开发,目的是通过缓存数据库查询结果,减少数据库访问次数,从而提高动态web站点性能。 官方站点 http://www.memcached.org/  数据结构简单(k-v),数据存放在内存里 多线程 基于c/s架构,协议简单 基于libevent的事件处理 自主内存存储处理(slab allowcation) 数据过期方式:Lazy Expiration 和 LRU Slab Allocation的原理 将分配的内存分割成各种尺寸的块(chunk), 并把尺寸相同的块分成组(chunk的集合),每个chunk集合被称为slab。 Memcached的内存分配以Page为单位,Page默认值为1M,可以在启动时通过-I参数来指定。 Slab是由多个Page组成的,Page按照指定大小切割成多个chunk。

数据过期方式: Lazy Expiration  Memcached 内部不会监视记录是否过期,而是在get时查看记录的时间戳,检查记录是否过期。这种技术被称为lazy(惰性)expiration。因此,Memcached不会在过期监视上耗费CPU时间。 LRU Memcached会优先使用已超时的记录的空间,但即使如此,也会发生追加新记录时空间不足的情况,此时就要使用名为Least Recently Used(LRU)机制来分配空间。顾名思义,这是删除“最近最少使用”的记录的机制。因此,当内存空间不足时(无法从slab class获取到新的空间时),就从最近未被使用的记录中搜索,并将其空间分配给新的记录。从缓存的实用角度来看,该模型十分理想。 . 安装 yum install -y memcached systemctl start memcached -u 指定用户 -p 监听端口 -m 分配的内存,单位M -c 最大并发数 可以以命令脚本的形式启动,带参数启动可以自定义这四个参数 或者vim /etc/sysconfig/memcached自定义启动项目 memcached -h 查看详细命令参数 . 查看运行状态 memcached-tool 127.0.0.1:11211  stats echo stats |nc 127.0.0.1 11211 若安装libmemcached后,也可以使用命令 memstat --servers=127.0.0.1:11211 . memcached 命令行 telnet 127.0.0.1 11211 进入memcached <command name> <key> <flags> <exptime> <bytes>\r\n <data block>\r\n 注:\r\n在windows下是Enter键 <command name> 可以是set, add, replace set表示按照相应的<key>存储该数据,没有的时候增加,有的时候覆盖 add表示按照相应的<key>添加该数据,但是如果该<key>已经存在则会操作失败 replace表示按照相应的<key>替换数据,但是如果该<key>不存在则操作失败。 <key> 客户端需要保存数据的key <flags> 是一个16位的无符号的整数(以十进制的方式表示)。 该标志将和需要存储的数据一起存储,并在客户端get数据时返回。 客户端可以将此标志用做特殊用途,此标志对服务器来说是不透明的。 <exptime> 为过期的时间。 若为0表示存储的数据永远不过期(但可被服务器算法:LRU 等替换)。 如果非0(unix时间或者距离此时的秒数),当过期后,服务器可以保证用户得不到该数据(以服务器时间为标准)。 <bytes> 需要存储的字节数,当用户希望存储空数据时<bytes>可以为0 <data block>需要存储的内容,输入完成后,最后客户端需要加上\r\n(直接点击Enter)作为结束标志。 get 读取数据 delete 删除数据 . 数据导出和导入 导出: memcached-tool 127.0.0.1:11211 dump > data.txt 导入: nc 127.0.0.1 11211 < data.txt 若nc命令不存在,yum install nc 注意:导出的数据是带有一个时间戳的,这个时间戳就是该条数据过期的时间点,如果当前时间已经超过该时间戳,那么是导入不进去的 . PHP连接Memcached 先安装php的memcache扩展 cd /usr/local/src/ wget  http://www.apelearn.com/bbs/data/attachment/forum/memcache-2.2.3.tgz tar zxf memcache-2.2.3.tgz  cd memcache-2.2.3 /usr/local/php-fpm/bin/phpize ./configure --with-php-config=/usr/local/php-fpm/bin/php-config make && make install 修改php.ini添加一行 extension="“ 检查/usr/local/php/bin/php-fpm -m . Memcached中存储session 编辑php.ini添加两行 session.save_handler = memcache  session.save_path = "tcp://192.168.0.9:11211"  或者httpd.conf中对应的虚拟主机中添加 php_value session.save_handler "memcache"  php_value session.save_path "tcp://192.168.0.9:11211"  或者php-fpm.conf对应的pool中添加 php_value[session.save_handler] = memcache php_value[session.save_path] = " tcp://192.168.0.9:11211 " wget http:///.mem_se.txt mv .mem_se.txt /usr/local/apache2/htdocs/session.php 其中session.php内容可以参考https://coding.net/u/aminglinux/p/yuanke_centos7/git/blob/master/21NOSQL/session.php curl localhost/session.php 类似于1443702394<br><br>1443702394<br><br>i44nunao0g3o7vf2su0hnc5440 telnet 127.0.0.1 11211 get i44nunao0g3o7vf2su0hnc5440