# 前言

点我查看 - Redis 基本知识,快来回顾一下

点我查看 - Redis 订阅与 Redis Stream 技术

点我查看 - Redis 持久化 - RDB 与 AOF


一、 PHP 使用 PHPRedis

PHPRedis 简单介绍

  • 打开 GitHub - PHPRedis
  • c 写的 php 扩展。
  • 可以保持php-fpmredis 的长连接,性能更好。
  • 任何 PHP 版本可用。
  • 业务复杂,非常依赖 redis 时可用 PHPRedis

使用之前, 请确保已成功安装 redis 服务及 PHP Redis 扩展, 并且正常运行 PHP

安装流程请各位大大自行解决哈。

1.1 实例化连接本地服务

<?php# 1. 实例化连接本地 Redis
$obj = new Redis();
$obj->connect('127.0.0.1', 6379);# $redis_obj->connect('127.0.0.1', 6379); # 短链接$redis_obj->pconnect('127.0.0.1', 6379); # 长链接$redis_obj->auth('password'); # 登录验证密码, true|false$redis_obj->select(0); # 选择 redis 库, 如果不设置, 默认连接 0 数据库, 默认共 16 个库$redis_obj->close(); # 断开连接, 释放资源

1.2 字符串(strings) 实例

<?php# 设置单个键值
$redis_obj->set('is_collect', 1);# 设置单个键值 - 如果数据库中不存在键,则将参数中的字符串值设置为键的值。
$redis_obj->setNx('is_comment', 1);# 设置多个键值
$redis_obj->mset(['domain'=>'bqhub.com', 'no'=>'京-123456']);# 获取单个键值
$is_collect = $redis_obj->get('is_collect');
$is_comment = $redis_obj->get('is_comment');# 获取多个键值
$site_config = $redis_obj->mGet(['domain', 'no']);# 删除键
$redis_obj->del('is_collect');
$redis_obj->del(['is_collect', 'is_comment']);# 重新赋值
$redis_obj->getSet('is_collect', 'open');

1.3 哈希(hashes) 实例

<?php# 设置单个
$redis_obj->hSet('bqhub', 'domain', 'bqhub.com');
$redis_obj->hSet('bqhub', 'author', 'Chon');# 设置多个
$redis_obj->hMSet('blog', ['name'=>'BQHUBBlog', 'code'=>'123456']);# 获取单个
$bqhub_domain = $redis_obj->hGet('bqhub', 'domain'); # bqhub.com# 获取多个
$bqhub_data = $redis_obj->hMGet('bqhub', ['domain', 'author']);
$blog_data = $redis_obj->hMGet('blog', ['name', 'code']);# 根据键获取全部
$data = $redis_obj->hGetAll('bqhub');# 获取所有字段名
$keys = $redis_obj->hKeys('bqhub');# 获取所有值
$vals = $redis_obj->hVals('bqhub');# 删除
$redis_obj->hDel('bqhub', 'domain');

1.4 列表(lists) 实例

<?php# 左侧插入(列表不存在则创建)
$redis_obj->lPush('left_list_key', 'l1', 'l2', 'l3', 'l4');# 左侧插入(列表不存在, 则没有操作)
$redis_obj->lPushx('left_list_key', 'l11');# 右侧插入(列表不存在则创建)
$redis_obj->rPush('right_list_key', 'r1', 'r2', 'r3', 'r4');# 右侧插入(列表不存在, 则没有操作)
$redis_obj->rPushx('right_list_key', 'r11');# 查询列表 - 根据索引下标
$list = $redis_obj->lRange('left_list_key', 0 ,3);# 查询单个 - 根据索引下标
$index = $redis_obj->lIndex('left_list_key', 2);# 左侧第一个元素弹出
$redis_obj->lPop('left_list_key');# 左侧第一个元素弹出, 如果列表为空, 则等待超时停止或超时内发现元素后弹出
$redis_obj->blPop('left_list_key', 3);# 右侧第一个元素弹出
$redis_obj->rPop('right_list_key');# 右侧第一个元素弹出, 如果列表为空, 则等待超时停止或超时内发现元素后弹出
$redis_obj->brPop('right_list_key', 3);# 删除某数量的元素, # 大于0-从左往右数; 小于0-从右往左数; 等于0 - 删除所有
$redis_obj->lRem('left_list_key', 'l2', 3);# 保留某范围内的元素 - 根据索引
$redis_obj->lTrim('left_list_key', 0, 2);# 替换某索引的值
$redis_obj->lSet('left_list_key', 2, 'v22');# 获取列表的长度
$redis_obj->lLen('left_list_key');

