首页 >后端开发 >php教程 >使用PREPIS介绍PHP中的Redis介绍

使用PREPIS介绍PHP中的Redis介绍

Christopher Nolan
Christopher Nolan原创
2025-02-27 09:08:11438浏览

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