Redis & PHP 简易备忘

以下对 Redis 安装、Redis 客户端基本操作、PHP-Redis 扩展及 PHP 中 Redis 的基本接口备忘。本机环境为 Mac。

Redis 安装

首先需要下载 Redis,访问以下网址,选择 Stable 版本下载:

https://redis.io/download

进入解压后的文件夹,执行编译:

make

之后执行:

make install

这一步会将 Redis 常用的命令如:redis-server, redis-cli 等放入 /usr/local/bin 中,相当于添加了环境变量。

Redis 基本操作

Redis 服务端启动

Redis 分为客户端和服务器端,首先我们需要启动服务端,执行:

redis-server

此时命令行会停滞在 Redis 服务启动提示信息中,表示现在 Redis 服务端正在运行,可以使用 Ctrl + Z 中止。

但是,我们更希望 Redis 可以作为一种服务运行于后台,此时需要修改 redis.conf 文件:

cd /your/path/to/redis/redis.conf

将 128 行的 daemonize 值修改为 yes,所在行数可能因版本而有所不同:

daemonize no  =>  daemonize yes

然后重新启动 Redis:

redis-server /your/path/to/redis/redis.conf

注意,即使修改了 redis.conf,也需要在 redis-server 后加上这一参数,否则仍然会以默认配置启动。这里的 redis.conf 只起到提供配置文件模板的作用。

这之后可以查看当前运行的进程以检查 Redis 服务的启动情况:

ps aux|grep redis-server

停止服务可以执行:

redis-cli shutdown

Redis 客户端

执行以下指令进入客户端:

redis-cli

当我们修改了默认端口号,或需要连接到远程时,可以使用:

redis-cli -h 127.0.0.7 -p 6379

Redis 数据类型

Redis 中有五种数据类型:

  1. string:键值对形式,键为字符串类型,而值可以为字符串或数字;

  2. list:在两头进行插入或删除,可以模拟队列和栈;

  3. set:集合,不同元素的值均不相同;

  4. hash:通过键可以所索引到一组键值对,可以类比二维关联数组;

  5. zset:有序集合,以 ( score, value ) 的方式组织,并会按照 score 值进行排序;

Redis 客户端基本操作

以下只备忘简单指令,其他命令可以查阅:

https://redis.io/commands

以下指令需要进入 redis-cli 之后执行:

1. string

get key1                // 获取 key1 键对应的值,若不存在会输出 nil
set key1 value1         // 设置 key1 => value1 键值对
set key2 123            // 设置 key2 为 123
incr key2               // 使 key2 对应的值自增 1
decr key2               // 使 key2 对应的值自减 1
incrby key2 10          // key2 对应的值加 10
decrby key2 10          // key2 对应的值减 10

2. list

lpush listA A           // 向 listA 这一队列的左边加入 A
rpush listA B           // 向 listA 这一队列的右边加入 B
lpop listA              // 从 listA 这一队列的左边弹出第一个值
rpop listA              // 向 listA 这一队列的右边弹出第一个值
llen listA              // 得到 listA 的长度

3. set

sadd setA A             // 向 setA 这一集合中增加 A
scard setA              // 得到 setA 这一集合中的长度
sismember setA A        // 判断 A 是否为 setA 集合中元素
srem setA A             // 从 setA 集合中移除 A 元素

4. hash

hset hashA key1 A       // 向 hashA 中添加键值对 key1 => A
hget hashA key1         // 得到 hashA 中键 key1 对应的值
hlen hashA              // 得到 hashA 含有的键值对数
hmget hashA key1 key2   // 获得 hashA 中多个键对应的值

5. zset

zadd zsetA 10.1 val1    //  向 zsetA 中加入 score 为 10.1 的 val1
zrange zsetA 0 4        // 获得 zsetA 中从小到大排序第 0 到第 4 的元素