1.5 无序集合(sets) 实例

<?php# 新增
$redis_obj->sAdd('set_key', 'set_value1', 'set_value2', 'set_value3');
$redis_obj->sAddArray('set_key_array', ['a_1', 'a_2', 'a_3']);# 查询
$set_key = $redis_obj->sMembers('set_key_array');# 删除
$redis_obj->sRem('set_key', 'set_value1', 'set_value2');# 判断是否是列表中的值
$is_member = $redis_obj->sIsMember('set_key', 'set_value3');# 随机移除一个并返回该值
$pop_value = $redis_obj->sPop('set_key_array');# 随机获取一个并返回该值
$rand_value = $redis_obj->sRandMember('set_key_array');# 差集 - 只获取第一个集合与后续集合之间的差集
$s_diff = $redis_obj->sDiff('set_key_array', 'set_key');# 交集 - 返回所有集合间的交集
$s_inter = $redis_obj->sInter('set_key_array', 'set_key');# 并集 - 返回所有集合间的并集
$union = $redis_obj->sUnion('set_key_array', 'set_key');

1.6 有序集合(Sorted Set) 实例

<?php# 设置
$redis_obj->zAdd('z_set_1', 90, '语文', 108, '数学', 92, '英语');# 查询 - 根据值获取分数
$score = $redis_obj->zScore('z_set_1', '语文');# 查询 - 从小到大 - 根据 下标排序, true(可选): 是否显示分数(例: 获取第1名到第5名)
$z_range = $redis_obj->zRange('z_set_1', 0, 1, true);# 查询 - 从大到小 - 根据 下标排序, true(可选): 是否显示分数
$z_rev_range = $redis_obj->zRevRange('z_set_1', 0, 1, true);# 查询 - 从小到大 - 根据 分数 查询, withscores(可选): 显示分数; limit(可选): 分页
$z_range_score = $redis_obj->zRangeByScore('z_set_1', 60, 100, array('withscores' => TRUE, 'limit'=>array(0,2)));# 查询 - 从大到小 - 根据 分数 查询, withscores(可选): 显示分数; limit(可选): 分页
$z_rev_range_score = $redis_obj->zRevRangeByScore('z_set_1', 120, 90, array('withscores' => TRUE, 'limit'=>array(0,2)));# 查询排名 - 从小到大 - 根据值
$z_rank = $redis_obj->zRank('z_set_1', '数学');# 查询排名 - 从大到小 - 根据值
$z_rev_rank = $redis_obj->zRevRank('z_set_1', '数学');# 查询元素总数
$z_card = $redis_obj->zCard('z_set_1');# 查询区间个数
$z_count = $redis_obj->zCount('z_set_1', 90, 100);# 移除 - 移除 count 个最大值的元素
$redis_obj->zPopMax('z_set_1', 2);# 移除 - 移除 count 个最小值的元素
$redis_obj->zPopMin('z_set_1', 3);# 移除 - 根据元素值
$z_rem = $redis_obj->zRem('z_set_1', '数学');# 移除 - 根据索引范围
$redis_obj->zRemRangeByRank('z_set_1', 0, 2);# 移除 - 根据分数范围
$redis_obj->zRemRangeByScore('z_set_1', 0, 60);# 加法
$redis_obj->zIncrBy('z_set_1', '10', '数学');

1.7 服务操作

<?php# 查看状态
$redis_obj->info();# 获取当前数据库中 键 的个数
$size = $redis_obj->dbSize();# 清空所有数据库
$redis_obj->flushAll();# 清空当前数据库
$redis_obj->flushDB();# rdb - save 保存
$redis_obj->save();# rdb - bgsave 保存
$redis_obj->bgsave();# 监视一个或多个 key,如果在事务执行之前,相关 key 被其他命令所改动,则事务将被打断不执行
$redis_obj->watch('collect_num');# 开启事务
$redis_obj->multi(Redis::MULTI);# 执行一些操作# 执行事务块内的所有命令
$redis_obj->exec();# 取消事务
$redis_obj->discard();# 开启管道, 一大堆命令,一次性的准备、执行、返回
$redis_obj->multi(Redis::PIPELINE);# 同样适合执行 管道命令
$redis_obj->exec();

二、 PHP 使用 Predis

