海洋cms设置Redis缓存教程,redis错误/白屏无法访问解决办法

admin 2017-2-27 442

如果出现白屏 500错误,请检查Redis服务是否成功运行。

=====强制关闭Redis办法=====
修改data/config.cache.inc.php文件:
$cfg_cachetype = 'redis';
修改为:
$cfg_cachetype = 'file';

=====Redis无效的常见错误原因=====
【1】防火墙阻拦
【2】SELinux导致启动失败
【3】windows系统下没有加入系统服务
【4】Linux没有开机启动

=====检测Redis是否成功运行的办法=====
在网站根目录下新建redis.php文件,代码如下:
<?php
   //连接本地的 Redis 服务
   $redis = new Redis();
   $redis->connect('127.0.0.1', 6379);
   echo "Connection to server sucessfully";
   //设置 redis 字符串数据
   $redis->set("tutorial-name", "Redis tutorial");
   // 获取存储的数据并输出
   echo "Stored string in redis:: " . $redis->get("tutorial-name");
?>
用浏览器访问 http://你的网址/redis.php,应该出现如下结果:
Connection to server sucessfully
Stored string in redis:: Redis tutorial
如果运行页面报错,或者没有出现上面的结果,则证明Redis没有成功运行!

=====宝塔面板启用Redis方法=====
1. 软件管理 - 安装Redis
2. 安全 - 放行Redis的端口:6379
3. 软件管理 - php设置 - 安装Redis扩展



=====老版本海洋cms增加Redis缓存支持=====
注意:海洋cms v8.2版本开始,已经自带Redis缓存功能,无需单独添加。
编辑 /include/common.func.php 文件第1514行,将
function setCache($p_cacheName,$sql="",$arr=""){
    global $dsql,$cfg_iscache,$cfg_cachetime,$cfg_cachemark;
    $cacheFile=sea_ROOT.'/data/cache/'.$cfg_cachemark.$p_cacheName.'.inc';
    $mintime = time() - $cfg_cachetime*60;
    if(!file_exists($cacheFile) || ( file_exists($cacheFile) && ($mintime > filemtime($cacheFile)))){
        if (!empty($sql)){
        $dsql->SetQuery($sql);
        $dsql->Execute('hw');
        $cacher=array();
            while($cache=$dsql->GetObject('hw'))
            {
            $cacher[]=$cache;
            }
        }else{
            $cacher=$arr;
        }
        if (!empty($p_cacheName)){
            $fp = fopen($cacheFile,'w') or die("Write Cache File Error! ");
            fwrite($fp,serialize($cacher));
            fclose($fp);
        }
        unset($cacher);
    }
}

function getCache($p_cacheName){
    global $cfg_cachemark;
    $cacheFile=sea_ROOT.'/data/cache/'.$cfg_cachemark.$p_cacheName.'.inc';
    if(file_exists($cacheFile)){
        return unserialize(file_get_contents($cacheFile));
    }else{
        return array();
    }
}
修改为:
function setCache($p_cacheName,$sql="",$arr=""){
        global $dsql,$cfg_iscache,$cfg_cachetime,$cfg_cachemark;
        $p_cacheName=$cfg_cachemark.$p_cacheName;
        $redis = new redis();  
        $redis->connect('127.0.0.1', 6379);  
        $ttl=$redis->TTL($p_cacheName);
        if ($ttl < 1 ){
                if (!empty($sql)){
                        $dsql->SetQuery($sql);
                        $dsql->Execute('hw');
                        $cacher=array();
                  while($cache=$dsql->GetObject('hw'))
                        {
                        $cacher[]=$cache;
                        }
                }else{
                        $cacher=$arr;
                }
                if (!empty($p_cacheName)){
                        $redis->SETEX($p_cacheName,$cfg_cachetime*60,serialize($cacher));
                }
                unset($cacher);
        }
}

