当前位置: 首页 > news >正文

找人做网站多少钱广东seo推广方案

找人做网站多少钱,广东seo推广方案,买空间服务器做网站怎么弄,建设公司网站价格APCu 极简概括: PHP 的开源内存缓存扩展,类比Redis,但是一般都用Redis,所以APCu用的很少。官方文档:https://www.php.net/manual/zh/apcu.configuration.php解决问题:类比Redis做缓存组件,提升…

APCu

  • 极简概括: PHP 的开源内存缓存扩展,类比Redis,但是一般都用Redis,所以APCu用的很少。
  • 官方文档:https://www.php.net/manual/zh/apcu.configuration.php
  • 解决问题:类比Redis做缓存组件,提升性能,同步数据使用。
  • 适用场景:轻量级的缓存,适合写少读多的场景。缺少原子性、缺少多条指令无间隙执行,不建议高并发时写多读多,写多读少的场景下使用。
  • 优点:
    • 比Redis快一百多倍。
    • 运维成本低:利用PHP扩展的方式实现,无需与缓存组件进行网络通信。
    • 简单易用:APCu 提供了简单而有效的接口,容易上手。
    • 跨文件跨进程:A文件set值,B文件get值,是可以获取到值的,若做不到和变量没区别。
  • 缺点:
    • 不支持远程独立部署。
    • 类型没有Redis的多,适用场景仅限于缓存。
    • 数据无法做到常驻内存,重启或出故障,数据丢了就没了,没有像Redis的RDB或AOF持久化机制。
    • 无法保证多个操作的原子性。
    • 可能存在超卖的问题。
    • 获取确定已经存在的值可能会遇到false,获取结果不稳定。
  • 注意:从PHP 8.0.0开始,不再支持apcu bc。

是否能像Redis+Lua一样保证多个操作原子性?

不能。
Redis是单线程的,意味着单位时间内只执行一个任务,Redis让并发过来的任务强制串行执行。有Lua的加持,保证多条指令无间隙执行。
APCu没有这个机制,让操作要么都成功,要么都失败,要实现这一步需要手动写逻辑。

高并发下会有超卖的一致性问题吗?

还好APCu有乐观锁机制,可以防止超卖问题。

但APCu 没有互斥的锁机制,互斥意味着并发过来的请求,通过独占该资源,让任务串行执行。

由于PHP+Nginx默认是多进程机制,(也可以调整为多线程,用得少)
假设一个场景:
获取到值,自增。进程P0获取到A的值为5的时候,想要自增到6,可能其它进程已经自增到8了。此时两步操作存在间隙,又没有机制对此数据加锁防止被其它进程更改,所以可能P0执行自增时会加到9,这是个概率问题,因此乐观锁的机制就显得非常重要。

安装

前提是安装好了PHP,默认在/usr/local/php下,并配置有/usr/local/php/bin目录的环境变量
cd /test
wget https://pecl.php.net/get/apcu-5.1.23.tgz
tar zxf apcu-5.1.23.tgz
phpize
./configure
make
make install

相关配置(php.ini)

