学习memcache
memcache的使用。函数库参见http://php.net/manual/zh/book.memcache.php
memcached的函数库参见http://php.net/manual/zh/book.memcached.php
使用的方法如下面的代码:
<?php
$memcache=new memcache(); $memcache->connect("127.0.0.1","11211");
$memcache->addServer("127.0.0.1","11212");
$memcache->addServer("127.0.0.1","11213");
//建议直接用addServer $flag=$memcache->flush();//标记所有项都失效
//此时缓存池中的数据还存在,并没有被删除,只是已经过期,不能再访问了(惰性删除)
var_dump($flag);//bool(true)
echo "<br>"; //添加一项name
$flag=$memcache->add("name","beyond",false,600);
var_dump($flag);
echo $memcache->get("name")."<br>";
//bool(true) beyond //添加一项age
$flag=$memcache->add("age","20",false,600);
var_dump($flag);
echo $memcache->get("age")."<br>";
// bool(true) 20 //尝试再次添加一项name,会失败
$flag=$memcache->add("name","hello",false,600);
var_dump($flag);
echo $memcache->get("name")."<br>";
// bool(false) beyond //尝试获取一个不存在的项
var_dump($memcache->get("abc"));
//false //尝试替换掉已存在name,name已存在,成功执行
$flag=$memcache->replace("name","hello",false,600);
var_dump($flag);
echo $memcache->get("name")."<br>";
// bool(true) hello //尝试替换掉不存在的sex,失败
$flag=$memcache->replace("sex","male",false,600);
var_dump($flag);
echo $memcache->get("male")."<br>";
// bool(false) //尝试用set对已存在的name重新设定值,成功
$flag=$memcache->set("name","hello",false,600);
var_dump($flag);
echo $memcache->get("name")."<br>";
// bool(true) hello //尝试用set对已存在的sex重新设定值,成功
$flag=$memcache->set("sex","male",false,600);
var_dump($flag);
echo $memcache->get("name")."<br>";
// bool(true) hello $memcache->delete("name");
echo $memcache->get("name")."<br>";
//false
?>
可以使用connect()连接一个memcache服务器,但是建议直接使用addServer()。
add($key,$value,$flag,$expire=0)向memcache中添加一项,第三个参数表示是否对数据进行压缩,第四个参数是该项的有效时间,单位为秒
get($key)获得对应键的值,返回其内容,若没有该项或已经失效,则返回false.
set和replace 与add的参数相同,前者表示强制设置,后者是替换已存在的项;
他们的区别在于
add 仅当存储空间中不存在键相同的数据时才保存
replace 仅当存储空间中存在键相同的数据时才保存
set 与add和replace不同,无论何时都保存
flush是让服务器中的缓存数据全都过期,此时,数据依旧存在,但是不可以再被访问,这是memcache的内部机制(惰性删除)。
<?php
$memcache=new memcache(); $memcache->connect("127.0.0.1","11211");
$memcache->addServer("127.0.0.1","11212");
$memcache->addServer("127.0.0.1","11213"); $memcache->flush(); //添加一项
$memcache->add("num",1,false,600);
echo $memcache->get("num");//1 //自增1
$memcache->increment("num");
echo $memcache->get("num");//2 //自增3
$memcache->increment("num",3);
echo $memcache->get("num");//5 //自减3
$memcache->decrement("num",3);
echo $memcache->get("num");//2 //自减3
$memcache->decrement("num",3);
echo $memcache->get("num");//0 $memcache->close();
?>
increment($key,$step=1)让$key所对应的值自增$step(默认自增1)
decrement($key,$step=1)让$key所对应的值自减$step(默认自减1),但是自减之后的值不会小于0。
注意memcache或者memcached 和redis不同。redis中可以用incr命令不同,它的incr可以创建一个新的项,如果该项存在,则自增1,而如果该项不存在,则默认创建一项初始默认值为0,然后自增为1,; memcache的incr则不能这样
学习memcache的更多相关文章
- SAE下的Memcache使用方法
SAE里面有Memcache,可以较大幅度改善数据库的鸭梨~ 之前一直想学习Memcache,却愁于不知如何下手,对这个名词完全没有概念,同时在SAE的文档里面,也很少对于Memcache的使用教程~ ...
- 大型网站优化-memcache技术
大型网站优化-memcache技术 memory+cache 内存缓存 memcache简介 memcache是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发 ...
- Memcache未授权访问漏洞利用及修复
Memcached是一套分布式的高速缓存系统.它以Key-Value(键值对)形式将数据存储在内存中,这些数据通常是应用读取频繁的.正因为内存中数据的读取远远大于硬盘,因此可以用来加速应用的访问.本文 ...
- 《Memcache学习总结》[PDF]发布
<Memcache学习总结>[PDF]发布 百度网盘共享: http://pan.baidu.com/s/1mgvayQO 版本号: V1.2 最后跟新: 2015-04-01 讨论组: ...
- memcache/redis 缓存学习笔记
0.redis和memcache的区别 a.redis可以存储除了string之外的对象,如list,hash等 b.服务器宕机以后,redis会把内存的数据持久化到磁盘上,而memcache则不会 ...
- Memcache的一些学习
Memcache的一些学习 首先,Memcache是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态.数据库驱动 ...
- memcache学习资料
memcached是国外社区网站LiveJournal团队开发,通过缓存数据库查询结果,减少数据库访问次数,从而提高动态web站点性能.官方站点 http://memcached.org/memcac ...
- memcache的学习路线图
memcache学习材料 //memcache自带的github 上的 wiki //席剑飞 Memcache(MC)系列 1~8系列 评注: memcache系统写的最深的一博客,建议一读 ...
- php之memcache学习
php之memcache学习 简介: memcache是一个分布式高速缓存系统. 分布式是说可以部署在多台服务器上,实现集群效果: 高速是因为数据都是维护在内存中的: 特点和使用场景: 1.非持久化存 ...
随机推荐
- git笔记(2)-常见命令的使用(详解待续)
1. 常用命令 (1)git --help 帮助命令,其他的类似 (2)git branch 查看分支及其他(创建分支,查看远程分支名称等) (3)git checkout 切换分支以及其他 (3)g ...
- MySQL 初识别语句,数据库、表、行的增删改查
一.MySQL 开场语句 1.登陆 mysql -u root -p ; #回车然后输入密码 2.退出 eixt | quit #二者选其一 3.查看数据文件路径(配置文件中学习的) show glo ...
- 【Teradata】磁盘碎片整理(ferret工具)
DEFRAGMENTcombines free sectors and moves them to the end of a cylinder.PACKDISKfill (or packs) cyli ...
- vue中父组件调用子组件函数
用法: 子组件上定义ref="refName", 父组件的方法中用 this.$refs.refName.method 去调用子组件方法 详解: 父组件里面调用子组件的函数,父组 ...
- Java面试知识点之数据库篇(一)
前言:数据库的相关知识,在面试中也经常出现,笔者认为非常有必要对此类知识进行相关总结. 1.索引 索引是对数据库表中一列或多列的值进行排序的结构,是帮助数据库高效获取数据的数据结构. 通俗理解:索引就 ...
- Linux之权限详解
如何知道你有什么权限 我能干什么?这是我最关心的问题! 切换到普通用户 [root@luffy-01 ~]# su - pizza [pizza@luffy-01 ~]$ ls /root ls: c ...
- centos7下安装docker(15.7容器跨主机网络---calico)
Calico是一个纯三层的虚拟网络方案,Calico为每个容器分配一个IP,每个host都是router,把不同host的容器连接起来.与vxlan不同的是:calico不对数据包进行封装,不需要NA ...
- 关于CUDA,cuDNN,TF,CUDA驱动版本兼容问题
实际工作当中,经常维护好几个项目的代码,不同项目依赖的TF版本不一致问题.网上找了好多资料,但是每次遇到的问题都不一样,每次都要去查(就是是一样的问题,解决办法也可能会不一样)每次踩坑无数,今天痛定思 ...
- [Python] 个人TIPS
1.查询当前代码路径 import os os.getcwd() 2.尝试大文件读取时,可对pandas显示设置进行调整,使之得到更为全局或者局部的细节显示 pd.options.display.ma ...
- Python中的单例模式——装饰器实现剖析
Python中单例模式的实现方法有多种,但在这些方法中属装饰器版本用的广,因为装饰器是基于面向切面编程思想来实现的,具有很高的解耦性和灵活性. 单例模式定义:具有该模式的类只能生成一个实例对象. 先将 ...