一直用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; }
沒有留言:
張貼留言