Rumah >pembangunan bahagian belakang >tutorial php > php memecache 缓存分组不解

php memecache 缓存分组不解

WBOY
WBOYasal
2016-06-13 12:58:59797semak imbas

php memecache 缓存分组疑惑
在php memcache缓存里,我只找到 add,delete两种方法添加或删除缓存,没有分组功能

像JAVA版 memecache有分组功能,如我用一个用户日记分组 当我更新了日记,可以删除此日记分组缓存,我的个人日记列表,我的WAP版日记列表也更新

我想有如何功能

add("cacheGroup","cacheName1",$value1);
add("cacheGroup","cacheName2",$value2);
add("cacheGroup","cacheName3",$value3);
deleteGroup("cacheGroup");
然后上面三个缓存都清除




php memecache缓存API如下
Memcache::add ― 添加一个值,如果已经存在,则返回false
Memcache::addServer ― 添加一个可供使用的服务器地址
Memcache::close ― 关闭一个Memcache对象
Memcache::connect ― 创建一个Memcache对象
memcache_debug ― 控制调试功能
Memcache::decrement ― 对保存的某个key中的值进行减法操作
Memcache::delete ― 删除一个key值
Memcache::flush ― 清除所有缓存的数据
Memcache::get ― 获取一个key值
Memcache::getExtendedStats ― 获取进程池中所有进程的运行系统统计
Memcache::getServerStatus ― 获取运行服务器的参数
Memcache::getStats ― 返回服务器的一些运行统计信息
Memcache::getVersion ― 返回运行的Memcache的版本信息
Memcache::increment ― 对保存的某个key中的值进行加法操作
Memcache::pconnect ― 创建一个Memcache的持久连接对象
Memcache::replace ― R对一个已有的key进行覆写操作
Memcache::set ― 添加一个值,如果已经存在,则覆写
Memcache::setCompressThreshold ― 对大于某一大小的数据进行压缩
Memcache::setServerParams ― 在运行时修改服务器的参数 
------解决方案--------------------
add("cacheGroup","cacheName1",$value1);
add("cacheGroup","cacheName2",$value2);
add("cacheGroup","cacheName3",$value3);
deleteGroup("cacheGroup");

这样也就是一个key 控制一数组

<br />
class mem<br />
{<br />
	public $memcache=null;<br />
	public $array=array();<br />
	public function __construct()<br />
	{<br />
		$this->memcache = new Memcache;<br />
		$this->memcache->connect('localhost', 11211) or die ("Could not connect");<br />
	}<br />
	public function add($parent="",$key="",$value="")<br />
	{<br />
		$this->array[$key]=$value;<br />
		$this->memcache->set($parent,$this->array,false,500);<br />
	}<br />
	public function deleteGroup($key=null)<br />
	{<br />
		$this->memcache->delete($key);<br />
	}<br />
	public function get($key=null)<br />
	{<br />
		return $this->memcache->get($key);<br />
	}<br />
}<br />
$mem=new mem();<br />
$mem->add("cacheGroup","cacheName1","1");<br />
$mem->add("cacheGroup","cacheName2","2");<br />
$mem->add("cacheGroup","cacheName3","3");<br />
//$mem->deleteGroup("cacheGroup");<br />
var_Dump($mem->get('cacheGroup'));<br />
<br />


------解决方案--------------------

引用:
1、
你在 setGroupExpire 使用 parent::set($group, $expire); 这个不就是添加一个缓存么?他怎么成了设置缓存时间?


这里其实是用了一个小技巧,来避免使用一个数组(作为一个group)存放内容,如果你的数据过多的话,并且group里元素个数也很多的话,会频繁更新同一个数组的内容,并且不见得就是要读取一个元素时就是要读取全部的数据。

这种机制不是靠MC(memcache的缩写,下同)来控制缓存的过期时间,而是靠自己控制是否缓存过期!

设置这个缓存的内容,就是整个组的过期时间。因为是靠


    public function getGroup($group, $name) {
        // 如果已经过期
        if(parent::get($group)              return null;
        }
        
        return parent::get($group.'_'.$name);
    }

上面的代码来判断是否过期,这样所有这个group里的数据,都有了统一的时间验证标准,只要parent::get($group) 
Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn