YAC高速无锁缓存,PHP的YAC扩展详解及安装

介绍

Yac 是一个同族进程间(典型的如PHP-FPM及其子进程)共享数据的无锁的缓存,无锁的目的是提高CPU多进程的效率。据说 Apc 的效率是 Memcached 的一倍以上,而 Yac 比 Apc 更快。这就是它最大的特点

而解决无锁的数据一致性问题主要靠两个方面

1.读锁的替代方案: 返回数据前的校验机制(CRC校验)
2.写锁的替代方案: 启动时就确定key空间的分布,写操作将数据哈希到对应的slot,对同一个slot写操作冲突问题,客观上允许这种操作的存在,但主观上忽略之(鸟哥自己的测试脚本(脚本地址)结果是千万分之一)

注意事项

1.因为是php进程之间共享,所以它是单机的缓存,多台机器时还是用memcached或者redis更好。但是它可以和redis等形成互补,比如当缓存key比较大,使用又频繁,将缓存迁移到yac降低redis的压力。
2.yac是无锁的缓存,所以要尽量避免多个进程设置相同key。同时它还意味着有可能获取cache的时候拿到错误的数据,取决于分配了多少密钥槽和存储了多少密钥, 1/10000000(千万分之一)的概率会发生
3.Yac使用部分crc校验,最好重新安排你的缓存内容,把最易变的字节放在头或尾
相关方法

具体的方法使用,可以看https://github.com/laruence/yac

需要说明的几点:
1.是可以一次性设置多个key的,但他们的过期时间都是一样的。
2.没有获取key过期时间的方法
3.flush方法,并不会释放任何资源,只是将所有项标记为无效

info具体含义:

  1. Array
  2. (
  3. [memory_size] => 71303168
  4. [slots_memory_size] => 4194304
  5. [values_memory_size] => 67108864
  6. [segment_size] => 4194304
  7. [segment_num] => 16
  8. [miss] => 23
  9. [hits] => 90
  10. [fails] => 0
  11. [kicks] => 0
  12. [recycles] => 0
  13. [slots_size] => 32768
  14. [slots_used] => 17
  15. )

1.miss代表没有命中的次数,hits缓存命中的次数,slots_size是key slot个数,也就是能存多少key,slots_used是已使用的key slot数,也就是当前key的个数。
2.memory_size:yac总共占用的内存,默认68M,slots_memory_size:key槽占用的内存默认4M,配置yac.keys_memory_size = 4M,4M有30K的key槽, 32M有100K的key槽,values_memory_size:value值占用的内存,配置yac.values_memory_size = 64M,默认64M,单位都是byte。 3.kicks被踢出的次数,recycles内存重新分配的次数。

php扩展Yac的安装

  1. 1. git clone https://github.com/laruence/yac
  2. cd yac
  3. 2.
  4. phpize //生成configure
  5. 3.
  6. ./configure --with-php-config=/usr/local/php/bin/php-config
  7. 4.
  8. make && make install
  9. 5.修改php.ini 加一句
  10. extension = yac.so
  11. 然后重启服务器 重启 php

php -m 查看yac扩展

参考

yac的github地址: 鸟哥的博客

点赞 ( 0 )

3 条评论

  1. Interesting blog! Is your theme custom made or did you download it from somewhere? A design like yours with a few simple tweeks would really make my blog shine. Please let me know where you got your design. Cheers

  2. I am curious to find out what blog platform you are using? I'm experiencing some minor security problems with my latest website and I would like to find something more secure. Do you have any solutions?

  3. FakeUrineCo

    Privacy and confidentiality are important factors in urine drug testing, and strict protocols are followed to protect the individual being tested. The consistency of urine can range from watery to viscous.

发表评论

人生在世,错别字在所难免,无需纠正。

插入图片
s
返回顶部