缓存
功能介绍#
缓存插件为平台提供缓存功能,即开发者在需要缓存支持时通过缓存插件引入如redis等缓存数据库并使用它们完成缓存事务。
实现思路#
开发者在开发缓存插件时,仅需继承缓存插件基类并重载get/set函数即可,处理流程如下:
sequenceDiagram
    participant C as 平台核心
    participant B as 缓存插件
    C->>B: 加载插件
    B->>C: 注册监听缓存事件
    rect rgb(191, 223, 255)
    C->>B: 发出设置/获取缓存事件(CACHE_SET/CACHE_GET)
    B->>C: 响应事件并根据自身配置操作缓存,返回结果(成功/失败,获取数据)
    end
缓存使用方法#
示例如下:
from arkid.common import cache #引入平台缓存
cache.set(tenant,key,value,expired) # 参数依次为:租户,缓存KEY, 缓存VALUE, 过期时间
cache.get(tenant,key) #参数依次为:租户,缓存KEY
抽象函数#
基类定义#
        
arkid.core.extension.cache.CacheExtension            (Extension)
        
#
    Source code in arkid/core/extension/cache.py
          class CacheExtension(Extension):
    TYPE = "cache"
    @property
    def type(self):
        return CacheExtension.TYPE
    def load(self):
        super().load()
        self.listen_event(CACHE_GET, self.event_cache_get)
        self.listen_event(CACHE_SET, self.event_cache_set)
    def event_cache_get(self, event, **kwargs):
        try:
            return self.get(
                event.tenant,
                **event.data
            )
        except Exception as err:
            logger.error(err)
    def event_cache_set(self,event,**kwargs):
        try:
            return self.set(
                tenant=event.tenant,
                **event.data
            )
        except Exception as err:
            logger.error(err)
    @abstractmethod
    def get(self, tenant, key: str, **kwargs):
        """读取
        Args:
            tenant:租户
            key: 存储名称
        """
        pass
    @abstractmethod
    def set(self, tenant, key: str, value:any, **kwargs)-> bool:
        """存储
        Args:
            key (str): 存储名称
            tenant (Tenant): 租户
            value:值
        """
        pass