首页 » Web前端 » phpyac技巧_PHP的另一个高效缓存扩展Yac

phpyac技巧_PHP的另一个高效缓存扩展Yac

访客 2024-10-25 0

扫一扫用手机浏览

文章目录 [+]

Yac 是一个无锁共享缓存系统,由于无锁,以是它的效率非常高。
听说 Apc 的效率是 Memcached 的一倍以上,而 Yac 比 Apc 更快。
这便是它最大的特点。

相对付 Memcached 或者 Redis 来说,Yac 更加轻量级,我们也不须要在做事器中再安装别的什么软件,只须要安装这个扩展就可以利用。
对付小型系统特殊是便是大略的进行数据缓存的系统来说,我们不须要繁芜的数据类型,只用这种程序措辞的扩展就能让我们的开拓更为方便快捷。

phpyac技巧_PHP的另一个高效缓存扩展Yac

安装的办法也非常大略,一样的在 PECL 下载安装包后进行扩展安装即可。

phpyac技巧_PHP的另一个高效缓存扩展Yac
(图片来自网络侵删)
基本操作

对付缓存干系的操作,无外乎便是添加、修正、删除缓存。
不像外部缓存系统,在保存数组或工具时,PHP 扩展类的缓存都能直接保存这些数据类型,而不用序列化为字符串或者转化为 JSON 字符串,这是 Apc 和 Yac 的上风之一。

添加、获取缓存

$yac=newYac();$yac->add('a','valuea');$yac->add('b',[1,2,3,4]);$obj=newstdClass;$obj->v='objv';$yac->add('obj',$obj);echo$yac->get('a'),PHP_EOL;//valueaecho$yac->a,PHP_EOL;//valueaprint_r($yac->get('b'));//Array//(//[0]=>1//[1]=>2//[2]=>3//[3]=>4//)var_dump($yac->get('obj'));//object(stdClass)#3(1){//["v"]=>//string(5)"objv"//}

非常大略的操作,我们只须要实例化一个 Yac 类,就可以通过 add() 方法及 get() 方法添加和获取缓存内容。

Yac 扩展还重写了 __set() 和 __get() 魔术方法,以是我们可以直接通过操作变量的办法来操作缓存。

接下来,我们可以通过 info() 函数查看当前缓存的状态信息。

print_r($yac->info());//Array//(//[memory_size]=>71303168//[slots_memory_size]=>4194304//[values_memory_size]=>67108864//[segment_size]=>4194304//[segment_num]=>16//[miss]=>0//[hits]=>4//[fails]=>0//[kicks]=>0//[recycles]=>0//[slots_size]=>32768//[slots_used]=>3//)设置缓存

$yac->set('a','newvaluea!');echo$yac->a,PHP_EOL;//newvaluea!$yac->a='bestnewvaluea!';echo$yac->a,PHP_EOL;//bestnewvaluea!

set() 函数的浸染便是如果当前缓存 key 存在,就修正这个缓存的内容,如果不存在,就创建一个缓存。

删除缓存

$yac->delete('a');echo$yac->a,PHP_EOL;//$yac->flush();print_r($yac->info());//Array//(//[memory_size]=>71303168//[slots_memory_size]=>4194304//[values_memory_size]=>67108864//[segment_size]=>4194304//[segment_num]=>16//[miss]=>1//[hits]=>6//[fails]=>0//[kicks]=>0//[recycles]=>0//[slots_size]=>32768//[slots_used]=>0//)

对付单个缓存的删除,我们可以直策应用 delete() 函数来删除这个缓存的内容。
如果要清空全体缓存空间,就可以直策应用 flush() 来清空全体缓存空间。

别名空间

上面我们提到了 缓存空间 这个东西。
实在也便是在实例化 Yac 的时候可以给默认的 Yac 类布局函数通报一个别名配置。
这样,不同的 Yac 实例就相称于放在了不同的命名空间中,相同的 Key 的缓存在不同的空间中就不会相互影响。

$yacFirst=newYac();$yacFirst->a='firsta!';;$yacSecond=newYac();$yacSecond->a='seconda!';echo$yacFirst->a,PHP_EOL;//seconda!echo$yacSecond->a,PHP_EOL;//seconda!

这段代码我们都是利用的默认的实例化 Yac 工具,虽说是分开实例化的,但它们保存的空间是一样的,以是相同的 a 变量会相互覆盖。

$yacFirst=newYac('first');$yacFirst->a='firsta!';;$yacSecond=newYac('second');$yacSecond->a='seconda!';echo$yacFirst->a,PHP_EOL;//firsta!echo$yacSecond->a,PHP_EOL;//seconda!

当我们利用不同的实例化参数之后,相同的 a 就不会相互影响,它们被存储在了不同的空间中。
或者说,Yac 会自动给这些 Key 增加一个 prefix 。

缓存时效

末了,缓存系统都会针对缓存内容有时效限定,如果指定了过期韶光,缓存内容就会在指定的韶光之后过期。

$yac->add('ttl','10s',10);$yac->set('ttl2','20s',20);echo$yac->get('ttl'),PHP_EOL;//10secho$yac->ttl2,PHP_EOL;//20ssleep(10);echo$yac->get('ttl'),PHP_EOL;//echo$yac->ttl2,PHP_EOL;//20s

上述代码中的 ttl 缓存只设置了 10 秒的过期韶光,以是在 sleep() 10 秒后,输出 ttl 就没有任何内容了。

须要把稳的是,对付韶光的设置,如果不设置的话便是长久有效,而且不能用 __set() 方法设置过期韶光,只能利用 set() 或者 add() 函数来设置过期韶光。

总结

怎么样,Yac 扩展是不是和我们的 Apc 一样方便好用,当然,更紧张的是它的性能以及适用场景。
对付小系统,特殊是机器配置不是那么强的操作环境中,这种扩展型的缓存系统能够让我们的开拓更加的快捷方便。
关于无锁共享的观点我们可以参考下方参考文档中第二个链接,也便是鸟哥的文章中有详细的解释。

测试代码:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202006/source/PHP%E7%9A%84%E5%8F%A6%E4%B8%80%E4%B8%AA%E9%AB%98%E6%95%88%E7%BC%93%E5%AD%98%E6%89%A9%E5%B1%95%EF%BC%9AYac.php

参考文档:

https://www.php.net/manual/zh/book.yac.php

https://www.laruence.com/2013/03/18/2846.html

https://www.cnblogs.com/sunsky303/p/6554888.html

标签:

相关文章

QQ伪装黑客代码大全技术与风险警示

网络安全问题日益凸显。QQ作为一种流行的社交工具,成为了黑客攻击的主要目标之一。本文将针对QQ伪装黑客代码大全进行深入剖析,揭示其...

Web前端 2025-03-02 阅读1 评论0