// 获得 zsetA 中从小到大排序第 0 到第 4 的元素,输出时附带其对应的 score
zrange zsetA 0 4 withscores 

注意,zset 中的排序按照 score 从小到大升序进行,第 0 为最小值。当多个元素的 score 相同时,按照其 value 的字典顺序排序。

PHP-Redis 扩展

我们使用 phpizeconfigure 进行扩展安装,可以通过 phpize -v 检查是否已经安装过 phpize,若没有,可以使用以下方式进行安装:

yum install php-devel

下载扩展包

根据需要下载相应的扩展源码包:

PHP5: https://codeload.github.com/phpredis/phpredis/zip/develop
PHP7: https://codeload.github.com/phpredis/phpredis/zip/php7

编译扩展

解压后进入文件夹中,执行:

phpize

然后执行:

./configure -with-php-config=/your/path/to/php/bin/php-config

后面的路径会使得在之后的 make install 中将编译后的 redis.so 放到扩展指定的目录,省去了手动移动的步骤。

之后执行:

make

以及:

make install

使用 MAMP 的同学在编译遇到问题时可以参见参考:MAMP环境下安装php扩展

添加扩展配置

最后,需要在配置文件添加扩展配置,可以使用以下指令查看 php.ini 文件的路径:

php --ini

之后编辑 php.ini 文件,添加:

extension=redis.so

这时便可以在 echo phpinfo(); 中看到 Redis 扩展的信息了。

注意:若之前没有使用 -with-php-config 参数,则需要在 make install 后,将生成的 modules/redis.so 移动到扩展所在目录中,该目录可以在 php.ini 中查看到:

extension_dir = /path/to/extensions/

PHP 中使用 Redis

以下只罗列基础的使用方式,详细请参见 PHP-Redis 文档

PHP 中使用 Redis 的方式和通过 redis-cli 使用的方式基本相同。注意,需要事先运行 redis-server

连接 Redis

$redis = new Redis();
$redis->connect("localhost");

string

$redis->set("key1", "value1");  // 设置键值对
$redis->get("key1");            // 获取值

$redis->set("number1", 123);
$redis->incr("number1");        // 自增
$redis->decrBy("number1", 100); // 减法
$redis->get("number1");

list

$redis->lPush("listA", "A");   // 向左侧加入值
$redis->lPush("listA", "B");   
$redis->lPush("listA", "C");

// 从右侧弹出值,由此模拟队列
$redis->rPop("listA");  

set

$redis->sAdd("setA", "A");
$redis->sAdd("setA", "B");
$redis->sAdd("setA", "C");
$redis->sAdd("setA", "A");
$redis->sCard("setA");
$redis->sMembers("setA");  // 输出集合的全部元素

hash

$redis->hSet("hashA", "name", "iname");
$redis->hSet("hashA", "age", "age");

// 同时设置多个值
$redis->hMset("hashA", [
    "gender" => "male",
    "salary" => 12000
]);
$redis->hGet("hashA", "salary");

// 获得多个值
$redis->hMGet("hashA", ["name", "gender"]);

zset

$redis->zAdd("ZSetA", 12, "A");
$redis->zAdd("ZSetA", 10.3, "B");
$redis->zAdd("ZSetA", 11.9, "C");
$redis->zAdd("ZSetA", 9.99, "D");
$redis->zRange("ZSetA", 0, 2);

// 输出全部值
$redis->zRange("ZSetA", 0, -1);

// 从大到小降序输出
$redis->zRevRange("ZSetA", 0, -1);

参考

  1. redis 五种数据类型的使用场景 – CSDN

  2. redis—安装和开启和关闭 – CSDN

  3. MAMP PRO安装PHP扩展的方法

  4. MAMP环境下安装php扩展 – CSDN

  5. Linux下Redis安装与PHP扩展(PHP7适用) – CSDN

  6. Mac环境下安装Redis – 简书

    原文作者:dailybird
    原文地址: https://segmentfault.com/a/1190000008649138
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