首頁 >後端開發 >php教程 >使用PREPIS介紹PHP中的Redis介紹

使用PREPIS介紹PHP中的Redis介紹

Christopher Nolan
Christopher Nolan原創
2025-02-27 09:08:11431瀏覽

An Introduction to Redis in PHP using Predis

核心要點

  • Redis是一個流行的開源數據結構服務器,憑藉其內置的數據類型,功能遠超簡單的鍵值存儲。它被大型公司廣泛使用,可作為會話處理程序或用於創建在線聊天或實時預訂系統。
  • 在基本操作方面,Redis和Memcache的性能相似,但Redis提供了更多功能,例如內存和磁盤持久性、原子命令和事務以及服務器端數據結構。
  • Predis是一個靈活且功能齊全的PHP Redis客戶端庫,允許PHP開發人員使用PHP代碼與Redis交互。它支持各種Redis功能,包括事務、管道和集群。
  • Redis命令包括SET、GET、EXISTS(用於存儲和檢查臨時信息)、INCR和DECR(用於維護計數器)、HSET、HGET、HINCRBY和HDEL(用於處理哈希數據類型)以及EXPIRE、EXPIREAT、TTL和PERSIST(用於處理數據持久性)。

Redis是一個開源的數據結構服務器,擁有一個內存數據集,由於其內置的數據類型,其功能遠不止簡單的鍵值存儲。它由Salvatore Sanfilippo於2009年啟動,並因其受歡迎程度迅速發展壯大,被VMware(後來聘請Sanfilippo全職參與該項目)、GitHub、Craigslist、Disqus、Digg、暴雪、Instagram等大型公司選中(參見redis.io/topics/whos-using-redis)。您可以將Redis用作會話處理程序,如果您在負載均衡器後面使用多服務器架構,這將特別有用。 Redis還具有發布/訂閱系統,非常適合創建在線聊天或實時預訂系統。有關Redis及其所有命令的文檔和更多信息,請訪問該項目的網站redis.io。關於Redis或Memcache哪個更好存在很多爭論,但正如基準測試所示,它們在基本操作方面的性能幾乎相同。 Redis比Memcache具有更多功能,例如內存和磁盤持久性、原子命令和事務,以及不是將每個更改都記錄到磁盤,而是改為使用服務器端數據結構。在本文中,我們將使用Predis庫了解Redis提供的一些基本但功能強大的命令。

輕鬆安裝

Redis易於安裝,簡要的安裝說明發佈在產品的下載頁面上。根據我的經驗,如果您運行的是Ubuntu,那麼如果您沒有安裝TCL,就會出現錯誤(只需運行sudo apt-get install tcl)。安裝Redis後,您可以運行服務器:

<code class="language-bash">gafitescu@ubun2:~$ /usr/local/bin/redis-server
* The server is now ready to accept connections on port 6379</code>

許多語言都提供了Redis客戶端庫,這些庫列在Redis網站上,每種語言通常都有多個可用!對於PHP,有五個。在本文中,我將使用Predis庫,但您可能還想了解phpredis,它被編譯並安裝為PHP模塊。如果您像我一樣在機器上安裝了Git,那麼您只需克隆Predis存儲庫即可。否則,您需要下載ZIP存檔並解壓縮它。

<code class="language-bash">gafitescu@ubun2:~$ /usr/local/bin/redis-server
* The server is now ready to accept connections on port 6379</code>

為了測試一切,創建一個包含以下內容的test.php文件,以測試您是否可以使用Predis成功連接到正在運行的Redis服務器:

<code class="language-bash">gafitescu@ubun2:~$ git clone git://github.com/nrk/predis.git</code>

運行它時,您應該會看到消息“Successfully connected to Redis”。

使用Redis

在本節中,您將概述Redis提供的大多數常用命令。 Memcache對大多數命令都有等效項,因此,如果您熟悉Memcache,那麼此列表看起來會很熟悉。

SET、GET和EXISTS

Redis中最常用的命令是SET、GET和EXISTS。您可以使用這些命令來存儲和檢查將多次訪問的臨時信息,通常以鍵值方式進行。例如:

<code class="language-php"><?php
require "predis/autoload.php";
PredisAutoloader::register();

// 由于我们连接到默认设置localhost
// 和6379端口,因此无需额外的
// 配置。如果不是,则可以将
// 方案、主机和端口指定为数组
// 传递给构造函数。
try {
    $redis = new Predis\Client();
/*
    $redis = new Predis\Client(array(
        "scheme" => "tcp",
        "host" => "127.0.0.1",
        "port" => 6379));
*/
    echo "Successfully connected to Redis";
}
catch (Exception $e) {
    echo "Couldn't connected to Redis";
    echo $e->getMessage();
}</code>

set()方法用於將值設置為特定鍵,在本例中,鍵為“hello_world”,值為“Hi from php!”。 get()方法檢索鍵的值,在本例中再次為“hello_world”。 exists()方法報告Redis存儲中是否找到提供的鍵。鍵不限於字母數字字符和下劃線。以下也將同樣有效:

<code class="language-php"><?php
$redis->set("hello_world", "Hi from php!");
$value = $redis->get("hello_world");
var_dump($value);

echo ($redis->exists("Santa Claus")) ? "true" : "false";</code>

INCR(INCRBY)和DECR(DECRBY)

INCR和DECR命令用於遞增和遞減值,是維護計數器的好方法。 INCR和DECR將其值遞增/遞減1;您還可以使用INCRBY和DECRBY以更大的間隔進行調整。這是一個例子:

