diff --git a/MD_STD_CACHE.php b/MD_STD_CACHE.php new file mode 100644 index 0000000..8e426a9 --- /dev/null +++ b/MD_STD_CACHE.php @@ -0,0 +1,64 @@ + + */ +declare(strict_types = 1); + +/** + * Provides caching functions. + */ +final class MD_STD_CACHE { + + /** @var string */ + public static string $redis_host = '127.0.0.1'; + /** @var string */ + public static int $redis_port = 6379; + + /** + * Caches and serves a page through redis. Should be called at the start + * of the script generating a page. + * + * @param string $redisKey Key to cache by in redis. + * @param integer $expiry Expiration time in seconds. + * + * @return boolean + */ + public static function serve_page_through_redis_cache(string $redisKey, int $expiry = 3600):bool { + + $redis = new Redis(); + $redis->connect(self::$redis_host, self::$redis_port, 1, NULL, 0, 0, ['auth' => [MD_CONF::$redis_pw]]); + if ($redis->ping() !== false) { + + ob_start(); + + if (($redisResult = $redis->get($redisKey))) { + echo $redisResult; + $redis->close(); + return true; + } + else { + + register_shutdown_function(function(string $redisKey, int $expiry = 3600) :void { + + $outputT = MD_STD::minimizeHTMLString(MD_STD::ob_get_clean()); + echo $outputT; + + $redis = new Redis(); + $redis->connect(self::$redis_host, self::$redis_port, 1, NULL, 0, 0, ['auth' => [MD_CONF::$redis_pw]]); + $redis->set($redisKey, $outputT); + $redis->expire($redisKey, $expiry); + $redis->close(); + }, $redisKey); + + } + + $redis->close(); + } + $redis->close(); + + return false; + + } +}