我目前正在CakePHP应用程序中使用Apc缓存。我有数千个列表,我想将其缓存为可以独立读取、更新和覆盖的单独对象。然后,我分别缓存listing_ids组。有一些昂贵的基于位置的计算用于计算应加载的listing_ids分组(它是一个地图应用程序),因此需要缓存此listing_ids列表。
列表数据也可以通过仪表板更新和保存。缓存工作得很好,直到我保存特定的列表,此时所有缓存的数据都失效。当我返回到地图并加载一组列表时,这些列表不再缓存。
有关实现的更多细节:
- 我用于listing_ids列表和单个列表数据的缓存配置:
Cache::config('Config1', array(
'engine' => 'Apc',
'duration'=> 10000000,
'probability'=> 100,
'path' => CACHE,
'prefix' => 'cake_',
'lock' => false,
'serialize' => true,
'mask' => 0666,
));
为了在加载地图时初始化各个列表缓存,我只需遍历从数据库返回的列表,缓存每个列表,并在末尾附加其listing_id,如下所示:
Cache::write('Listing-'.$id, $listing, 'Config1');
我已经能够确保正确保存listing_ids组。如前所述,上述行与更新仪表板中的列表时使用的行相同。
我的目标 - 更新缓存中的一个特定列表,同时不触及其余缓存列表。这似乎是一项简单的任务,但我花了几个小时进行调查,但无法找出解决方案。
只需像您已经在做的那样重写特定记录
Cache::write('Listing-'.$id, $listing, 'Config1');