使用shmop共享内存代替RDS(Redis)

本文介绍Linux环境下共享内存的使用方法,包括如何通过PHP实现共享内存的设置、读取及删除等操作,并提供实用代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

linux 系统下显示共享内存使用情况

ipcs -m

[root@iZwz953trdqtvmkegyoartZ ~]# ipcs -m
------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      
0x00003124 131072     www        644        103        0                       
0x0000311a 4259841    www        755        103        0                       
0x0000311b 4292610    www        755        225        0   

-------------------------------------------------------------------------

一般系统都有几十m以上的分配,用来存临时数据绰绰有余

//共享内存一般最小有32m 悠着点
//高并发请用锁
//key只允许int也就是数字
/**
 * 保存变量
 * @param  [int] $key [description]
 * @param  [type] $bin [description]
 * @return flase OR true
 */
function shm_set($key,$bin){
	shm_del($key);
	$bin=serialize($bin);
	$len=strlen($bin);
	$id=shmop_open($key,"n",0755,$len);
	if (empty($id)) {
		die($key."无法使用共享内存!!".$len."hhhh");
	}
	$ret=shmop_write($id, $bin,0);
	shmop_close($id);
	if($ret == false){
		return false;
	}else{
		return true;
	}
}

/**
 * 读取变量
 * @param  [int] $key [description]
 * @param  [type] $bin [description]
 * @return flase OR true
 */
function shm_get($key,&$bin){
	@$id=shmop_open($key,"a",0755,0);
	if (empty($id)) {
		return false;
	}
	$bin='';
	@$bin=unserialize(shmop_read($id,0,shmop_size ($id)));
	shmop_close($id);
	if($bin == ''){
		return false;
	}else{
		return true;
	}
}

/**
 * 删除变量
 * @param  [int] $key [description]
 */
function shm_del($key){
	@$id=shmop_open($key,"a",0755,0);
	if (empty($id)) {
		return;
	}
	shmop_delete($id);
	shmop_close($id);
}

/**
 * 读取会过期变量 变量timex
 * @param  [int] $key [description]
 * @param  [type] $bin [description]
 * @return flase OR true
 */
function shm_get_gq($key,&$bin){
	if(!shm_get($key,$bin)){
		return false;
	}
	if(!isset($bin['timex'])){
		return false;
	}
	if($bin['timex'] <= $gq){
		return false;
	}
	$bin=$bin['bin'];
	return true;
}

/**
 * 设置会过期的变量
 * @param  [type] $key  [description]
 * @param  [type] &$bin [description]
 * @param  [type] $gq   秒数
 * @return [type]       [description]
 */
function shm_set_gq($key,&$bin,$gq){
	$d['timex']=time()+$gq;
	$d['bin']=$bin;
	return shm_set($key,$d);
}
用着非常方便,什么rds见鬼去吧
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值