文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

php共享缓存Yac怎么使用

2023-07-05 08:52

关注

这篇“php共享缓存Yac怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php共享缓存Yac怎么使用”文章吧。

yac 缓存

Yac 是用于 PHP 的共享和无锁内存用户数据缓存。它可以用来替换 APC 或本地 memcached。

要求

PHP 7 +

Install

$/path/to/phpize$./configure --with-php-config=/path/to/php-config$make && make install

Note

Restrictions

ini 配置

yac.enable = 1yac.keys_memory_size = 4M ; 4M can get 30K key slots, 32M can get 100K key slotsyac.values_memory_size = 64Myac.compress_threshold = -1yac.enable_cli = 0 ; 是否使用cli启用yac,默认为0yac.serializer = php ; yac2.2.0以来,yac使用的特定seralizer json(-- enable-json) 、msgpack(-- enable-msgpack) 或igbinary(-- enable-igbinary)

常量

YAC_VERSIONYAC_MAX_KEY_LEN = 48 ; if your key is longer than this, maybe you can use md5 result as the keyYAC_MAX_VALUE_RAW_LEN = 64MYAC_MAX_VALUE_COMPRESSED_LEN = 1MYAC_SERIALIZER_PHP = 0   ; since yac-2.2.0YAC_SERIALIZER_JSON = 1  ; since yac-2.2.0YAC_SERIALIZER_MSGPACK = 2 ; since yac-2.2.0YAC_SERIALIZER_IGBINARY = 3 ; since yac-2.2.0YAC_SERIALIZER  ; serializer according to yac.serializer, default is YAC_SERIALIZER_PHP

注意 cli 下会出现的问题

如果 cli情况下 一定ini配置开启cli-enable

<?php  use Doraemon\pockets\datebase\ShareCache;//实例化缓存封装类$cache  = new ShareCache('test');//设置缓存$cache->set([1,2,3,5,6]);//获取缓存$a = $cache->get();//备注 1.由于yac的缓存是共享的,所以在多个项目中使用时,需要注意key的唯一性,否则会出现缓存覆盖的情况//备注 2.由于cli在执行后会自动退出,所以在cli中使用时,需要注意缓存的有效期,当再次执行时候换存是拿不到的//例如//例//step 1<?phpuse Doraemon\pockets\datebase\ShareCache;$cache  = new ShareCache('test');//设置缓存$cache->set([1,2,3,5,6]);//php step1.php //执行后会自动退出,缓存失效<?phpuse Doraemon\pockets\datebase\ShareCache; //step 2$cache  = new ShareCache('test');//设置缓存$arr = $cache->get();var_dump($arr);// 空//php step2.php //执行事后上一个进程已经退出,所以缓存失效

方法

Yac::__construct

Yac::__construct([string $prefix = ""])

Yac 的构造函数,您可以指定一个前缀,该前缀将用于在执行设置 / 获取 / 删除时预先添加到任何键

<?php   $yac = new Yac("myproduct_");?>

Yac::set

   Yac::set($key, $value[, $ttl = 0])   Yac::set(array $kvs[, $ttl = 0])

将一个值存储到 Yac 缓存中,键是缓存唯一的,因此使用相同的键存储第二个值将覆盖原始值。

成功时返回 true,错误时返回 false (如无内存,无法获得 cas write right)

<?php$yac = new Yac();$yac->set("foo", "bar");$yac->set(    array(        "dummy" => "foo",        "dummy2" => "foo",        )    );?>

Note:

如 Yac 2.1,如果 cas 竞争失败,可能会失败,您可能需要执行以下操作:

while (!($yac->set("important", "value")));

Yac::get

 Yac::get(array|string $key[, &$cas = NULL])

从缓存中获取存储变量。如果一个数组被传递,那么每个元素都被获取并返回。成功时返回值,错误时返回 false

<?php$yac = new Yac();$yac->set("foo", "bar");$yac->set(    array(        "dummy" => "foo",        "dummy2" => "foo",        )    );$yac->get("dummy");$yac->get(array("dummy", "dummy2"));?>

Yac::delete

Yac::delete(array|string $keys[, $delay=0])

从缓存中删除存储的变量。如果指定了延迟,则该值将在 $delay 秒后删除。

Yac::flush

Yac::flush()

立即使所有现有项目无效。它实际上并没有释放任何资源,它只将所有项目标记为无效。

Yac::info

Yac::info(void)

获取缓存信息

<?php  ....  var_dump($yac->info());  
<?phpnamespace Test\Cacheuse Yac;use RuntimeException;class ShareCache{    public bool $isEnable = true;    public string $key = '';        public function __construct($key)    {        if (!extension_loaded("yac")) {            $this->isEnable = false;            throw new RuntimeException('yac 扩展不存在!');        }        if (!$key) {            throw new RuntimeException('key 不能为空!');        }        $this->key = md5($key);    }        public function get()    {        if ($this->isEnable) {            return (new Yac('db_'))->get($this->key);        }        throw new RuntimeException('yac is not enable ,skip getCache');    }        public function set($var): bool    {        if ($this->isEnable) {            return (new Yac('db_'))->set($this->key, $var, 3600);        }        throw new RuntimeException('yac is not enable ,skip setCache');    }        public function del(): bool    {        if ($this->isEnable) {            return (new Yac('db_'))->delete($this->key);        }        throw new RuntimeException('yac is not enable ,skip delCache');    }        public function info(): array    {        if ($this->isEnable) {            return (new Yac('db_'))->info();        }        throw new RuntimeException('yac is not enable ,skip info');    }        public function flush(): bool    {        if ($this->isEnable) {            return (new Yac)->flush();        }        throw new RuntimeException('yac is not enable ,skip flush');    }}

以上就是关于“php共享缓存Yac怎么使用”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