<?php

namespace xmvc\libCache;

/**
* 缓存 - 接口
*/
interface InterfaceCache
{
    /**
     * 构造
     *
     * @param string $groupName 缓存组名称(变量格式), 默认 default, 一个组一个缓存文件
     * @param array $options 配置数组
     * @return boolean
     */
    public function __construct(string $groupName = 'default', array $options = []);
    /**
     * 组名缓存是否存在
     * - 静态调用, 在不加载缓存内容的情况下判断是否存在
     * @param string $groupName 组名称
     * @return boolean
     */
    public static function groupExists(string $groupName): bool;
    /**
     * 加载缓存文件到缓存中
     * @param string $filename 默认缓存$groupName对应位置的文件
     * @return boolean
     */
    public function loadFromFile(string $filename = ''): self;
    /**
     * 保存缓存到文件
     * @param string $filename 默认缓存$groupName对应位置的文件
     * @return boolean
     */
    public function saveToFile(string $filename = ''): self;
    /**
     * 键是否存在
     *
     * @param string $key
     * @return boolean
     */
    public function exists(string $key): bool;
    /**
     * 通过键取值
     *
     * @param string $key
     * @return void
     */
    public function get(string $key): mixed;
    /**
     * 通过键取当初写入缓存的时间
     *
     * @param string $key
     * @return int
     */
    public function getTime(string $key): int;
    /**
     * 通过键取 [值, 写入缓存的时间]
     *
     * @param string $key
     * @return array [值, 写入缓存的时间]
     */
    public function getBoth(string $key): array;
    /**
     * 写缓存
     *
     * @param string $key
     * @param mixed $data
     * @return self
     */
    public function set(string $key, mixed $data): self;
    /**
     * 取当前组下的所有值
     *
     * @return array
     */
    public function getAll(): array;
    /**
     * 删除指定键的值
     *
     * @param string $key
     * @return self
     */
    public function remove(string $key): self;
    /**
     * 删除当前组下所有的值
     *
     * @return void
     */
    public function clear(): self;
    /**
     * 保存改变的值
     *
     * @return void
     */
    public function save(): self;
}