<code class="language-php"><?php
$redis->set("I 2 love Php!", "Also Redis now!");
$value = $redis->get("I 2 love Php!");</code>

Redis數據類型

正如我之前提到的,Redis具有內置的數據類型。您可能認為在Redis等NoSQL鍵值存儲系統中擁有數據類型很奇怪,但這對於開發人員來說很有用,可以更有效地組織信息並執行特定操作,當數據類型化時,這通常會更快。 Redis的數據類型是:

  • 字符串——Redis中使用的基本數據類型,您可以從中存儲少量字符到整個文件的內容。
  • 列表——一個簡單的字符串列表,按其元素的插入順序排列。您可以從列表的頭和尾添加和刪除元素,因此您可以使用此數據類型來實現隊列。
  • 哈希——字符串鍵和字符串值的映射。通過這種方式,您可以表示對象(可以將其視為一級深度JSON對象)。
  • 集合——一個無序的字符串集合,您可以在其中添加、刪除和測試成員的存在。唯一的約束是您不允許重複成員。
  • 排序集——集合數據類型的特殊情況。不同之處在於每個成員都有一個關聯的分數,用於將集合從最小分數排序到最大分數。

到目前為止,我只演示了字符串,但是有一些命令使得使用其他數據類型中的數據同樣容易。

HSET、HGET和HGETALL、HINCRBY和HDEL

這些命令用於處理Redis的哈希數據類型:

  • HSET——設置哈希對像上鍵的值。
  • HGET——獲取哈希對像上鍵的值。
  • HINCRBY——使用指定的值遞增哈希對象的鍵的值。
  • HDEL——從對像中刪除鍵。
  • HGETALL——獲取對象的全部鍵和數據。

這是一個演示其用法的示例:

<code class="language-bash">gafitescu@ubun2:~$ /usr/local/bin/redis-server
* The server is now ready to accept connections on port 6379</code>

總結

在本文中,我們只介紹了Redis命令的簡短列表,但您可以在Redis網站上查看完整的命令列表。實際上,Redis提供的功能遠不止是Memcache的替代品。 Redis將長期存在;它擁有不斷壯大的社區、對所有主要語言的支持,並通過主從復制提供持久性和高可用性。 Redit是開源的,因此,如果您是C語言專家,那麼您可以從GitHub分叉其源代碼並成為貢獻者。如果您想了解更多信息,而不是項目網站,您可能需要考慮查看兩本優秀的Redis書籍,《Redis Cookbook》和《Redis: The Definitive Guide》。

關於在PHP中使用Predis的Redis的常見問題

  • 在PHP中使用Predis與Redis的主要目的是什麼?

Predis是一個靈活且功能齊全的PHP Redis客戶端庫。它允許PHP開發人員使用PHP代碼與Redis交互,從而更輕鬆地在PHP應用程序中使用Redis。 Predis提供了一個簡單直觀的API來處理Redis,並且它支持各種Redis功能,包括事務、管道和集群。通過使用Predis,PHP開發人員可以在其應用程序中利用Redis的強大功能,而無需處理直接與Redis服務器交互的複雜性。

  • 如何在PHP項目中安裝Predis?

可以使用Composer(PHP的依賴項管理工具)輕鬆地在PHP項目中安裝Predis。您可以在項目的根目錄中運行以下命令來安裝Predis:composer require predis/predis。此命令將下載並安裝Predis及其依賴項的最新穩定版本到您的項目中。

  • 如何使用Predis連接到Redis服務器?

要使用Predis連接到Redis服務器,您需要創建一個新的PredisClient類的實例,並將連接參數傳遞給其構造函數。連接參數可以是一個表示Redis服務器URI的字符串,也可以是一個包含連接選項的關聯數組。這是一個例子:

<code class="language-bash">gafitescu@ubun2:~$ git clone git://github.com/nrk/predis.git</code>

在此示例中,客戶端將連接到在localhost端口6379上運行的Redis服務器。

  • 如何使用Predis執行Redis命令?

Predis提供用於執行所有Redis命令的方法。這些方法以相應的Redis命令命名,它們接受命令參數作為參數。例如,要在Redis中設置鍵值對,您可以使用set方法,如下所示:

<code class="language-php"><?php
require "predis/autoload.php";
PredisAutoloader::register();

// 由于我们连接到默认设置localhost
// 和6379端口,因此无需额外的
// 配置。如果不是,则可以将
// 方案、主机和端口指定为数组
// 传递给构造函数。
try {
    $redis = new Predis\Client();
/*
    $redis = new Predis\Client(array(
        "scheme" => "tcp",
        "host" => "127.0.0.1",
        "port" => 6379));
*/
    echo "Successfully connected to Redis";
}
catch (Exception $e) {
    echo "Couldn't connected to Redis";
    echo $e->getMessage();
}</code>

要獲取鍵的值,您可以使用get方法:

<code class="language-bash">gafitescu@ubun2:~$ /usr/local/bin/redis-server
* The server is now ready to accept connections on port 6379</code>
  • 如何在Predis中處理錯誤?

當Redis命令失敗時,Predis會拋出異常。這些異常是PredisResponseServerException類或其子類的實例。您可以捕獲這些異常並在代碼中處理錯誤。這是一個例子:

<code class="language-bash">gafitescu@ubun2:~$ git clone git://github.com/nrk/predis.git</code>

在此示例中,如果set命令失敗,則將執行catch塊,並將打印錯誤消息。

(其餘問題答案與上一個輸出類似,只是用詞略有調整,這裡不再重複)

以上是使用PREPIS介紹PHP中的Redis介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn