menu MineCraft爱好者
PHP无需Redis实现简单缓存
search more_vert
MineCraft爱好者
MineCraft-我的世界热爱者是我的世界服主资源分享交流站为MC服主提供最新最全的游戏资料Bukkit插件Sponge插件服务端整合包等打造国内最大的Minecraft插件基地和精品资源分享平台
PHP无需Redis实现简单缓存

起因:MC导航网的加载速度实在是慢,后端占用内存还大,于是就打算加上个缓存,不用每次加载都读取数据库了。

本来是想装个Redis来实现缓存的,但是呢,我懒。。于是就改成文件缓存了。

直接上代码

<?php
define('CACHE_DIR', '缓存目录') // 定义缓存目录
/**
* 获取缓存
* @param string $name 缓存名称
* @return string 缓存内容
*/
function cache_get($name){
if (file_exists(CACHE_DIR . $name . '.php')) {
$cache = require(CACHE_DIR . $name . '.php');
$expire = isset($cache['Expire']) ? $cache['Expire'] : 3600;
if (time() - $cache['Time'] < $expire) {
if ($cache['Cache'] == '') {
return false;
} else {
return $cache['Cache'];
}
} else {
return false;
}
} else {
return false;
}
}
/**
* 保存缓存
* @param string $name 缓存名称
* @param string $cache 缓存内容
* @param integer $expire 过期时间 默认3600 单位s
*/
function cache_set($name, $cache, $expire=3600)
{
file_put_contents(CACHE_DIR . $name . '.php', '<?php return array(\'Time\'=>\'' . time() . '\', \'Expire\'=>\' ' . $expire . '\', \'Cache\'=>\'' . $cache . '\');');
}
$cache = cache_get('cache');
if (!$cache) {
// 在这里执行你的代码获取内容并缓存
$content = '简单缓存使用 https://blog.i-coder.top/?p=86';
cache_set('cache', $content, 60 * 60 * 24); // 设置缓存过期时间一天
} else {
$content = $cache;
}
echo $content;

本代码仅适用于跟我一样懒的人。

果然加上缓存后导航网访问快了不少。

本文内容及代码转载自耗子的博客

评论

10条评论

    软件UP
    软件UP 访客
    2020-04-16 13:46

    刚想试试,下面就来一句:慎用本代码,出现任何问题与我无关。

      耗子
      耗子 作者
      2020-04-16 16:16
      @软件UP

      刚想试试,下面就来一句:慎用本代码,出现任何问题与我无关。

      毕竟不想别人出了问题还要来怪我。

    耗子
    耗子 作者
    2020-04-15 07:25

    请慎用本代码,出现任何问题与我无关

    耗子
    耗子 作者
    2020-04-15 07:23

    如果存在编码问题,可以将cache_get函数里return $cache['Cache'];替换为return base64_decode($cache['Cache']);然后把cache_set里file_put_contents前一行加上$cache=base64_encode($cache);

    提莫酱
    提莫酱 访客
    2020-04-14 15:46

    你这样搞不担心跨? 而且安全性还不如Redis

      耗子
      耗子 作者
      2020-04-15 07:17
      @提莫酱

      你这样搞不担心跨? 而且安全性还不如Redis

      鹅鹅鹅鹅,跨了就跨了。而且此代码仅供参考哈哈哈哈哈

        提莫酱
        提莫酱 访客
        2020-04-15 23:34
        @耗子

        鹅鹅鹅鹅,跨了就跨了。而且此代码仅供参考哈哈哈哈哈

        好敷衍呀,我本地试了一下 直接把数据库写爆存

          耗子
          耗子 作者
          2020-04-16 08:54
          @提莫酱

          好敷衍呀,我本地试了一下 直接把数据库写爆存

          敷衍又怎么了,都说了代码仅供参考。你数据库写爆存关缓存什么事。你要说是我缓存低效的缘故呢缓存又是文件存储的,跟数据库扯不上太大关系,最多就是缓存的时候调用一下;你要说是没有成功缓存的话,那就是每次访问页面都会调用数据库,也就是没有缓存情况下,那也不太可能。而且你也不说怎么试的,也没说具体问题出在哪,谁知道是不是缓存的问题。觉得不好用就别用,这里只是介绍一个简单的缓存方式,又没让你们一定要用。

            提莫酱
            提莫酱 访客
            2020-04-16 08:58
            @耗子

            敷衍又怎么了,都说了代码仅供参考。你数据库写爆存关缓存什么事。你要说是我缓存低效的缘故呢缓存又是文件存储的,跟数据库扯不上太大关系,最多就是缓存的时候调用一下;你要说是没有成功缓存的话,那就是每次访问页面都会调用数据库,也就是没有缓存情况下,那也不太可能。而且你也不说怎么试的,也没说具体问题出在哪,谁知道是不是缓存的问题。觉得不好用就别用,这里只是介绍一个简单的缓存方式,又没让你们一定要用。

            斯,

      Erhecy
      Erhecy 访客
      2020-04-15 01:00
      @提莫酱

      你这样搞不担心跨? 而且安全性还不如Redis

      我也这么认为OωO