NoSQL中的memcached

来源:互联网 发布:nginx中文 编辑:程序博客网 时间:2024/05/29 16:56

NoSQL中的memcached

什么是NoSQL


NoSQL(NoSQL = Not Only SQL ),意即”不仅仅是SQL”。


NoSQL,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。


虽然NoSQL流行语火起来才短短一年的时间,但是不可否认,现在已经开始了第二代运动。尽管早期的堆栈代码只能算是一种实验,然而现在的系统已经更加的成熟、稳定。不过现在也面临着一个严酷的事实:技术越来越成熟——以至于原来很好的NoSQL数据存储不得不进行重写,也有少数人认为这就是所谓的2.0版本。这里列出一些比较知名的工具,可以为大数据建立快速、可扩展的存储库。

一、什么是memcache


你可以把它想象成一张单表

名字 数据类型 key varchar(255) value text



MemCache和MemCached的区别:
1、MemCache是项目的名称
2、MemCached是MemCache服务器端可以执行文件的名称

二、Memcached使用场景


1、非持久化存储:对数据存储要求不高
2、分布式存储:不适合单机使用。尽量不要和数据库放置同一台机器
3、key/value存储:格式简单,不支持List、Array数据格式

安装和启动memcached

安装

1、lnmp一键包环境

cd lnmp1.3-full/./addons.sh uninstall memcached

2、手动安装

【编译】yum install libevent libevent-develwget http://pecl.php.net/get/memcache-2.2.5.tgztar zxvf memcache-2.2.5.tgzcd memcache-2.2.5// 编译安装 要指向你的php安装目录的配置文件./configure --enable-memcache --with-php-config=/usr/local/php/bin/php-config   make && make install

有可能需要安装

【安装telnet】 yum install telnet-server 安装telnet服务 yum install telnet.* 安装telnet客户端

检查运行的进程

ps -ef | grep memcached

启动

lnmp一键安装包 默认随机启动

#find / -name memcached  //找到memcached路径#/usr/local/memcached/bin/memcached -p 11211 -m 64m -c 1024 -u root -d- d 守护进程,默默的在后台运行-l 设置监听的 IP 地址,如果是本机的话,通常可以不设置此参数-p 端口11211-m 设置 memcached 可以使用的内存大小,单位为 M-c 最大运行的并发连接数,默认为1024-u 指定用户,如果当前为 root 的话,需要使用此参数指定用户

MemCache指令

命 令 作 用 get 返回Key对应的Value值 add 添加一个Key值,没有则添加成功并提示STORED,有则失败并提示NOT_STORED set 无条件地设置一个Key值,没有就增加,有就覆盖,操作成功提示STORED replace 按照相应的Key值替换数据,如果Key值不存在则会操作失败 stats 返回MemCache通用统计信息(下面有详细解读) stats items 返回各个slab中item的数目和最老的item的年龄(最后一次访问距离现在的秒数) stats slabs 返回MemCache运行期间创建的每个slab的信息(下面有详细解读) version 返回当前MemCache版本号 flush_all 清空所有键值,但不会删除items,所以此时MemCache依旧占用内存 quit 关闭连接

PHP结合memcached实例


//包含 memcached 类文件require_once('memcached-client.php');//选项设置$options = array(    'servers' => array('192.168.1.1:11211'), //memcached 服务的地址、端口,可用多个数组元素表示多个 memcached 服务    'debug'   => true,  //是否打开 debug    'compress_threshold' => 10240,  //超过多少字节的数据时进行压缩    'persistant' => false  //是否使用持久连接    );//创建 memcached 对象实例$mc = new memcached($options);//设置此脚本使用的唯一标识符$key = 'mykey';//往 memcached 中写入对象$mc->add($key, 'some random strings');$val = $mc->get($key);echo "n".str_pad('$mc->add() ', 60, '_')."n";var_dump($val);//替换已写入的对象数据值$mc->replace($key, array('some'=>'haha', 'array'=>'xxx'));$val = $mc->get($key);echo "n".str_pad('$mc->replace() ', 60, '_')."n";var_dump($val);//删除 memcached 中的对象$mc->delete($key);$val = $mc->get($key);echo "n".str_pad('$mc->delete() ', 60, '_')."n";var_dump($val);

做数据库查询缓存

$sql = 'SELECT * FROM users';$key = md5($sql);   //memcached 对象标识符if ( !($datas = $mc->get($key)) ) {    //在 memcached 中未获取到缓存数据,则使用数据库查询获取记录集。    echo "n".str_pad('Read datas from MySQL.', 60, '_')."n";    $conn = mysql_connect('localhost', 'test', 'test');    mysql_select_db('test');    $result = mysql_query($sql);      while ($row = mysql_fetch_object($result))      $datas[] = $row;    //    将数据库中获取到的结果集数据保存到 memcached 中,以供下次访问时使用。    $mc->add($key, $datas);} else {      echo "n".str_pad('Read datas from memcached.', 60, '_')."n";}var_dump($datas);
原创粉丝点击