小Q:人生是一条没有回程的单行线,上帝不会给你一张返程得票。

本次主要是写的关于NoSQL中的memcache(key-value数据库),一是作为我以后查看的笔记,二是为大家提供浅层次的认知,可以互相讨论我认知的不足之处,谢谢;
-----------------------------------------------NoSQL---------------------------------------------
关系型数据库:mysql  oracle(收费)  mssql
传统的关系数据库具有很不错的性能,高稳定性,久经历史考验,而且使用简单,性能强大,同时也累计了大量的成功案例;而毫不夸张的说mysql是绝对的王者。前几十年网站的访问量都不是特别大,而且更多的是静态网页,动态交互的也不多;但是在近10年的时间吧,互联网发展飞速,pv量骤增,几乎使用mysql架构的网站在数据库上都出现了性能问题,虽然开发人员不断地开发并使用缓存技术,但是高并发.文件缓存.共享.索引.查询等等造成的影响还是不能更好的解决。
缺点:扩展困难,因为有join复杂查询;数据量大时读写变慢还会有锁;

NoSQL:泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。
优势:易扩展,去掉了关系数据库的关系型特点,数据之间变得无关系;大数据量,具有很高的读写性能;灵活的数据模型,随时可以自定义数据格式,不需要事先建立表及字段;还可以在不影响性能的情况下,实现高可用架构。
主要类型:
键值(key-value)数据库:redis  memcache  riak
面向文档(document-oriented)数据库:mongodb  couchdb  ravendb
列存储数据库:cassandra   HBase
图数据库:Neo4J   Infinite Graph   OrientDB


--------------------------------------------memcache-----------------------------------------
memcache是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,但目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的、需要频繁访问数据库的网站访问速度提升效果十分显著。

配置安装memcache服务
1、安装扩展源(安装扩展源可以更快的安装服务,我们可以去阿里云等mirrors下载)
#yum install -y epel-release
# wget www.lishiming.net/data/attachmen ... e-5-4_32.noarch.rpm
#rpm -ivh epel-release-5-4_32.noarch.rpm
#rpm -qa epel-release
epel-release-5-4.noarch
表明已经安装成功。
2、安装
# yum install -y libevent memcached libmemcached
3、启动memcached(默认端口11211)
# /etc/init.d/memcached start
注:centos7安装后,服务启动没有在/etc/init.d下;若要启动,可以先chkconfig --list  根据systemctl 查找到服务名字,然后systemctl start 服务名
4、配置文件
# cat /etc/sysconfig/memcached
PORT="11211"               #端口号
USER="memcached"      #用户名
MAXCONN="1024"        #最大连接数
CACHESIZE="64"           #内存大小 单位是M
OPTIONS=""
5、进程:# ps aux|grep memcached
496       3322  0.0  0.0  58188   888 ?        Ssl  00:21   0:00 memcached -d -p 11211 -u memcached -m 64 -c 1024 -P /var/run/memcached/memcached.pid
root      3347  0.0  0.0   4420   760 pts/2    S+   00:24   0:00 grep memcached  
  Memcached 启动参数
  -d  选项是启动一个守护进程
  -m 是分配给memcache使用内存数量,单位是MB,这里的是128MB
  -u  是运行Memcache的用户,如果当前为root的话,需要使用此参数指定用户。
  -l   是监听的服务器的IP地址
  -p  是设置memcache监听的端口号,默认是11211
  -c   选项是最大运行的并发连接数,默认是1024
  -P  是设置保存Memcache的pid文件,
6、查看memcache运行状态(其中最重要的是命中率hit)
a、memcached-tool 127.0.0.0.1:11211 stats
b、或者echo stats |nc 127.0.0.1 11211 需要安装nc工具(yum install -y nc)
c、若是安装libmemcached 后,可以使用命令 memstat --servers=127.0.0.1:11211查看memcached的服务状态
7、基本操作
登录:# telnet 127.0.0.1 11211
退出:# quit
设置:set key1 0 300 2 #key1:表示键值   0:标记  300:过期时间   2:大小双字节
取值:get key1
更改:replace key1 1 200 3
8、查看chunk
# memcached-tool  127.0.0.1:11211 display
Item_Size  Max_age   Pages   Count   Full?  Evicted Evict_Time OOM
  1      96B      1819s       1       1      no        0        0    0

-----------------------------------php加载memcache模块----------------------------------
1、安装
首先我们可以去github下载一个扩展模块,或者用下面的
#cd  /usr/local/src
# wget  http://www.lishiming.net/data/p_w_upload/forum/memcache-2.2.3.tgz
# tar zxf memcache-2.2.3.tgz
# cd memcache-2.2.3
# /usr/local/php/bin/phpize
# ./configure --with-php-config=/usr/local/php/bin/php-config
# make && make install
安装完成后会提示安装到的位置;
然后在php.ini文件中添加extension=“memcache.so”
我们当然也可以指定配置文件去调用寻找模块的路径:extension_dir=
2、查看:/usr/local/php/bin/php -m
     测试:(次数我们利用一个高人写的php文件进行检测)
#curl www.apelearn.com/study_v2/.memcache.txt > 1.php 2
# /usr/local/php/bin/php 1.php

Get key1 value: This is first value
Get key1 value: This is replace value
Get key2 value: Array (     [0] => aaa     [1] => bbb     [2] => ccc     [3] => ddd )
Get key1 value: 
Get key2 value: 

出现这样的结果就是成功了
ERROR:Cannot find autoconf. Please check your autoconf installation and the
#yum install m4
# yum install autoconf
----------------------------------memcache共享session-------------------------------------
当我们把memcache加载到了php中,我们会想到使网络服务调用memcache,即使memcache共享网络session;
1、三种方式:
编辑php.ini:添加
session.save_handler "memcache"
session.save_path "tcp://127.0.0.1:11211"
编辑nginx或apache配置文件(当然可以只配一个主机调用)

DocumentRoot "/data/www"
ServerName www.test.com
ServerAlias www.aaa.com
ServerAlias www.bbb.com
php_value session.save_handler "memcache"
php_value session.save_path "tcp://127.0.0.1:11211"
php_admin_value open_basedir "/data/www/:/tmp/"
编辑php.conf:添加
[php_value] session.save_handler "memcache"
[php_value] session.save_path "tcp://127.0.0.1:11211"
2、测试
在网站下面配置一个测试文件,比如info.php
  phpinfo ();
?php>
访问:curl -x127.0.0.1:80 www.user13.com/info.php
其中出现下面语句就是ok

class="e">session.save_handlermemcachememcache
session.save_path tcp://127.0.0.1:11211  tcp://127.0.0.1:11211