在OpenCart中创建自定义缓存适配器

本文介绍了如何在OpenCart中创建自定义缓存适配器,通过创建一个数据库缓存适配器来提高网站性能。内容包括创建适配器架构,创建适配器文件,以及如何将自定义适配器插入到OpenCart核心框架中。
摘要由CSDN通过智能技术生成

无论您使用的是哪种Web框架,缓存都是一种重要的工具,可以提高网站的整体性能。 您可以选择不同的缓存机制,例如文件,APC,Memcached等。 您可以根据自己的要求进行决定,有时需要多个适配器的组合来证明所需的结果是合理的。

OpenCart的核心中已经包含了两个缓存适配器,这就是您要创建自定义模板时可以遵循的模板。 要实现自定义适配器,您只需要按照约定创建方法并将逻辑包含在每个方法中,就可以了! 作为OpenCart缓存机制的一部分,它将被自动提取。

对于每个缓存适配器,它只是存储和检索更改的数据的基础机制。 我们的自定义数据库缓存适配器也是如此,这就是为什么我们需要创建一个保存缓存数据的自定义架构的原因。

在继续进行并开始创建自定义适配器之前,请确保您已安装了最新版本的OpenCart。

创建适配器架构

这是一个dbcache MySQL表,它将保存我们的缓存数据。 因此,让我们创建它!

CREATE TABLE IF NOT EXISTS `{DB_PREFIX}dbcache` (
  `key` varchar(255) NOT NULL,
  `value` longblob NOT NULL,
  `expire` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

这里要注意的重要一点是数据库前缀。 如果使用它,请确保相应地命名表。 例如,对于数据库前缀oc_ ,您应该创建一个名为oc_dbcache的表。

除此之外,表的结构非常简单,并且仅包含三列-键,值和到期。 key列保存缓存密钥,value列保存关联的值,expire列保存UNIX时间戳。

创建一个适配器文件

您可以在system\library\cache目录下找到OpenCart提供的所有缓存适配器。 我们的自定义适配器也必须到那里,所以让我们创建一个文件system\library\cache\database.php其中包含以下内容。

<?php
namespace Cache;
class Database {
    private static $_db;
    private $expire;
    
    /**
     * Constructor
     *
     * @param timestamp $expire Caching time in seconds
     */
    public function __construct($expire) {
        $this->expire = $expire;
        $this->initDbInstance();
    }

    /**
     * Helper method to create DB instance
     */
    private function initDbInstance() {
        if (is_null(static::$_db)) {
            static::$_db = new \DB(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE, DB_PORT);
        }
    }
    
    /**
     * Fetch the value stored in cache by key
     *
     * @param string $key Cache Key
     *
     * @return mixed Value of cache key if found, boolean false otherwise  
     */
    public function get($key) {
        $query = static::$_db->query("SELECT * FROM `" . DB_PREFIX . "dbcache` WHERE `key` = '" . $key . "' AND `expire` >= '" . time() ."'");
        
        if ($query->num_rows) {
            return unserialize($query->row['value']);
        }
        
        return false;
    }

    /**
     * Set the cache value by key
     *
     * @param string $key    Cache Key
     * @param mixed  $value  Cache value
     */
    public function set($key, $value) {
        $this->delete($key);
        static::$_db->query("INSERT INTO " . DB_PREFIX . "dbcache SET `key` = '" . $key . "', `value` = '" . mysql_escape_string(serialize($value)) . "', `expire` = '" . (time() + $this->expire) . "'");
    }

    /**
     * Delete the value stored in cache by key
     *
     * @param string $key    Cache Key
     */
    public function delete($key) {
        static::$_db->query("DELETE FROM " . DB_PREFIX . "dbcache WHERE `key` = '".$key."'");
    }
}

按照约定, Database类在Cache命名空间下定义。 有两个属性, $_db$expire$_db保存数据库实例,并且$expire设置为在实例化该类时缓存生存期。 将$_db属性声明为静态的原因是它持有的单例对象。

在类的构造函数中,我们将从OpenCart框架传递的缓存时间分配给$expire属性,并调用在同一类中定义的initDbInstance方法,该方法创建并分配数据库实例给$_db如果尚不存在) 。

接下来, get方法用于按键和到期时间获取缓存条目,而set方法用于在数据库中插入新的缓存条目。 另外,我们正在序列化set方法中的缓存数据,以确保其存储正确。 当然,我们需要在实际返回它之前在get方法中对它进行反序列化!

最后,有一个delete方法可以从数据库中删除一个条目。 这里有趣的是,set方法每次都会调用delete方法,以确保我们最终不会创建重复的缓存项!

因此,就我们的自定义缓存适配器文件设置而言就是这样。 在下一节中,我们将看到如何将其插入OpenCart核心框架。

插入我们的自定义缓存适配器

不幸的是,没有允许您插入自定义缓存适配器的后端配置。 因此,就本教程而言,我们将继续并直接影响其在核心中的处理方式。

继续并在您站点的文档根目录下打开index.php

查找以下代码段。

$cache = new Cache('file');

替换为:

$cache = new Cache(database');

因此,正如您所看到的,我们只是更改了在创建新的$cache对象时传递的参数或适配器名称。

以相同的方式,对位于admin目录下的index.php文件执行此操作。 确保前端和后端都使用我们的自定义缓存适配器。

你几乎完成! 继续并访问前端和后端的几页,您应该看到dbcache MySQL表中充满了新记录!

Cache Entries

这样,您就可以继续为其他存储引擎创建一个缓存适配器。 尽管我们已经以简单的方式演示了它,但我认为对于您的下一个定制适配器而言,最重要的是概念!

结论

与往常一样,如果您正在寻找其他OpenCart工具,实用程序,扩展等,以便可以在自己的项目中使用或用于自己的教育,请不要忘记查看我们在市场上提供的产品

今天,我们讨论了如何在OpenCart中创建自定义缓存适配器。 数据库缓存适配器是在演示过程中创建的。 随时使用以下供稿发布您的查询!

翻译自: https://code.tutsplus.com/tutorials/create-a-custom-caching-adapter-in-opencart--cms-26211

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值