Predis

  • 打开 GitHub - Predis

  • php 写的工具库。

  • composer 即可安装。

  • PHP5.3.2 版本之上可用。

  • 应用场景简单时可用 Predis

2.1 实例化连接本地服务

<?php# composer 引入 predis 后, 直接自动加载
require('./vendor/autoload.php');use Predis\Client;# 1. 连接IP、端口、要使用的数据库序号(默认 16 个数据库)
$server = array('host'=>'127.0.0.1', 'port'=>'6379', 'database'=>1);$predis_obj = new Client($server);

2.2 字符串(strings) 实例

<?php# 设置单个值
$predis_obj->set('is_collect', 'YES');# 设置单个键值 - 如果数据库中不存在键,则将参数中的字符串值设置为键的值
$predis_obj->setnx('is_comment', 1);# 设置多个键值
$predis_obj->mset(['domain'=>'bqhub.com', 'no'=>'京-123456']);# 获取单个键值
$is_collect = $predis_obj->get('is_collect');# 获取多个值 - 根据键
$site_config = $predis_obj->mget(['domain', 'no', 'is_collect']);# 删除键
$predis_obj->del('is_collect');
$predis_obj->del(['is_collect', 'domain']);# 重新赋值
$predis_obj->getset('is_collect', 'NO');

2.3 哈希(hashes) 实例

<?php# 设置单个
$predis_obj->hset('bqhub', 'domain', 'bqhub.com');
$predis_obj->hset('bqhub', 'author', 'Chon');# 设置多个
$predis_obj->hmset('blog', ['name'=>'BQHUBBlog', 'code'=>'123456']);# 获取单个
$domain = $predis_obj->hget('bqhub', 'domain'); # bqhub.com# 获取多个
$bqhub_data = $predis_obj->hmget('bqhub', ['domain', 'author']);
$blog_data = $predis_obj->hmget('blog', ['name', 'code']);# 根据键获取全部
$data = $predis_obj->hgetall('bqhub');# 获取所有字段名
$keys = $predis_obj->hkeys('bqhub');# 获取所有值
$values = $predis_obj->hvals('bqhub');# 删除
$predis_obj->hdel('bqhub', 'domain');

2.4 列表(lists) 实例

<?php# 左侧插入(列表不存在则创建)
$predis_obj->lpush('left_list_key', ['l1', 'l2', 'l3', 'l4']);# 左侧插入(列表不存在, 则没有操作)
$predis_obj->lpushx('left_list_key', ['l1', 'l2', 'l3', 'l4']);# 右侧插入(列表不存在则创建)
$predis_obj->rpush('right_list_key', ['r1', 'r2', 'r3', 'r4']);# 右侧插入(列表不存在, 则没有操作)
$predis_obj->rpushx('left_list_key', ['r1', 'r2', 'r3', 'r4']);# 查询列表 - 根据索引下标
$list = $predis_obj->lrange('left_list_key', 0, 2);# 查询单个 - 根据索引下标
$index = $predis_obj->lindex('left_list_key', 2);# 左侧第一个元素弹出
$predis_obj->lpop('left_list_key');# 左侧第一个元素弹出, 如果列表为空, 则等待超时停止或超时内发现元素后弹出
$predis_obj->blpop('left_list_key', 3);# 右侧第一个元素弹出
$predis_obj->rpop('right_list_key');# 右侧第一个元素弹出, 如果列表为空, 则等待超时停止或超时内发现元素后弹出
$predis_obj->brpop('right_list_key', 3);# 删除某数量的元素, # 大于0-从左往右数; 小于0-从右往左数; 等于0 - 删除所有
$predis_obj->lrem('left_list_key', 3, 'l2');# 保留某范围内的元素 - 根据索引
$predis_obj->ltrim('left_list_key', 0, 2);# 替换某索引的值
$predis_obj->lset('left_list_key', 2, 'l22');# 获取列表的长度
$len = $predis_obj->llen('left_list_key');

2.5 无序集合(sets) 实例

