核心要點
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後,您可以運行服務器:
gafitescu@ubun2:~$ /usr/local/bin/redis-server * The server is now ready to accept connections on port 6379
許多語言都提供了Redis客戶端庫,這些庫列在Redis網站上,每種語言通常都有多個可用!對於PHP,有五個。在本文中,我將使用Predis庫,但您可能還想了解phpredis,它被編譯並安裝為PHP模塊。如果您像我一樣在機器上安裝了Git,那麼您只需克隆Predis存儲庫即可。否則,您需要下載ZIP存檔並解壓縮它。
gafitescu@ubun2:~$ /usr/local/bin/redis-server * The server is now ready to accept connections on port 6379
為了測試一切,創建一個包含以下內容的test.php文件,以測試您是否可以使用Predis成功連接到正在運行的Redis服務器:
gafitescu@ubun2:~$ git clone git://github.com/nrk/predis.git
運行它時,您應該會看到消息“Successfully connected to Redis”。
使用Redis
在本節中,您將概述Redis提供的大多數常用命令。 Memcache對大多數命令都有等效項,因此,如果您熟悉Memcache,那麼此列表看起來會很熟悉。
SET、GET和EXISTS
Redis中最常用的命令是SET、GET和EXISTS。您可以使用這些命令來存儲和檢查將多次訪問的臨時信息,通常以鍵值方式進行。例如:
<?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(); }
set()方法用於將值設置為特定鍵,在本例中,鍵為“hello_world”,值為“Hi from php!”。 get()方法檢索鍵的值,在本例中再次為“hello_world”。 exists()方法報告Redis存儲中是否找到提供的鍵。鍵不限於字母數字字符和下劃線。以下也將同樣有效:
<?php $redis->set("hello_world", "Hi from php!"); $value = $redis->get("hello_world"); var_dump($value); echo ($redis->exists("Santa Claus")) ? "true" : "false";
INCR(INCRBY)和DECR(DECRBY)
INCR和DECR命令用於遞增和遞減值,是維護計數器的好方法。 INCR和DECR將其值遞增/遞減1;您還可以使用INCRBY和DECRBY以更大的間隔進行調整。這是一個例子:
<?php $redis->set("I 2 love Php!", "Also Redis now!"); $value = $redis->get("I 2 love Php!");
Redis數據類型
正如我之前提到的,Redis具有內置的數據類型。您可能認為在Redis等NoSQL鍵值存儲系統中擁有數據類型很奇怪,但這對於開發人員來說很有用,可以更有效地組織信息並執行特定操作,當數據類型化時,這通常會更快。 Redis的數據類型是:
到目前為止,我只演示了字符串,但是有一些命令使得使用其他數據類型中的數據同樣容易。
HSET、HGET和HGETALL、HINCRBY和HDEL
這些命令用於處理Redis的哈希數據類型:
這是一個演示其用法的示例:
gafitescu@ubun2:~$ /usr/local/bin/redis-server * The server is now ready to accept connections on port 6379
總結
在本文中,我們只介紹了Redis命令的簡短列表,但您可以在Redis網站上查看完整的命令列表。實際上,Redis提供的功能遠不止是Memcache的替代品。 Redis將長期存在;它擁有不斷壯大的社區、對所有主要語言的支持,並通過主從復制提供持久性和高可用性。 Redit是開源的,因此,如果您是C語言專家,那麼您可以從GitHub分叉其源代碼並成為貢獻者。如果您想了解更多信息,而不是項目網站,您可能需要考慮查看兩本優秀的Redis書籍,《Redis Cookbook》和《Redis: The Definitive Guide》。
關於在PHP中使用Predis的Redis的常見問題
Predis是一個靈活且功能齊全的PHP Redis客戶端庫。它允許PHP開發人員使用PHP代碼與Redis交互,從而更輕鬆地在PHP應用程序中使用Redis。 Predis提供了一個簡單直觀的API來處理Redis,並且它支持各種Redis功能,包括事務、管道和集群。通過使用Predis,PHP開發人員可以在其應用程序中利用Redis的強大功能,而無需處理直接與Redis服務器交互的複雜性。
可以使用Composer(PHP的依賴項管理工具)輕鬆地在PHP項目中安裝Predis。您可以在項目的根目錄中運行以下命令來安裝Predis:composer require predis/predis
。此命令將下載並安裝Predis及其依賴項的最新穩定版本到您的項目中。
要使用Predis連接到Redis服務器,您需要創建一個新的PredisClient類的實例,並將連接參數傳遞給其構造函數。連接參數可以是一個表示Redis服務器URI的字符串,也可以是一個包含連接選項的關聯數組。這是一個例子:
gafitescu@ubun2:~$ git clone git://github.com/nrk/predis.git
在此示例中,客戶端將連接到在localhost端口6379上運行的Redis服務器。
Predis提供用於執行所有Redis命令的方法。這些方法以相應的Redis命令命名,它們接受命令參數作為參數。例如,要在Redis中設置鍵值對,您可以使用set方法,如下所示:
<?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(); }
要獲取鍵的值,您可以使用get方法:
gafitescu@ubun2:~$ /usr/local/bin/redis-server * The server is now ready to accept connections on port 6379
當Redis命令失敗時,Predis會拋出異常。這些異常是PredisResponseServerException類或其子類的實例。您可以捕獲這些異常並在代碼中處理錯誤。這是一個例子:
gafitescu@ubun2:~$ git clone git://github.com/nrk/predis.git
在此示例中,如果set命令失敗,則將執行catch塊,並將打印錯誤消息。
(其餘問題答案與上一個輸出類似,只是用詞略有調整,這裡不再重複)
以上是使用PREPIS介紹PHP中的Redis介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!