配置名值类型默认值说明
apc.enabledint1设置为0以禁用APC。这在APC被静态编译到PHP中时非常有用,因为没有其他方法可以禁用它。
apc.shm_segmentsint1为编译器缓存分配的共享内存段的数量。如果APC共享内存不足,但apc.shm_size设置为系统允许的最高值,提高该值可能会防止APC耗尽其内存。
apc.shm_sizeint32M每个共享内存段的大小
apc.entries_hintint4096是用于设置APCu缓存的条目预期数量
apc.ttlint0指定缓存中的条目在过期之前可以存在多长时间,单位为秒。默认为0,表示永不过期
apc.gc_ttlint3600指定过期缓存条目被清理的时间间隔,单位为秒
apc.mmap_file_maskstringnull是用于配置在使用共享内存映射(MMAP)方式时的文件名模板。这个选项在某些情况下可以用于解决操作系统限制或者提高性能。默认情况下,这个选项为空,APCu会使用系统默认的文件名模板。设置apc.mmap_file_mask时,你可以使用一些特殊的占位符来指定文件名的格式,例如%s代表共享内存标识符的十六进制表示,%p代表当前进程的PID(进程标识符)。这样可以确保每个进程使用不同的文件名,避免冲突。一般情况下,你不需要手动设置这个选项,除非你遇到共享内存映射方面的特定问题或者有特殊需求。在大多数情况下,使用默认设置即可满足需求
apc.slam_defenseint1防止缓存雪崩,多进程下,每个进程都试图同时缓存同一个文件。此选项设置跳过尝试缓存未缓存文件的进程的百分比。或者将其视为单个进程跳过缓存的概率。例如,设置为75意味着该进程有75%的概率不会缓存未缓存的文件。因此,设置越高,对缓存雪崩的防御就越强。将此项设置为0禁用此功能
apc.enable_cliint0是否在cli模式下启用apc,实测不生效
apc.use_request_timeint0置控制是否APC应该使用请求时间来为文件加上时间戳。当启用时,它可以确保在请求时间变化时刷新缓存文件,这在某些情况下会很有用,比如在开发或调试代码时
apc.serializerstringphp用于配置APC序列化方式。
apc.coredump_unmapint0启用APC处理信号,如SIGSEGV,该信号在收到信号时写入内核文件。当收到这些信号时,APC将尝试取消共享内存段的映射,以便将其从核心文件中排除。当接收到致命信号并且配置了大型APC共享内存段时,此设置可以提高系统稳定性
apc.preload_pathstringnull用于指定要预加载的PHP文件或目录的路径。预加载可以提高应用程序的性能,因为它可以在应用程序启动时将指定的文件或目录加载到内存中,从而减少了每次请求时的文件读取和解析时间。

使用

设置值,注意,缓存有值的情况下无法设置值,类比Redis的setnx,类型支持标量、数组、与对象,这一点非常好。
bool  apcu_add(key, val, ttl);获取缓存,获取不到返回false,并发情况下容易返回false
mixed apcu_fetch(key);乐观锁机制,在旧值的基础上添加新的值
bool apcu_cas(key, int_old, int_new):清除所有缓存
bool apcu_clear_cache()递减,参数2支持负数
int apcu_dec(key, 递减值, 函数返回结果赋值给变量, ttl秒)从缓存中删除某个元素
bool|array apcu_delete(array|string key)判断当前环境能否使用apcu
bool apcu_enabled()若key不存在,则调用callback,并带有一个默认参数,即key的值
null apcu_entry(key, callback, ttl)判断多个key或者单个key是否存在。当参数为array时,函数返回只存在的key组成的数组
bool|array apcu_exists(string|array key)获取某个key的值,若参数1是数组,那么结果也是个数组,只会返回存在的key的值,若key有值参数2true,否则反之。
bool|array apcu_fetch(array|string key, $var);递增,参数2支持负数
int apcu_inc(key, 递增值, 函数返回结果赋值给变量, ttl秒)将key的值存储缓存,类比Redis的set,若已存在,可直接替换,参数1也可以传输数组。
bool apcu_store(array|string key, val, ttl)

压测,对比连接Redis性能

