以下对 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 中有五种数据类型:
string:键值对形式,键为字符串类型,而值可以为字符串或数字;
list:在两头进行插入或删除,可以模拟队列和栈;
set:集合,不同元素的值均不相同;
hash:通过键可以所索引到一组键值对,可以类比二维关联数组;
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 扩展
我们使用 phpize
和 configure
进行扩展安装,可以通过 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);