解決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


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