<?php# 新增
$predis_obj->sadd('set_key', ['set_v1', 'set_v2', 'set_v3', 'set_v4']);
$predis_obj->sadd('set_key_1', ['set_1', 'set_2', 'set_3', 'set_4']);# 查询
$set_key = $predis_obj->smembers('set_key');# 删除
$predis_obj->srem('set_key', 'set_v3');# 判断是否是列表中的值
$is_member = $predis_obj->sismember('set_key', 'set_v2');# 随机移除一个并返回该值
$pop_value = $predis_obj->spop('set_key');# 随机获取一个并返回该值
$rand_value = $predis_obj->srandmember('set_key');# 差集 - 只获取第一个集合与后续集合之间的差集
$s_diff = $predis_obj->sdiff(['set_key', 'set_key_1']);
$s_store_diff = $predis_obj->sdiffstore('new_set_key', ['set_key', 'set_key_1']); # 差集保存至新集合# 交集 - 返回所有集合间的交集
$s_inter = $predis_obj->sinter(['set_key', 'set_key_1']);
$s_store_inter = $predis_obj->sinterstore('new_set_key', ['set_key', 'set_key_1']); # 交集保存至新集合# 并集 - 返回所有集合间的并集
$s_union = $predis_obj->sunion(['set_key', 'set_key_1']);
$s_store_union = $predis_obj->sunionstore('new_set_key', ['set_key', 'set_key_1']); # 并集保存至新集合

2.6 有序集合(Sorted Set) 实例

<?php# 设置
$predis_obj->zadd('z_set', ['语文'=>102, '政治'=>90, '数学'=>113, '英文'=>89]);# 查询 - 根据值获取分数
$score = $predis_obj->zscore('z_set', '语文');# 查询 - 从小到大 - 根据 下标排序, withscores(可选): 是否显示分数(例: 获取第1名到第5名)
$z_range = $predis_obj->zrange('z_set', 0, 2, 'withscores');# 查询 - 从大到小 - 根据 下标排序, withscores(可选): 是否显示分数
$z_range = $predis_obj->zrevrange('z_set', 0, 2, 'withscores');# 查询 - 从小到大 - 根据 分数 查询, withscores(可选): 显示分数; limit(可选): 分页
$z_range_score = $predis_obj->zrangebyscore('z_set', 60, 100, ['withscores'=>true, 'limit'=>[0, 1]]);# 查询 - 从小到大 - 根据 分数 查询, withscores(可选): 显示分数; limit(可选): 分页
$z_rev_range_score = $predis_obj->zrevrangebyscore('z_set', 100, 70, ['withscores'=>true, 'limit'=>[0, 1]]);# 查询排名 - 从小到大 - 根据值
$z_rank = $predis_obj->zrank('z_set', '数学');# 查询排名 - 从大到小 - 根据值
$z_rev_rank = $predis_obj->zrevrank('z_set', '英文');# 查询元素总数
$z_card = $predis_obj->zcard('z_set');# 查询区间个数
$z_count = $predis_obj->zcount('z_set', 60, 100);# 移除 - 移除 count 个最大值的元素
$predis_obj->zpopmax('z_set', 3);# 移除 - 移除 count 个最小值的元素
$predis_obj->zpopmin('z_set', 2);# 移除 - 根据元素值
$predis_obj->zrem('z_set', '数学');# 移除 - 根据索引范围
$predis_obj->zremrangebyrank('z_set', 0, 2);# 移除 - 根据分数范围
$predis_obj->zremrangebyscore('z_set', 60, 100);# 加法
$predis_obj->zincrby('z_set', 10, '英文');

2.7 服务操作

<?php# 查看状态
$info = $predis_obj->info();# 获取当前数据库中 键 的个数
$size = $predis_obj->dbsize();# 清空所有数据库
$predis_obj->flushall();# 清空当前数据库
$predis_obj->flushdb();# rdb - save 保存
$predis_obj->save();# rdb - bgsave 保存
$predis_obj->bgsave();# 监视一个或多个 key,如果在事务执行之前,相关 key 被其他命令所改动,则事务将被打断不执行
$predis_obj->watch('collect_num');# 开启事务
$predis_obj->multi();# 执行一些操作# 执行事务块内的所有命令
$predis_obj->exec();# 取消事务
$predis_obj->discard();# 开启管道, 一大堆命令,一次性的准备、执行、返回
$predis_obj->pipeline();# 同样适合执行 管道命令
$predis_obj->exec();

点我查看 - Redis 基本知识,快来回顾一下

点我查看 - Redis 订阅与 Redis Stream 技术

点我查看 - Redis 持久化 - RDB 与 AOF