function getCache($p_cacheName){
        global $cfg_cachemark;
        $p_cacheName=$cfg_cachemark.$p_cacheName;
        $redis = new redis();  
        $redis->connect('127.0.0.1', 6379);  
        $ttl=$redis->TTL($p_cacheName);
        if ($ttl > 0 ){
                return unserialize($redis->GET($p_cacheName));
        }else{
                return array();
        }
}
编辑 /include/common.func.php 文件第2403行,将
function chkFileCache($cacheName)
{
    global $cfg_cachetime,$cfg_cachemark;
    $cacheFile=sea_ROOT.'/data/cache/'.$cfg_cachemark.$cacheName.'.inc';
    $mintime = time() - $cfg_cachetime*60;
    if(!file_exists($cacheFile) || ( file_exists($cacheFile) && ($mintime > filemtime($cacheFile)))){
        return false;
    }else{
        return true;
    }
}

function setFileCache($cacheName,$cacheValue)
{
    global $cfg_cachemark;
    $cacheFile=sea_ROOT.'/data/cache/'.$cfg_cachemark.$cacheName.'.inc';
    if($cacheName){
        $fp = fopen($cacheFile,'w') or dir("Write Cache File Error! ");
        fwrite($fp,$cacheValue);
        fclose($fp);
    }
}

function getFileCache($cacheName)
{
    global $cfg_cachemark;
    $cacheFile=sea_ROOT.'/data/cache/'.$cfg_cachemark.$cacheName.'.inc';
    if(file_exists($cacheFile)){
        @$fp = fopen($cacheFile,'r');
        @$cacheValue = fread($fp,filesize($cacheFile));
        @fclose($fp);
        return $cacheValue;
    }else{
        return "";
    }
}
修改为:
function chkFileCache($cacheName)
{
        global $cfg_cachemark;
        $cacheName=$cfg_cachemark.$cacheName;
        $redis = new redis();  
        $redis->connect('127.0.0.1', 6379);  
        $ttl=$redis->TTL($cacheName);
        if ($ttl > 0){
                return true;
        }else{
                return false;
        }
}

function setFileCache($cacheName,$cacheValue)
{
        global $cfg_cachetime,$cfg_cachemark;
        $cacheName=$cfg_cachemark.$cacheName;
        $redis = new redis();  
        $redis->connect('127.0.0.1', 6379);  
        if ($redis->SETEX($cacheName,$cfg_cachetime*60,$cacheValue)){
                return true;
        }else{
                return false;
        }
}

function getFileCache($cacheName)
{
        global $cfg_cachemark;
        $cacheName=$cfg_cachemark.$cacheName;
        $redis = new redis();  
        $redis->connect('127.0.0.1', 6379);  
        return $redis->GET($cacheName);
}




最新回复 (14)
  • 蓝色枫 2017-3-4
    0 引用 2
    这个要顶,文件缓存的确是不够用的
  • 2dan 2017-3-7
    0 引用 3
    顶!如果后台能增加个使用Redis缓存的选项就好了
  • 2610278 2017-3-19
    0 引用 4
    这段代码。放程序哪里。那个位置。。redis配置好了
  • 2610278 2017-4-14
    0 引用 5
    你这缓存文件是要放那个目录。不能告知下?
  • 075016 2017-6-2
    0 引用 6
    收藏 好东西啊!!!
  • airjsy 2017-11-1
    0 引用 7
    没有下文了,不作解答很郁闷!
  • 游客 2017-11-7
    0 引用 8
    这段代码。放程序哪里。那个位置
  • 海洋cms号 2017-12-24
    0 引用 9
    这段代码。放程序哪里
  • 人人看片 2017-12-24
    0 引用 10
    感谢管理员大大分享,学习了
  • 0 引用 11
    改了后台不能进,网站都打不开了???
  • oy86866 6月前
    0 引用 12
    同样,根本用不了。。。。admin 你可以测试下。。
  • zengrong 4月前
    0 引用 13
    打开网站空白,无任何显示
  • 0 引用 14
    Quotezengrong 发表于 2019-1-7 01:34
    打开网站空白,无任何显示


    我们一样,缓存都更新不了
  • 0 引用 15
    好东西 感谢老大!!!!
返回
发新帖