1

CodeIgniter文档只指定了两种删除缓存的方法。他们是:

$this->cache->delete('cache_item_id') - 用于通过 ID 删除单个缓存

$this->cache->clean() - 用于删除所有缓存

我的网站有静态和动态内容,我只想删除后者的所有缓存。

我正在寻找类似的东西->delete("latest*")会删除“最新视频”、“最新视频有趣”、“最新视频音乐”、“最新文章”等。

4

2 回答 2

2

我想我已经成功了,调用$this->cache->cache_info();将获取所有已保存缓存的多维数组。fetch 数组中的数组键是,cache_item_id所以我可以执行以下操作。

$wildcard = 'latest';
$all_cache = $this->cache->cache_info();
foreach ($all_cache as $cache_id => $cache) :
   if (strpos($cache_id, $wildcard) !== false) :
      $this->cache->delete($cache_id);
   endif;
endforeach;
于 2013-06-07T06:33:34.080 回答
0

有一个助手可以做到这一点,你可以在这里找到它。

缓存是如何创建的

  $path = $CI->config->item('cache_path');
  $cache_path = ($path == '') ? APPPATH.'cache/' : $path;
  .
  .
  .
  $uri =  $CI->config->item('base_url').
    $CI->config->item('index_page').
    $CI->uri->uri_string();
  $cache_path .= md5($uri);

帮手本身

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

if ( ! function_exists('delete_cache'))
{
    function delete_cache($uri_string)
    {
        $CI =& get_instance();
        $path = $CI->config->item('cache_path');
        $cache_path = ($path == '') ? APPPATH.'cache/' : $path;

        $uri =  $CI->config->item('base_url').
            $CI->config->item('index_page').
            $uri_string;

        $cache_path .= md5($uri);

        if (file_exists($cache_path))
        {
            return unlink($cache_path);
        }
        else
        {
            return TRUE;
        }
    }
}

所有学分归于Steven Benner他的博客

用法:

delete_cache('/blog/comments/123');

于 2013-06-06T11:00:36.897 回答