Merge branch 'caching_engines'
This commit is contained in:
commit
0e34bab864
@ -204,7 +204,7 @@ class IPBan implements Extension {
|
||||
private function get_active_bans() {
|
||||
global $database;
|
||||
|
||||
$cached = $database->cache_get("bans");
|
||||
$cached = $database->cache->get("bans");
|
||||
if($cached) return $cached;
|
||||
|
||||
$bans = $database->get_all("
|
||||
@ -215,7 +215,7 @@ class IPBan implements Extension {
|
||||
ORDER BY end_timestamp, id
|
||||
");
|
||||
|
||||
$database->cache_set("bans", $bans);
|
||||
$database->cache->set("bans", $bans);
|
||||
|
||||
if($bans) {return $bans;}
|
||||
else {return array();}
|
||||
@ -225,7 +225,7 @@ class IPBan implements Extension {
|
||||
global $database;
|
||||
$sql = "INSERT INTO bans (ip, reason, end_timestamp, banner_id) VALUES (?, ?, ?, ?)";
|
||||
$database->Execute($sql, array($ip, $reason, strtotime($end), $user->id));
|
||||
$database->cache_delete("bans");
|
||||
$database->cache->delete("bans");
|
||||
}
|
||||
// }}}
|
||||
}
|
||||
|
@ -124,13 +124,13 @@ class DatabaseConfig extends BaseConfig {
|
||||
public function DatabaseConfig($database) {
|
||||
$this->database = $database;
|
||||
|
||||
$cached = $database->cache_get("config");
|
||||
$cached = $database->cache->get("config");
|
||||
if($cached) {
|
||||
$this->values = $cached;
|
||||
}
|
||||
else {
|
||||
$this->values = $this->database->db->GetAssoc("SELECT name, value FROM config");
|
||||
$database->cache_set("config", $this->values);
|
||||
$database->cache->set("config", $this->values);
|
||||
}
|
||||
}
|
||||
|
||||
@ -147,7 +147,7 @@ class DatabaseConfig extends BaseConfig {
|
||||
$this->database->Execute("DELETE FROM config WHERE name = ?", array($name));
|
||||
$this->database->Execute("INSERT INTO config VALUES (?, ?)", array($name, $this->values[$name]));
|
||||
}
|
||||
$database->cache_delete("config");
|
||||
$database->cache->delete("config");
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
@ -49,7 +49,7 @@ class ImgQuerylet {
|
||||
}
|
||||
}
|
||||
// }}}
|
||||
// {{{ dbengines
|
||||
// {{{ db engines
|
||||
class DBEngine {
|
||||
var $name = null;
|
||||
var $auto_increment = null;
|
||||
@ -71,7 +71,59 @@ class PostgreSQL extends DBEngine {
|
||||
function init($db) {
|
||||
}
|
||||
}
|
||||
//}}}
|
||||
// }}}
|
||||
// {{{ cache engines
|
||||
interface CacheEngine {
|
||||
public function get($key);
|
||||
public function set($key, $val, $time=0);
|
||||
public function delete($key);
|
||||
|
||||
public function get_hits();
|
||||
public function get_misses();
|
||||
}
|
||||
class NoCache implements CacheEngine {
|
||||
public function get($key) {return false;}
|
||||
public function set($key, $val, $time=0) {}
|
||||
public function delete($key) {}
|
||||
|
||||
public function get_hits() {return 0;}
|
||||
public function get_misses() {return 0;}
|
||||
}
|
||||
class MemCache implements CacheEngine {
|
||||
var $hits=0, $misses=0;
|
||||
|
||||
public function __construct($args) {
|
||||
$this->memcache = new Memcache;
|
||||
$this->memcache->pconnect('localhost', 11211) or ($this->use_memcache = false);
|
||||
}
|
||||
|
||||
public function get($key) {
|
||||
assert(!is_null($key));
|
||||
$val = $this->memcache->get($key);
|
||||
if($val) {
|
||||
$this->hits++;
|
||||
return $val;
|
||||
}
|
||||
else {
|
||||
$this->misses++;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public function set($key, $val, $time=0) {
|
||||
assert(!is_null($key));
|
||||
$this->memcache->set($key, $val, false, $time);
|
||||
}
|
||||
|
||||
public function delete($key) {
|
||||
assert(!is_null($key));
|
||||
$this->memcache->delete($key);
|
||||
}
|
||||
|
||||
public function get_hits() {return $this->hits;}
|
||||
public function get_misses() {return $this->misses;}
|
||||
}
|
||||
// }}}
|
||||
|
||||
/*
|
||||
* A class for controlled database access
|
||||
@ -79,8 +131,8 @@ class PostgreSQL extends DBEngine {
|
||||
class Database {
|
||||
var $db;
|
||||
var $extensions;
|
||||
var $cache_hits = 0, $cache_misses = 0;
|
||||
var $engine = null;
|
||||
var $cache = null;
|
||||
|
||||
/*
|
||||
* Create a new database object using connection info
|
||||
@ -91,7 +143,18 @@ class Database {
|
||||
require_once "config.php";
|
||||
$this->engine = new MySQL();
|
||||
$this->db = @NewADOConnection($database_dsn);
|
||||
$this->use_memcache = isset($memcache);
|
||||
|
||||
if(isset($cache)) {
|
||||
$matches = array();
|
||||
preg_match("#(memcache)://(.*)#", $cache, $matches);
|
||||
if($matches[1] == "memcache") {
|
||||
$this->cache = new MemCache($matches[2]);
|
||||
}
|
||||
}
|
||||
else {
|
||||
$this->cache = new NoCache();
|
||||
}
|
||||
|
||||
if($this->db) {
|
||||
$this->db->SetFetchMode(ADODB_FETCH_ASSOC);
|
||||
$this->engine->init($this->db);
|
||||
@ -110,10 +173,6 @@ class Database {
|
||||
";
|
||||
exit;
|
||||
}
|
||||
if($this->use_memcache) {
|
||||
$this->memcache = new Memcache;
|
||||
$this->memcache->pconnect('localhost', 11211) or ($this->use_memcache = false);
|
||||
}
|
||||
}
|
||||
else {
|
||||
header("Location: install.php");
|
||||
@ -121,36 +180,6 @@ class Database {
|
||||
}
|
||||
}
|
||||
|
||||
// memcache {{{
|
||||
public function cache_get($key) {
|
||||
assert(!is_null($key));
|
||||
if($this->use_memcache) {
|
||||
$val = $this->memcache->get($key);
|
||||
if($val) {
|
||||
$this->cache_hits++;
|
||||
return $val;
|
||||
}
|
||||
else {
|
||||
$this->cache_misses++;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public function cache_set($key, $val, $time=0) {
|
||||
assert(!is_null($key));
|
||||
if($this->use_memcache) {
|
||||
$this->memcache->set($key, $val, false, $time);
|
||||
}
|
||||
}
|
||||
|
||||
public function cache_delete($key) {
|
||||
assert(!is_null($key));
|
||||
if($this->use_memcache) {
|
||||
$this->memcache->delete($key);
|
||||
}
|
||||
}
|
||||
// }}}
|
||||
// safety wrapping {{{
|
||||
public function execute($query, $args=array()) {
|
||||
$result = $this->db->Execute($query, $args);
|
||||
|
@ -144,7 +144,7 @@ class Image {
|
||||
}
|
||||
|
||||
public function get_tag_array() {
|
||||
$cached = $this->database->cache_get("image-{$this->id}-tags");
|
||||
$cached = $this->database->cache->get("image-{$this->id}-tags");
|
||||
if($cached) return $cached;
|
||||
|
||||
if(!isset($this->tag_array)) {
|
||||
@ -156,7 +156,7 @@ class Image {
|
||||
}
|
||||
}
|
||||
|
||||
$this->database->cache_set("image-{$this->id}-tags", $this->tag_array);
|
||||
$this->database->cache->set("image-{$this->id}-tags", $this->tag_array);
|
||||
return $this->tag_array;
|
||||
}
|
||||
|
||||
@ -267,7 +267,7 @@ class Image {
|
||||
array($tag));
|
||||
}
|
||||
|
||||
$this->database->cache_delete("image-{$this->id}-tags");
|
||||
$this->database->cache->delete("image-{$this->id}-tags");
|
||||
}
|
||||
|
||||
|
||||
@ -528,8 +528,8 @@ function get_debug_info() {
|
||||
$i_files = count(get_included_files());
|
||||
global $_execs;
|
||||
global $database;
|
||||
$hits = $database->cache_hits;
|
||||
$miss = $database->cache_misses;
|
||||
$hits = $database->cache->get_hits();
|
||||
$miss = $database->cache->get_misses();
|
||||
$debug = "<br>Took $i_utime + $i_stime seconds and {$i_mem}MB of RAM";
|
||||
$debug .= "; Used $i_files files and $_execs queries";
|
||||
$debug .= "; Sent $_event_count events";
|
||||
|
@ -79,7 +79,7 @@ class GenericPage {
|
||||
header("Cache-control: no-cache");
|
||||
usort($this->blocks, "blockcmp");
|
||||
$layout = new Layout();
|
||||
$layout->display_page($this);
|
||||
$layout->display_page($context);
|
||||
break;
|
||||
case "data":
|
||||
if(!is_null($this->filename)) {
|
||||
|
@ -42,8 +42,10 @@ Tips
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
class Layout {
|
||||
public function display_page($page) {
|
||||
global $config;
|
||||
public function display_page($context) {
|
||||
$page = $context->page;
|
||||
$config = $context->config;
|
||||
|
||||
$theme_name = $config->get_string('theme');
|
||||
$base_href = $config->get_string('base_href');
|
||||
$data_href = get_base_href();
|
||||
|
@ -1,8 +1,10 @@
|
||||
<?php
|
||||
|
||||
class Layout {
|
||||
function display_page($page) {
|
||||
global $config;
|
||||
function display_page($context) {
|
||||
$page = $context->page;
|
||||
$config = $context->config;
|
||||
|
||||
$theme_name = $config->get_string('theme', 'default');
|
||||
$data_href = get_base_href();
|
||||
$contact_link = $config->get_string('contact_link');
|
||||
|
@ -1,8 +1,10 @@
|
||||
<?php
|
||||
|
||||
class Layout {
|
||||
function display_page($page) {
|
||||
global $config;
|
||||
function display_page($context) {
|
||||
$page = $context->page;
|
||||
$config = $context->config;
|
||||
|
||||
$theme_name = $config->get_string('theme', 'default');
|
||||
$data_href = get_base_href();
|
||||
$contact_link = $config->get_string('contact_link');
|
||||
|
@ -1,8 +1,10 @@
|
||||
<?php
|
||||
|
||||
class Layout {
|
||||
function display_page($page) {
|
||||
global $config;
|
||||
function display_page($context) {
|
||||
$page = $context->page;
|
||||
$config = $context->config;
|
||||
|
||||
$theme_name = $config->get_string('theme', 'default');
|
||||
$data_href = get_base_href();
|
||||
$contact_link = $config->get_string('contact_link');
|
||||
|
Loading…
x
Reference in New Issue
Block a user