Magento 2:如何创建自己的自定义缓存类型?


10

在Magento 1中,可以通过在您的中声明以下内容来创建自己的缓存类型config.xml

<global>
    <cache>
        <types>
            <custom translate="label,description" module="module">
                <label>Custom Cache</label>
                <description>This is my custom cacge</description>
                <tags>CUSTOM_CACHE_TAG</tags>
            </custom >
        </types>
    </cache>
</global>

这将导致在“ 系统”>“缓存管理”下将新的缓存类型添加到后端,因此,它将添加刷新与CUSTOM_CACHE_TAG缓存标签相关的缓存的功能。

在M2中有可能吗?如何实现?


有关接受的答案的示例实现,请参见:magento.stackexchange.com/questions/150074/…–
RikW

有关接受的答案的示例实现,请参见:magento.stackexchange.com/questions/150074/…–
RikW

Answers:


19

这是用于创建自定义缓存类型的一些基本结构,

创建一个模块,

app/code/Vendor/Cachetype/etc/cache.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Cache/etc/cache.xsd">
    <type name="custom_cache" translate="label,description" instance="Vendor\Cachetype\Model\Cache\Type">
        <label>Custom Cache type</label>
        <description>Custom cache description.</description>
    </type>
</config>

app/code/Vendor/Cachetype/i18n/en_US.csv

"Custom cache description.","Custom cache description."
"cachetype","Cache type"

app/code/Vendor/Cachetype/Model/Cache/Type.php

<?php
namespace Vendor\Cachetype\Model\Cache;

/**
 * System / Cache Management / Cache type "Custom Cache Tag"
 */
class Type extends \Magento\Framework\Cache\Frontend\Decorator\TagScope
{
    /**
     * Cache type code unique among all cache types
     */
    const TYPE_IDENTIFIER = 'custom_cache_tag';

    /**
     * Cache tag used to distinguish the cache type from all other cache
     */
    const CACHE_TAG = 'CUSTOM_CACHE_TAG';

    /**
     * @param \Magento\Framework\App\Cache\Type\FrontendPool $cacheFrontendPool
     */
    public function __construct(\Magento\Framework\App\Cache\Type\FrontendPool $cacheFrontendPool)
    {
        parent::__construct($cacheFrontendPool->get(self::TYPE_IDENTIFIER), self::CACHE_TAG);
    }
}

谢谢。


7
如果您能说出如何利用缓存,那就太好了。我的意思是如何添加,删除,检查缓存项。
Arvind16年

如果有人知道如何存储和获取缓存数据,那就太好了。请
Arshad Hussain


2

想要编辑Rakesh接受的评论,但被拒绝了...。

无论如何,这里有一些修改,以及来自Rakesh的良好答案的其他信息:

需要对cache.xml进行一些修改:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:noNamespaceSchemaLocation="urn:magento:framework:Cache/etc/cache.xsd">
<type name="custom_cache_tag" translate="label,description" instance="Vendor\Cachetype\Model\Cache\Type">
        <label>Custom Cache type</label>
        <description>Custom cache description.</description>
    </type>
 </config>

因此,名称必须与cache_tag匹配。

如何使用它,请看这里:在自定义模块中使用Magento 2自定义缓存

要使用数据(在缓存之后),您必须将其反序列化:

$data = unserialize($this->_cacheType->load($cacheKey));
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.