nosql 非关系型数据库 数据之间无关系,可以随意扩展 数据存储简单,可以存在内存中,无需见表,字段,也可以随时存储自定义格式,
常见的关系型数据库 mysql oracle sqlserver 该数据麻烦。联合查询慢,锁表。



常见的非关系型数据库:nosql
键值数据库:redis,memcached, 适合存储用户信息,riak
面向文档数据库:mongoDB 将文件以文档形式存储 couchDB ravenDB
列存储数据库:cassandra  HBase
图数据库:orientDB
yum -y install memcached libevent libmemcached
memcached 通过缓存数据库来查询结果 11211    数据存放在内存中,支持的数据类型较少
-d 启动一个进程守护
-m 是分配给memcache使用的内存数量
-u 是运行memcache的用户,如果当前用户为root,需要此参数指定用户
-l 监听服务器的ip地址 可以在vi /etc/sysconfig/memcached中的options中指定==options=“-l 127.0.0.1”
-p 设置memcache监听的端口
-c 设置最大并发的连接数
-P 设置保存memcache的pid文件
查看memcached的运行状态。
memcached-tool 127.0.0.1:11211 stats
echo stats |nc 127.0.0.1 11211 需要手工安装nc
memstat --servers=127.0.0.1:11211
vi /etc/sysconfig/memcached下修改以上属性
memcached -d -p 11211 -u memcached -m 64 -c 1024 -P /var/run/memcached/memcached.pid
数据不持久性


telnet 127.0.0.1 11211 用于测试数据
set   get  gets   replace=cas   delete  stats items    stats+cachedump+slab+数量
stats slabs       stats sizes      stats reset
append 在现有的数据之后加   prepend  在现有的数据之前加  flush_all 使已经存在的项目失效


cas即checked and set的意思,只有当最后一个参数和gets所获取的参数匹配时才能存储,否则返回“EXISTS”。时间是永不过期的参数。
gets命令比普通的get命令多返回了一个value值。这个数字可以检查数据是否发生改变。当key对应的数据改变时
这个多返回的数字也会改变。 改变现有chunks中的数据


stats 查看数据状态


stats items
执行stats items,可以看到STAT items行=slab_id,如果memcached存储内容很多,那么这里也会列出很多的STAT items行
stats cachedump slab_id limit_num(0) ‘0’表示显示所有的记录
这里slab_id为1,是由2中的stats items返回的结果(STAT items后面的数字)决定的;limit_num看起来好像是返回多少条记录,猜的一点不错, 不过0表示显示出所有记录,而n(n>0)就表示显示n条记录,如果n超过该slab下的所有记录,则结果和0返回的结果一致。


append 在现有的缓存数据后添加缓存数据,如现有缓存的key不存在服务器响应为NOT_STORED


prepend 它的作用是在现有的缓存数据前添加缓存数据
flush_all 它的作用是使已存在的缓存失效
语法规则:
命令名(set add replace delete)命名  标记  过期时间 大小


数据过期方式
Lazy Expiration
 memcached 内部不会监视记录是否过期,而是在get时查看记录的时间戳,检查记录是否过期。这种技术被称为lazy(惰性)expiration。因此,memcached不会在过期监视上耗费CPU时间。
LRU
 memcached会优先使用已超时的记录的空间,但即使如此,也会发生追加新记录时空间不足的情况,此时就要使用名为Least Recently Used(LRU)机制来分配空间。顾名思义,这是删除“最近最少使用”的记录的机制。因此,当内存空间不足时(无法从slab class slab class 获取到新的空间时),就从最近未被使用的记录中搜索,并将其空间分配给新的记录。从缓存的实用角度来看,该模型十分理想。


php连接memcached校验
安装memcache模块
php连接使用memcached
首先需要安装php的memcache扩展
可以使用php自带的pecl安装程序
# /usr/local/php/bin/pecl install memcache
也可以从源码安装     
# 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这个项 需安装yum -y install autoconf软件  如yum 安装php没有phpize选项则安装php-devel 
 # ../configure --with-php-config=/usr/local/php/bin/php-config
 # make && make install
安装完后会有类似这样的提示:
Installing shared extensions: /usr/local/servers/php5/lib/php/extensions/no-debug-non-zts-20060922/
把这个记住,然后修改vi /usr/local/php/bin/etc/php.ini,把
extension_dir = "./"
修改为
extension_dir = "/usr/local/servers/php5/lib/php/extensions/no-debug-non-zts-20060922/"
并添加一行
extension="memcache.so"
检验
# /usr/local/php/bin/php -m
测试php脚本
wget www.apelearn.com/study_v2/.memcache.txt >1.php 2>/dev/null
/usr/local/php/bin/php 1.php

memcached实现session的共享
1在php.ini中实现
session.save_handler="memcache"
session.save_path="tcp://127.0.0.1(远端服务器ip):11211"
2在apache虚拟配置文件中实现
php_value session.save_handler "memcache"
php_value session.save_path  "tcp://127.0.0.1(远端服务器ip):11211"
3在php-ftp.conf对应的pool中添加
php-value[session.save_handler]=memcache
php-value[session.save_path]="tcp://127.0.0.1(远端服务器ip):11211"
下载测试文件
wget http://study.lishiming.net/.mem_se.txt