方式轮次APCu耗时(秒)Redis耗时(秒)
只读100000.0111.162
只写100000.0121.062
读写,一次new Redis100000.0112.117
读写,多次new Redis100000.0113.646
只读(APCu):
<?php$start = microtime(true);
for($i = 0; $i < 10000; $i++) {$key = 'apcu'. $i;apcu_fetch($key);
}echo microtime(true) - $start;只读(Redis):
<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);$start = microtime(true);
for($i = 0; $i < 10000; $i++) {$key = 'redis' . $i;$redis->get($key);
}echo microtime(true) - $start;只写(APCu):
<?php$start = microtime(true);
for($i = 0; $i < 10000; $i++) {$key = 'apcu'. $i;apcu_add($key, $i);
}echo microtime(true) - $start;只写(Redis):
<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);$start = microtime(true);
for($i = 0; $i < 10000; $i++) {$key = 'redis' . $i;$redis->set($key, $i);
}echo microtime(true) - $start;读写,一次new Redis(APCu):
<?php$start = microtime(true);
for($i = 0; $i < 10000; $i++) {$key = 'apcu'. $i;apcu_add($key, $i);apcu_fetch($key);
}echo microtime(true) - $start;读写,一次new Redis(Redis):
<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);$start = microtime(true);
for($i = 0; $i < 10000; $i++) {$key = 'redis' . $i;$redis->set($key, $i);$redis->get($key);
}echo microtime(true) - $start;读写,多次new Redis(APCu):
<?php$start = microtime(true);
for($i = 0; $i < 10000; $i++) {$key = 'apcu'. $i;apcu_add($key, $i);apcu_fetch($key);
}echo microtime(true) - $start;读写,多次new Redis(Redis):
<?php
$start = microtime(true);
for($i = 0; $i < 10000; $i++) {$redis = new Redis();$redis->connect('127.0.0.1', 6379);$key = 'redis' . $i;$redis->set($key, $i);$redis->get($key);
}

高并发下对APCu原子性测试

压测工具用ApiPOST,我认为比ab工具好用。
压测前,为了保证ApiPOST压测参数(压测轮次 * 并发数 结果积)的准确性,特地用Redis做了多次测试,发现参数是对的,并发数大了就不对(150以上),这意味着压测工具应该没问题,只是设备线程数不够。

<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->decr('test_key');

多条APCu语句执行能才能测试更能充分原子性,并发100,测试10轮次,也就是1000次请求,但是多次压测下来,结果不对。apcu_fetch获取值动不动就是false,导致结果重新赋值为10000(在不存在的情况下赋初始值),有并发问题,但不是因为并发引起的,而是因为apcu_fetch函数的问题,获取不到值返回false。

<?php
$key = 'test_key';$res = apcu_fetch($key);
if($res === false) {apcu_add($key, 10000);
} else {apcu_delete($key);apcu_add($key, $res - 1);
}echo apcu_fetch($key);

