memcached - 如何优雅的使用memcache和php配合呢?
求大牛给点例子哦
回复内容:
最近在研究memcache和php配合小弟不知道该如何使用呢,是先要把整张表的数据全部查出来,缓存的内存上,然后再做类似sql的查询么?就是直接查内存而不是查表这样么?
求大牛给点例子哦
memcache 是 key => value 的方式,一个key 对应 一个 value 。
memcache一般多用于存储大型能开销的数据,比如SQL结果集。将其序列化或者json_encode后存入memcache中,并命名为一个唯一的key值。下次则直接从memcached中获取该值。
注:经过测试serialize 后的string 存入memcached 比 json_encode后的string要快很多。 若直接将array存入memcached实际上memcached底层有将array进行 serialize(array); (我这里一直记错!!)
如下实例: 有数据table threads. 我们将其结果缓存起来。
// 首先进行查询memcached中threads_list是否为非空集合
$list = json_decode($memcached->get("threads_list"));
if(!$list){
$query = $db->query("SELECT * FROM `threads` ");
while($value = $db->fetch_array($query)){
$list[] = $value;
}
//进行memcached插入
//$memcached->set(键值,内容,失效时间);
$memcached->set("threads_list",json_encode($list),86400);
}
print_r($list);
以上操作将有效的减少mysql查询的开销。 当然memcached并非仅局限于sql的存储。具体还需要看业务上的需求。
不过强烈推荐redis!!!!!
原理:将你 SQL 查询的结果缓存在 memcache 里,下次执行同样的查询就直接从缓存中读取,而不用查询数据库,缓解数据库压力。
connect('localhost','11211');
//准备SQL语句
$sql='SELECT * FROM user';
//设置一个键名
$key=md5($sql);
$data=$mem->get($key);
//第二次之后的查询
if(!$data){
try{
//链接mysql
$dsn="mysql:host=localhost;dbname=bbs";
$pdo=new PDO($dsn,'root','root');
//设置字符集
$pdo->exec('set names utf8');
$stmt=$pdo->prepare($sql);
$stmt->execute();
$data=$stmt->fetchAll();
//把数据存储到memcache中(第一次查询)
$mem->add($key,$data);
}catch(PDOException $e){
echo $e->getMessage();
}
}
$mem->close();
print_r($data);
?>
刚录好的视频,讲Memcache的
近距离探索memcache
同样的查询条件,可能能来不一样的结果,这样缓存更新问题如何解决?
先查和后查看你怎么写代码。 如果你准备把整个表或者库都写进Memcached的呢,那就的把整个业务流程都数据, 也就是说每次查询都是查询Memcached,相当于是把Memcached当数据库运用。 如果只是简单的操作,http://segmentfault.com/q/1010000000257857#a-1020000000257889 已经说了。 其实Memcached这种key、value的存储,看你key怎么生成了,如果单机使用的话,用条件来生成就可以了,集群的话就看你怎么分key了。
推荐阅读
-
memcached - 如何优雅的使用memcache和php配合呢?
-
php中memcached的使用,注:非memcache,该如何处理
-
Ubuntu11.04停Memcached和php5-memcache的安装与基本使用
-
php中memcached的使用,注:非memcache,该如何处理
-
memcached - php在pageCage、memCache、RedisCache和SSDBCache缓存的使用一般来讲对应哪些应用场景的?
-
Ubuntu11.04停Memcached和php5-memcache的安装与基本使用
-
memcached - php在pageCage、memCache、RedisCache和SSDBCache缓存的使用一般来讲对应哪些应用场景的?