一直用sql當memcached的key跑的順順的
不過最近在用ci在開發,發現用的active record不知抓什麼來當key
研究了一下,發現有last_query()可取出sql string
不過又看了一下發現是先execute後,才會有的query
而cache當然是要跑之前做,不然就沒有意義了
又serach了一下,發現有_compile_select()
差別當然在有執行跟沒執行,以下是片斷程式碼
有引用tomschlick寫好給ci用的memcached-library
不過每個有用db的程式這樣寫太麻煩了
原本想改寫ci的db driver,看起來有點麻煩,先求有吧
所以先簡單的寫在helper裡,有空再來研究改寫driver
References
Getting CodeIgniter Active Record's current SQL code
不過最近在用ci在開發,發現用的active record不知抓什麼來當key
研究了一下,發現有last_query()可取出sql string
不過又看了一下發現是先execute後,才會有的query
而cache當然是要跑之前做,不然就沒有意義了
又serach了一下,發現有_compile_select()
差別當然在有執行跟沒執行,以下是片斷程式碼
有引用tomschlick寫好給ci用的memcached-library
$key = $this->db->_compile_select();
$this->load->library('Memcached_library','','memcached');
$results = $this->memcached->get($key);
// If the key does not exist it could mean the key was never set or expired
if ($results)
echo 'hit';
else{
echo 'miss';
$results = $this->db->get()->row_array();
$this->memcached->add($key, $results);
}
原本想改寫ci的db driver,看起來有點麻煩,先求有吧
所以先簡單的寫在helper裡,有空再來研究改寫driver
_compile_select());
$ci = & get_instance();
$ci->load->library('Memcached_library','','memcached');
$results = $ci->memcached->get($key);
// If the key does not exist it could mean the key was never set or expired
if ($results) {
$ci->fb->info('[memcache] hit', "info");
}else{
$ci->fb->warn('[memcache] miss', "memcached");
$results = $db->get()->row_array();
$ci->memcached->add($key, $results);
}
$db->_reset_select(); //clear sql query string
return $results;
}
沒有留言:
張貼留言