您的位置:首页 > 数据库 > Memcache

PHP的51个Memcached方法(1-11)

2016-07-25 01:58 417 查看
public __construct ([ string $persistent_id ] )

构造方法,在PHP5引入了__construct方法,替代了使用类名的构造方法。但实例化对象的时候还是使用类名的方式:

$memcachedObj = new MemCached();


参数persistent_id为对象的标识,默认情况下(不指定persistend_id)下只要new一个对象就会为该对象创建一个与服务端的TCP连接(用于与服务端的Memcached程序通信),如果客户端在同一个脚本中需要使用多个Memcached对象,则可以考虑这些对象间是否可以共用与服务端的TCP连接,以减少对服务端的压力。

public bool add ( string $key , mixed $value [, int $expiration ] )

向服务端Memcached中增加数据,$key是数据的键值,$value是数据的值,可选参数$expiration是数据的数据的存活时间,以秒为单位,从数据存入Memcached中开始计时,在$expiration秒内是有效的,超过此时间数据将被释放,无法再被获取。

存活时间的默认值是0.

如果存活时间$expiration超过 一个月=60*60*24*30秒,存活时间的计时就是从1970年1月1日0点0时0分开始,而不再是存入Memcached中的那一刻。

如果向$key已在服务端存在,则返回FALSE.

public bool addByKey ( string $server_key , string $key , mixed $value [, int $expiration ] )

与add方法相同,也是将数据加入服务器的Memcached中。不同的是:如果客户端工作在集群环境,如果某些数据的key是逻辑相关的,访问key1-key10的数据后的一段时间90%的访问都在key1-key10的数据中,这样将key1-key10对应的数据放到同一台服务器上将会减少为了获取分布在不同服务器上的数据而进行的服务器切换的动作,加快了查找速度。

$server_key可以是任意字符串,只要这个值相同的数据就会被放到相同的服务器上。但$server_key不同的数据可不一定放到不同的服务器上,这个需要集群内各服务器的使用情况,Memcached会均衡的分配。

public bool addServer ( string $host , int $port [, int $weight = 0 ] )

由于Memcached是分布式的,且又客户端维持集群配置,因此客户端利用此方法维护可用的Memcached服务器列表。

$host是Memcached服务器的IP,$port是Memchached服务器的端口,可选参数是Memcached服务器的权重,在搜索服务器获取数据时,权重高的服务器优先被查找。

public bool addServers ( array $servers )

功能与addServer一样,这个方法可以一次性添加多个服务器。服务器使用数组,数组中的每个数据也是数组,array(string $host , int $port [, int $weight = 0 ] ),参数解释同addServer。

public bool append ( string $key , string $value )

向服务器的Memcached中的key是$key是的数据后追加$value,相当于线取出key是$key的数据$data,再将$data与$value进行拼接,拼接结果再做为新的value按照$key放回Memcached中。

public bool appendByKey ( string $server_key , string $key , string $value )

同append ,但可以将一组相关的数据的key放入同一个服务器的Memcached中。参数可综合append和addByKey的解释。

public bool cas ( float $cas_token , string $key , mixed $value [, int $expiration ] )

cas是check and set的首字母缩写,是为了防止多脚本修改数据相互覆盖的问题而设计的:如果某个数据,如账户余额为1000元,会被多个脚本修改,如脚本“支付”和脚本“存款”。“支付”脚本修改余额前“存款”脚本先获取了数据,“支付脚本”对这个数据进行了修改,扣掉支付金额200元后在“存款”脚本提交前提交,余额变为800元,这个时候“存款”脚本对数据修改,存入100元,余额为1100元后再提交,余额就变为零1100元,即发生数据覆盖问题(支付脚本的工作白做了)。

为了避免次问题,每次对于数据的修改,Memcached都会为数据生成一个版本号$cas_token:一个64位精度的浮点数。一个脚本提交的时候,应该先通过get系列方法获取这个版本号$cas_token,再利用cas先检查当前Memcached中的数据是否是自己之前提交过的,如果是则说明没有别的脚本更新过该值,就可以提交本次修改,如果不是则不能提交。

其他参数同add.

public bool casByKey ( float $cas_token , string $server_key , string $key , mixed $value [, int $expiration ] )

同cas,但可以将逻辑关联的数据放到同一个服务器上。

public int decrement ( string $key [, int $offset = 1 [, int $initial_value = 0 [, int $expiry = 0 ]]] )

将Memcached中key是$key的数据值减去$offset的结果作为该数据新的value. 如果数据不存在则add(key,initital_value[,$expiry]).

public int decrementByKey ( string $server_key , string $key [, int $offset = 1 [, int $initial_value = 0 [, int $expiry = 0 ]]] )

同decrement ,但可以通过$server_key参数将相关的数据存入同一个服务器的Memcached中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  memcached php