get_cache_key($key); $time = time(); $select_sql = sprintf("SELECT * FROM initphp_mysqlcache WHERE k = %s LIMIT 1", $this->sql->build_escape($key)); $query = $this->sql->query($select_sql); $result = $this->sql->fetch_assoc($query); if ($result) { $sql = sprintf("UPDATE initphp_mysqlcache set v = %s, dtime = %d, cachetime = %d WHERE k = %s", $this->sql->build_escape(base64_encode(@serialize($value))), $time, (int) $cachetime, $this->sql->build_escape($key) ); } else { $sql = sprintf("INSERT INTO initphp_mysqlcache (k, v, dtime, cachetime) VALUES (%s, %s, %d, %d)", $this->sql->build_escape($key), $this->sql->build_escape(base64_encode(@serialize($value))), $time, (int) $cachetime ); } return $this->sql->query($sql); } /** * MYSQL缓存-获取缓存 * 从数据库中读取缓存数据,如果缓存数据不存在,则返回false * 缓存数据存在,如果过期则删除缓存,返回false,没过期或者永久,返回值 * @param string $key 缓存名 * @param array $value 缓存数据 * @return */ public function get_cache($key) { $key = $this->get_cache_key($key); $select_sql = sprintf("SELECT * FROM initphp_mysqlcache WHERE k = %s LIMIT 1", $this->sql->build_escape($key)); $query = $this->sql->query($select_sql); $result = $this->sql->fetch_assoc($query); if (!$result) return false; if ($result['cachetime'] == 0) return @unserialize(base64_decode($result['v'])); if ((time() > ($result['dtime'] + $result['cachetime']))) { $delete_sql = sprintf("DELETE FROM initphp_mysqlcache WHERE k = %s ", $this->sql->build_escape($key)); $this->sql->query($delete_sql); //缓存过期,则删除缓存 return false; //过期 } return @unserialize(base64_decode($result['v'])); } /** * MYSQL缓存-清除缓存 * @param string $key 缓存名 * @return */ public function clear($key) { $key = $this->get_cache_key($key); $sql = sprintf("DELETE FROM initphp_mysqlcache WHERE k = %s", $this->sql->build_escape($key)); return $this->sql->query($sql); } /** * MYSQL缓存-清除所有缓存 * 一般情况下,请慎用清除所有缓存功能 * @return */ public function clear_all() { $sql = "TRUNCATE TABLE initphp_mysqlcache"; return $this->sql->query($sql); } /** * MYSQL缓存-获取DB handler * DB handler 是根据InitPHP开源框架自带的SQL连接来执行 * @return */ public function set_sql_handler($obj) { $this->sql = $obj; } /** * MYSQL缓存-获取缓存KEY值 * @param string $key 缓存名 * @return string */ private function get_cache_key($key) { return md5(trim($key)); } }