标签:
在PHP中使用memcache
面向过程的使用方式
面向对象的使用方式 这里是面向对象的方法
<?php
$mem = new Memcache; //这个类没有构造方法
$mem->connect("localhost", 11211); //连接服务器,持久连接是pconnect
//$mem->addServer(‘www.cyz.com‘,11221); //可连接多个memcache服务器
//$mem->addServer(‘192.168.11.112‘,11211); //添加服务器时,设置分配数据的算法
$mem->add(‘mystr‘, ‘This is a memcache test!‘, MEMCACHE_COMPRESSED, 3600);
//$mem->add(‘mystr‘, ‘wwwwwww‘, MEMCACHE_COMPRESSED, 3600); //再添加,这个不会生效
//要改变就用set 或者 replace
$mem->set(‘mystr‘, ‘wwwwww‘, false, 60*60);
$mem->add(‘myarr‘,[‘aaa‘,‘bbb‘,‘ccc‘,‘ddd‘]); //默认30天,超过用time()+60*60*24*31
class Person{
var $name = ‘zhangsan‘;
var $age = 10;
}
$mem->add(‘myobj‘,new Person);
$mem->delete(‘mystr‘); //删除了mystr
$mem->flush(); //删除所有
$val = $mem->get(‘mystr‘);
echo $val,‘<br>‘;
print_r($mem->get(‘myarr‘));
echo ‘<br>‘;
var_dump($mem->get(‘myobj‘));
echo ‘<br>‘;
echo $mem->getVersion();
echo ‘<pre>‘;
print_r($mem->getStats());
echo ‘</pre>‘;
$mem->close(); //关闭
分布式memcache存取
memcache有自己的存取hash算法,它会自动分配的比较均匀
1. 数据库读出来的数据(select)使用memcache处理
<?php
header(‘Content-Type:text/html;charset=utf-8‘);
$mem = new Memcache; //这个类没有构造方法
$mem->connect("localhost", 11211); //连接服务器,持久连接是pconnect
/*
* 注意:
* 1. 如果同一个项目安装了两次,key要有前缀. $key = ‘a_goods‘;
* 2. 如果同一条sql语句,在不同页面执行多次,可将sql语句作为下标. $key = $sql
* 3. sql语句有大小写/不对应的问题,就可将sql语句用$key = md5($sql)计算下,如果觉得md5散列值太长,就取子字符串substr(md5($sql),10,8);
*/
$sql = "select * from goods;";
$key = substr(md5($sql),10,8); //形成了一个32位的md5散列值
$data = $mem->get($key); //这个下标要好好处理下
if(!$data){
//做个测试,第一次就有这个,刷新下不进这个,就没有了
echo ‘第一次木有值,我现在在获取值!<br>‘;
$db = new mysqli(‘localhost‘,‘root‘,‘‘,‘estore‘);
$res = $db->query($sql);
$data = [];
while($item = $res->fetch_assoc()){
$data[] = $item; //因为这里用了data,最后也是打印data. So
}
$res->free();
$db->close();
$mem->set($key,$data,MEMCACHE_COMPRESSED,60*60);
}
//echo $key; //查看下key是啥
echo ‘<pre>‘;
print_r($data);
echo ‘</pre>‘;
$mem->close(); //关闭
标签:
原文地址:http://www.cnblogs.com/cyzeric/p/4790129.html