PHP 使用 PHPRedis 与 Predis相关推荐

  1. phpredis 和 predis

    phpredis 和 predis phpredis 是使用c写的php扩展,predis 是使用纯php写的. 在性能上的区别当然是扩展更好一些,但其实这两个实现还有更大的区别,就是连接的保持. p ...

  2. phpredis与predis的区别

    phpredis 是使用 c 写的 php 扩展,predis 是使用纯 php 写的. 在性能上的区别当然是扩展更好一些,但其实这两个实现还有更大的区别,就是连接的保持. phpredis 在扩展中 ...

  3. predis.php,phpredis和predis之间有何区别?phpredis和predis的区别对比

    本篇文章给大家带来的内容是关于phpredis和predis之间有何区别?phpredis和predis的区别对比,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. phpredis和p ...

  4. Redis的PHP客户端rediska、phpredis、Predis介绍

    前言 Redis支持的客户端种类非常多,包括C.Java.PHP.Python等,本文主要介绍PHP客户端的安装和使用. Redis的客户端实际上担负了通过网络协议与Redis Server进行通信的 ...

  5. laravel 中phpredis 和predis

    phpredis 是使用 C 写的 PHP 扩展 PHP 扩展库 (PHP Extension Community Library) 提供了一系列已知的扩展库,由 C.C++ 等其他语言编写.PECL ...

  6. redis客户端 predis与phpredis 比较

    predis目录中有一个FAQ.markdown文件,FAQ中文意思经常问到的问题,该文档对redis的客户端predis和phpredis进行了比较分析,优点,不足做了说明,还是老外的文档清楚,一看 ...

  7. redis php 书,predis VS phpRedis

    predis与phpRedis是php连接redis最常用的两个包.在工作项目中,由于十分依赖redis,因此比较predis与phpRedis两者之间的性能差异. 写在前面 测试所用代码地址-git ...

  8. php开发使用predis(thinkphp框架,composer,windows环境练习)

    php开发中使用predis 目录 安装 项目中使用 踩的坑 相关资源 目录 关于在php开发过程中使用phpredis拓展还是predis类库这里不做详细解释:目前了解到的结论是性能方面还是使用c语 ...

  9. Predis\ClientException: Command ‘ZPOPMAX‘ is not a registered Redis command

    问题 在使用predis包的时候,使用redis的ZPOPMAX命令,发现报错了,错误提醒如下: Predis\ClientException: Command 'ZPOPMAX' is not a ...

最新文章

  1. SAP SD微观研究之销售订单类型配置里有关PO的几个字段
  2. 【Linux 内核 内存管理】Linux 内核堆内存管理 ① ( 堆内存管理 | 内存描述符 mm_struct 结构体 | mm_struct 结构体中的 start_brk、brk 成员 )
  3. git已有项目修改提交
  4. Oracle不带传出参数的存储过程创建及调用
  5. 【若依(ruoyi)】向DAO中传递动态参数
  6. C字节对齐与C++类对象内存布局
  7. 黑客是互联网的高危职业,选择不慎,很可能如“他们”一样入门到入狱!
  8. [四川金信石招人]技术总监架构师测试工程师
  9. [转载] Python3入门精通基础教程(合集)
  10. iOS:菜单控制器和菜单项:UIMenuController和UIMenuItem
  11. java 按钮垂直居中_WPF按钮中的文本内容未垂直居中
  12. IDEA光标跟随原因是jdk载入的问题BUG 修正 需要I安装最新版本1.8JDK 1.9之后的不清楚 谨慎...
  13. openstack rabbitmq报错导致识别不到计算节点 解决方案
  14. 物联网技术实现农业自动化
  15. SSL-ZYC 邮票
  16. 乳腺癌组织病理图像分类
  17. 上海浦东新区计算机学校排名2015,最新2015浦东新区初中排名 分为四个档次
  18. stm32带BootLoader情况下,需要重新映射中断向量表
  19. SpringCloud微服务(七)——Bus服务消息总线
  20. 有感于“学术官僚化、大学衙门化,教授奴才化”

热门文章

  1. 如何在货币市场进行交易(上)
  2. 且将新火试新茶,诗酒趁年华
  3. Mysql数据库特点和理解
  4. vue使用高德地图,精确定位ip定位,获取城市、地区位置
  5. 一款GUI跨平台自动化测试工具分享——Squish,支持Qt框架
  6. 透彻解析Unity Camera的Clear Flag属性
  7. 技巧 | 如何快速生成文件清单
  8. 提升小目标检测新的包围框相似度度量:Normalized Gaussian Wasserstein Distance
  9. 还在用ps抠图抠瞎眼?机器学习通用背景去除产品诞生记
  10. 利用gitlab搭建静态页面并开启https Pages服务