2012-03-14 38 views
1

说出是否允许用户删除某些数据,但通常它是静态的并且适用于缓存。有没有办法从键中删除这个值,这样你就可以保持所有其他的缓存并摆脱用户想要删除的内容?关键是许多数组的数组。这些数组包含id,用户名,标题等项目的信息,并且如果用户想要删除这些数组,则希望删除其中的一个数组。从存储在memcache密钥中的数组中删除值?

示例代码:

存储东西:

$cachedData = $this->memcache->get($this->key); 
    if($cachedData === false){ 
     $cachedData = array(); 
     $sql = "SELECT id, name FROM table LIMIT 100"; 
     $res = mysql_query($sql); 
     while($rec = mysql_fetch_assoc($res)){ 
      $cachedData[] = $rec; 
     } 
     // cache for 10 minutes 
     $this->memcache->set($this->key, $cachedData, 0, 600); 
    } 

它基本上直接从谷歌的代码示例。

+0

您的意思是“删除一个键值对,但保留其他值”或“从包含多个事物的'值中删除某些内容”? – Amber 2012-03-14 03:41:57

+0

对不起,我是新手。我相信我的意思是一个关键值对。所以一个简单的例子:'SELECT id,name FROM table LIMIT 100',所以你有那些100放入密钥并且想要删除其中的一个。 – qitch 2012-03-14 03:44:46

+0

这一行不是键值对。如果您在某个键的值中存储了100行,则这是所有100个键值对中的一个。键是单个键,并且该值是一组100行。 – Amber 2012-03-14 03:45:37

回答

1

要做到这一点,唯一的方法是将密钥的值读入变量,修改该变量的内容,然后将整个密钥写回memcached。

memcached完全运行在顶级键值层;它并不关心也不理解你把它作为价值。就它而言,你作为一个值放入的“数组数组”就是另一个字符串。

+0

这是我的思考过程。我不知道我是否应该打开另一个问题,但我不知道该怎么做。当我存储到密钥它结束了像数组(2){[0] => {array(2){'id'=>“1”,'name'=>“bob”}} – qitch 2012-03-14 03:48:33

+0

编辑您的问题以显示您用于存储值的代码。 – Amber 2012-03-14 03:49:44

+0

把它放入一个变量并修改它的答案是我看到我应该做的,除非那是坏的,我应该更改用于存储在memcached中的代码?我应该在如何修改它,因为我不知道另一个问题。 – qitch 2012-03-14 04:01:33

0

你似乎正在描述的是memcached的功能。所以我在想,要么我误解了这个问题,或者你没有问你想问什么。

要删除键值对,请使用Memcache::delete。这样做会使所有其他键值对保持不变。