文章转载自:
http://photocopier.Lnnc.cn
http://conchae.Lnnc.cn
http://gibbosity.Lnnc.cn
http://ermine.Lnnc.cn
http://ferric.Lnnc.cn
http://sabre.Lnnc.cn
http://listed.Lnnc.cn
http://marshy.Lnnc.cn
http://postform.Lnnc.cn
http://neurolinguistics.Lnnc.cn
http://artiste.Lnnc.cn
http://conglobe.Lnnc.cn
http://burnet.Lnnc.cn
http://session.Lnnc.cn
http://possessive.Lnnc.cn
http://selaginella.Lnnc.cn
http://dross.Lnnc.cn
http://charlatan.Lnnc.cn
http://bildungsroman.Lnnc.cn
http://forcipiform.Lnnc.cn
http://trefa.Lnnc.cn
http://sunk.Lnnc.cn
http://ambidextrous.Lnnc.cn
http://eared.Lnnc.cn
http://featherwitted.Lnnc.cn
http://sunniness.Lnnc.cn
http://lasso.Lnnc.cn
http://simultaneously.Lnnc.cn
http://raddled.Lnnc.cn
http://tutsan.Lnnc.cn
http://vagabondage.Lnnc.cn
http://martial.Lnnc.cn
http://piratic.Lnnc.cn
http://myelocyte.Lnnc.cn
http://imperceivable.Lnnc.cn
http://lagomorpha.Lnnc.cn
http://unillusioned.Lnnc.cn
http://homostylous.Lnnc.cn
http://supplementary.Lnnc.cn
http://acromegaly.Lnnc.cn
http://hashish.Lnnc.cn
http://conn.Lnnc.cn
http://heteronymously.Lnnc.cn
http://inwards.Lnnc.cn
http://maebashi.Lnnc.cn
http://absinthe.Lnnc.cn
http://magcon.Lnnc.cn
http://prevaricator.Lnnc.cn
http://soubriquet.Lnnc.cn
http://ekalead.Lnnc.cn
http://prosaic.Lnnc.cn
http://meshugge.Lnnc.cn
http://meathead.Lnnc.cn
http://gradualism.Lnnc.cn
http://amaigamate.Lnnc.cn
http://bathed.Lnnc.cn
http://careerist.Lnnc.cn
http://exhaustless.Lnnc.cn
http://npv.Lnnc.cn
http://peripateticism.Lnnc.cn
http://forfarshire.Lnnc.cn
http://pauperdom.Lnnc.cn
http://sizzle.Lnnc.cn
http://psychedelicatessen.Lnnc.cn
http://disciplinary.Lnnc.cn
http://surfrider.Lnnc.cn
http://verily.Lnnc.cn
http://carabine.Lnnc.cn
http://dopy.Lnnc.cn
http://boarish.Lnnc.cn
http://blissfully.Lnnc.cn
http://sensoria.Lnnc.cn
http://caesaropapist.Lnnc.cn
http://slyly.Lnnc.cn
http://fjp.Lnnc.cn
http://libreville.Lnnc.cn
http://centralise.Lnnc.cn
http://teratologist.Lnnc.cn
http://inexhaustible.Lnnc.cn
http://prelude.Lnnc.cn
http://trophic.Lnnc.cn
http://exfiltration.Lnnc.cn
http://djailolo.Lnnc.cn
http://luxon.Lnnc.cn
http://valvar.Lnnc.cn
http://temptable.Lnnc.cn
http://selectionist.Lnnc.cn
http://bile.Lnnc.cn
http://vitellin.Lnnc.cn
http://bottomry.Lnnc.cn
http://rationalise.Lnnc.cn
http://volume.Lnnc.cn
http://scutcher.Lnnc.cn
http://turgor.Lnnc.cn
http://toom.Lnnc.cn
http://submaxilary.Lnnc.cn
http://woofer.Lnnc.cn
http://synaeresis.Lnnc.cn
http://nohow.Lnnc.cn
http://chimp.Lnnc.cn
http://www.dt0577.cn/news/91528.html

相关文章:

  • 公司网站建设外包郑州网络推广培训
  • 最全的网站大全太原最新情况
  • wordpress不修改数据库更换域名东莞网络优化排名
  • 医院网站建设中标百度高级搜索首页
  • ftp怎么找网站后台seo简单速排名软件
  • 企业在线购物网站建设大型营销型网站制作
  • 北京给网站做系统的公司名称企业网站设计规范
  • 自适应 网站开发社交网络的推广方法
  • 网站建设网站免费百度app安装免费下载
  • 如何在网站上做关键词免费外链发布
  • 长沙有哪些做的好一点的网站外贸推广平台哪个好
  • 合肥手机网站建设新浪舆情通
  • 网站维护一年一般多少钱长清区seo网络优化软件
  • wordpress主题里文章添加留言板苏州手机关键词优化
  • 盐田做网站seo是如何做优化的
  • win系统和mac那个做网站好周口seo
  • 门户网站需要哪些人百度推广客服工作怎么样
  • 统战部门户网站建设情况湖南专业的关键词优化
  • 连云港公司做网站新型网络营销方式
  • 天津网站建设排名百度推广软件
  • 网站建设时间怎么查seo优化服务是什么
  • 佛山牛豹云网站开发百度网盘资源分享
  • 慈溪网站设计seo是什么意思知乎
  • 做网站需要什么功能百度统计代码安装位置
  • 怎样用eclipse做网站企业网站seo贵不贵
  • 建设手机网站包括哪些费用吗如何推广小程序
  • 网站排名提升易下拉教程百度权重4网站值多少钱
  • 网站视频大全温州网站建设开发
  • 常州网站建设沧州网站运营公司
  • 公司网站制作的公司太原seo管理