当前位置: 首页 > 后端技术 > PHP

深入理解Memcache

时间:2023-03-29 23:00:46 PHP

特性单项最大数据1M,单进程最大使用内存2G。当需要更多内存时,可以打开多个端口。Memcached是多线程、非阻塞io多路复用的网络模型,redis是单线程的,key最大长度为250字节。常见的应用场景是memcached维护session,实现session共享(session跨服务器的一种解决方案)。内存管理机制(默认是使用SlabAllocatoion机制来分配和管理内存)将内存分成各种大小。块(chunk),将大小相同的块分成组(chunks的集合)page就是分配Slab的内存空间。默认值为1M。根据Slab的大小,分为chunkchunk:用户缓存记录的内存空间。Slab类:具体chunk组说明压缩注意:PHP官网最新版本的memcache扩展,当该值好像大于20k时(具体值有待考证),会自动压缩。尝试压缩后会出现乱码。尽量使用1.1版本,不会自动压缩。//设置($this->_key($key),$value,MEMCACHE_COMPRESSED,$ttl);MEMCACHE_COMPRESSED是压缩选项。压缩后的数据一般为原始数据大小的30%左右,节省了70%的传输性能消耗,收益会大于文件压缩带来的性能损失;存储的数据确实大于几百个字节,如果键值对小于100个字节,压缩可能反而导致扩容,Memcached按照固定大小划分块存储,最小为88B。因此,数据过小造成的压缩扩展问题不大;项目属性时间最近访问时间exptime过期时间nsuffix-(flags-and-lengthstring的长度)it_flags;//ITEM_*aboveslabs_clsid;//我们innkey是哪个slab类;//keylength,w/terminatingnullandpaddingkeylength,w/terminatingnullpaddingnext-指针prev-指针h_nextnlbytesrefcountdataitem的数据4部分cas(可选)-版本号keysuffixvalue