memcache功能太简单了,只能 set get 和delete,只能保存key-value的数据,不能保存列表,当然也可以把一个列表给序列化了之后存进memcache,但是会存在并发的问题,每次保存数据,插队或者出队的时候都要给数据加锁,在高并发的情况下很难保证数据的一致性.
但是memcache 有一个 increment 的操作,为某一个键对应的值进行加1,实际上是加法运算,默认加1,这个操作是原子性的, 所以我们可以通过这个来维护一个自增的id来保证数据的唯一,再加上两个指针来维护起始键值,这样就构建了一个简单的但相队列.
代码如下:
<?php /** * memcache构建的简单内存队列 * * @author: jeffjing */ class memList { private $memcache; // memcache类 private $queKeyPrefix; //数据键前缀 private $startKey; //开始指针键 private $startKey; //结束指针键 public function __construct($key) { $this->queKeyPrefix = "MEMQUE_{$key}_"; $this->startKey = "MEMQUE_SK_{$key}"; $this->endKey = "MEMQUE_EK_{$key}"; } /** * 获取列表 * 先拿到开始结束指针, 然后去拿数据 * * @return array */ public function getList() { $startP = $this->memcache->get($this->startKey); $endP = $this->memcache->get($this->endKey); empty($startP) && $startP = 0; empty($endP) && $endP = 0; $arr = array(); for ($i = $startP; $i < $endP; ++$i) { $key = $this->queKeyPrefix . $i; $arr[] = $this->memcache->get($key); } return $arr; } /** * 插入队列 * 结束指针后移,拿到一个自增的id * 再把值存到指针指定的位置 * * @return void */ public function in($value) { $index = $this->memcache->increment($this->endKey); $key = $this->queKeyPrefix . $index; $this->memcache->set($key, $value); } /** * 出队 * 很简单, 把开始值取出后开始指针后移 * //开源代码phprm.com * @return mixed */ public function out() { $result = $this->memcache->get($this->startKey); $this->memcache->increment($this->startKey); return $result; } } ?>
关于memcached的一些事情
内存存储方式(slab allocator),memcached的数据存储方式为slab allocator即数据分片,在服务启动的时候先把内存分成不同大小的 chunk,当有数据过来的时候来存储到一个合适大小的chunk当中,之前版本是直接分配内存,导致内存碎片 随机查找等问题.
数据过期删除机制
memcached在数据过期之后,并不会去删除数据,但是不能访问过期的数据,过期数据占用的空间会被重复利用.
memcached采用lazy expiration,不会去主动扫描一个数据项是否过期,而是在数据get的时候判断是否已经过期.删除的算法是LRU(Least Recently Used),优先删除最近使用较少的数据.
memcached的分布式机制
虽说memcached是一个分布式的缓存,但是memcached本身并没有实现任何分布式的机制,分布式的功能主要是由客户端来实现的.
程序通过addserver增加多个memcahced服务到客户端(memcache扩展),在存取数据之前,客户端会先通过hash算法得到存储数据的节点,然后再去存取数据,当其中一台memcached服务器挂掉或者新增一台memcached服务器,hash算法得到的存储数据的节点就会变化,去新的服务器上去存取数据.
本文链接:
收藏随意^^请保留教程地址.

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기
