解决PHP因大量用户使用数据库造成数据库拥堵的几个方法

一.使用 PHP 直接在共享内存中存储数据集

<?php
//数据库连接部分
include("connection.php");
$sql="select * from message";
$result=mysql_query($sql);
$row=mysql_fetch_array($result);
//共享内存块设置
$systemid = 865; 
$mode = "c";
$permissions = 0755; 
$size = 1024;
$shmid = shmop_open($systemid, $mode, $permissions, $size);//创建内存段
//实现向内存段写入,读取,删除数据的功能
shmop_write($shmid,$row['title'],0);
$size=shmop_size($shmid);
echo shmop_read($shmid,0,$size);
shmop_delete($shmid);
shmop_close($shmid);
?>


二.在PHP中使用memcache

关于memcache的一些简介和配置还有功能函数的详细用法在上一篇博文已有记录,感兴趣的可以去看一看,这里就不在重复了。
<?php
//数据库连接部分
include("connection.php");
$sql="select * from message";
$result=mysql_query($sql);
$row=mysql_fetch_array($result);

//memcache缓存操作
//连接 
$memcache = new Memcache; 
$memcache->connect('localhost', 11211) or die ("Could not connect");   
//保存数据 
$memcache->set('key1',$row['title'], 0, 60); 
$val = $memcache->get('key1'); 
echo "Get key1 value: " . $val ."<br />"; 
//替换数据 
$memcache->replace('key1', $row['user'], 0, 60); 
$val = $memcache->get('key1'); 
echo "Get key1 value: " . $val . "<br />"; 
//保存数组 
$array= array($row['id'], $row['user'],$row['title'],$row['content']); 
$memcache->set('key2', $array, 0, 60); 
$val2 = $memcache->get('key2'); 
echo "Get key2 value: "; 
print_r($val2); 
echo "<br />"; 
//删除数据 
$memcache->delete('key1'); 
$val = $memcache->get('key1'); 
echo "Get key1 value: " . $val . "<br />"; 
//清除所有数据 
$memcache->flush(); 
$val2 = $memcache->get('key2'); 
echo "Get key2 value: "; 
print_r($val2); 
echo "<br />"; 
//关闭连接 
?>


三.在PHP中使用redis

      如果你知道什么是memcache的话,那么对于redis也许就就能很好地理解。memcache我之前有提过,是一种数据库缓存技术,可以将数据库的值存取在里面,然后通过PHP来使用,而redis基本上也是完成这一目的,但是redis比memcache更加完善,可以将其理解为memcache的升级版。多的我也就不阐述了,想要了解更多的请自行上网查阅。在使用redis之前也必须对PHP进行redis的安装与配置,如果之前配置过memcache的话,对于安装redis来说也比较轻松。在下面讲述redis的使用之前我先简单地讲一下该如何安装配置redis。

1.首先去网上下载php_redis.dll(注意选择选择平台对应的版本以及最好是和PHP的版本对应)和redis的windows客户端;

  //客户端的配置

2.在cmd中进入到所下载的redis客户端所在目录,输入  redis-server.exe redis.conf

3. 重新打开一个cmd,输入 redis-server.exe redis.conf

  //php的配置

4.将php_redis.dll拷贝到wamp/bin/php/ext目录下

5.在php.ini中加入

   extension=php_igbinary.dll
   (extension=php_redis.dll)如果不行的话在将括号里的话添加到上面那句话的下一行,并将下载相应的.dll文件放在ext目录下

6.打开phpinfo()查看是否添加成功

检测代码:

<?php
	$redis = new Redis();
	$redis->connect('127.0.0.1',6379);
	//$redis->connect("test.com",6379); //php客户端设置的ip及端口
	//存储一个值
	$redis->set("say","Hello World");
	echo $redis->get("say"); //应输出Hello World
	//存储多个值
	$array = array('first_key'=>'first_val',
	'second_key'=>'second_val',
	'third_key'=>'third_val');
	$array_get = array('first_key','second_key','third_key');
	$redis->mset($array);
	var_dump($redis->mget($array_get));
?>
输出结果:

Hello World
array (size=3)
  0 => string 'first_val' (length=9)
  1 => string 'second_val' (length=10)
  2 => string 'third_val' (length=9)
    如果还是没成功或者不理解的话,我会在后面放几个专门介绍怎么安装和配置的链接以及资源下载地址。

    讲完配置,下面开始贴上redis的一部分使用代码:

<?php
	//数据库连接部分  
	include("connection.php");  
	$sql="select * from message";  
	$result=mysql_query($sql);  
	$row=mysql_fetch_array($result);  
	//连接实例
	$redis = new redis();  
	$result=$redis->connect('localhost', 6379);  
	var_dump($result); 
	//设置键
	$result = $redis->set('key',$row['title']); 
	var_dump($result); 
	//获取键   
	$result = $redis->get('key');   
	var_dump($result); 
	//删除键 
	$result=$redis->delete('key');
	$result = $redis->get('key');    
	var_dump($result); 
?>

以下是运行结果:

boolean true
boolean true
string '是供电公司' (length=15)
boolean false

总结:当然,以上三种方法我都只列举最基本的赋值,取值,删除的列子,如果还想更深入了解的同学可以参考一下的链接。

参考链接:http://www.ibm.com/developerworks/cn/opensource/os-php-shared-memory/

    http://www.jb51.net/article/48745.htm

    http://www.songlin51.com/archives/1082.html

    http://www.ay22.com/2014/08/04/windows下wamp环境安装redis缓存扩展/

    http://www.jb51.net/article/51884.htm


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章