PHP操作Redis常用技巧

From: http://www.php.cn/php-weizijiaocheng-395387.html

这篇文章主要介绍了PHP操作Redis常用技巧,结合实例形式总结分析了php针对redis的连接、认证、string、hash等操作技巧与注意事项,需要的朋友可以参考下

 

本文实例讲述了PHP操作Redis常用技巧。分享给大家供大家参考,具体如下:

一、Redis连接与认证

 

//连接参数:ip、端口、连接超时时间,连接成功返回true,否则返回false

$ret = $redis->connect('127.0.0.1', 6379, 30);

//密码认证:成功返回true,否则返回false

$ret = $redis->auth('123456');

 

二、String操作

 

//设置键值:成功返回true,否则返回false

$redis->set('mystr', 'Welcome!');

//获取键值:成功返回String类型键值,若key不存在或不是String类型则返回false

$ret = $redis->get('mystr');

//从某个key所存储的字符串的指定偏移量开始,替换为另一指定字符串,成功返回替换后新字符串的长度。

$ret = $redis->setRange('mystr', 7, ' to Beijing!');

//获取存储在指定key中字符串的子字符串。

$ret = $redis->getRange('mystr', 0, 6);

//设置新值,返回旧值:若key不存在则设置值,返回false

$ret = $redis->getSet('mystr', 'hi man');

//一次设置多个键值对:成功返回true。

$ret = $redis->mset(['name' => 'jet', 'age' => 18]);

//一次获取多个key的值:返回一个键值对数组,其中不存在的key值为false。

$ret = $redis->mget(['name', 'age']);

//设置指定key的值及其过期时间,单位:秒。

//参数:键名,过期时间,键值。成功返回true。

$ret = $redis->setex('name', 10, 'jetwu');

//以毫秒为单位设置指定key的值和过期时间。成功返回true。

$ret = $redis->psetex('name', 10, 'jetwu');

//key的值不存在时,才为其设置值。key不存在且设置成功返回true,否则返回false。

$ret = $redis->setnx('name', 'boby');

//setnx命令的批量操作。只有在给定所有key都不存在的时候才能设置成功,只要其中一个key存在,所有key都无法设置成功。

$ret = $redis->msetnx(['country' => 'China', 'city' => 'Shenzhen']);

//获取指定key存储的字符串的长度,key不存在返回0,不为字符串返回false。

$ret = $redis->strlen('name');

//将指定key存储的数字值增加1。若key不存在会先初始化为0再增加1,若key存储的不是整数值则返回false。成功返回key新值。

$ret = $redis->incr('age');

//给指定key存储的数字值增加指定增量值。

$ret = $redis->incrBy('age', 10);

//给指定key存储的数字值增加指定浮点数增量。

$ret = $redis->incrByFloat('age', 1.5);

//将指定key存储的数字值减一。

$ret = $redis->decr('age');

//将指定key存储的数字值减去指定减量值。

$ret = $redis->decrBy('age', 10);

//为指定key追加值到原值末尾,若key不存在则相对于set()函数。

$ret = $redis->append('mystr', 'haha');

 

三、Hash操作

 

//为hash表中的字段赋值。成功返回1,失败返回0。若hash表不存在会先创建表再赋值,若字段已存在会覆盖旧值。

$ret = $redis->hSet('user', 'realname', 'jetwu');

//获取hash表中指定字段的值。若hash表不存在则返回false。

$ret = $redis->hGet('user', 'realname');

//查看hash表的某个字段是否存在,存在返回true,否则返回false。

$ret = $redis->hExists('user', 'realname');

//删除hash表的一个字段,不支持删除多个字段。成功返回1,否则返回0。

$ret = $redis->hDel('user', 'realname');

//同时设置某个hash表的多个字段值。成功返回true。

$ret = $redis->hMset('user', ['name' => 'jet', 'age' => 18]);

//同时获取某个hash表的多个字段值。其中不存在的字段值为false。

$ret = $redis->hMget('user', ['name', 'age']);

//获取某个hash表所有的字段和值。

$ret = $redis->hGetAll('user');

//获取某个hash表所有字段名。hash表不存在时返回空数组,key不为hash表时返回false。

$ret = $redis->hKeys('user');

//获取某个hash表所有字段值。

$ret = $redis->hVals('user');

//为hash表中不存在的字段赋值。若hash表不存在则先创建,若字段已存在则不做任何操作。设置成功返回true,否则返回false。

$ret = $redis->hSetNx('user', 'realname', 'jetwu');

//获取某个hash表的字段数量。若hash表不存在返回0,若key不为hash表则返回false。

$ret = $redis->hLen('user');

//为hash表中的指定字段加上指定增量值,若增量值为负数则相当于减法操作。若hash表不存在则先创建,若字段不存在则先初始化值为0再进行操作,若字段值为字符串则返回false。设置成功返回字段新值。

$ret = $redis->hIncrBy('user', 'age', 10);

//为hash表中的指定字段加上指定浮点数增量值。

$ret = $redis->hIncrBy('user', 'age', 1.5);

 

四、List操作

 

//从list头部插入一个值。

$ret = $redis->lPush('city', 'guangzhou');

//从list尾部插入一个值。

$ret = $redis->rPush('city', 'guangzhou');

//获取列表指定区间中的元素。0表示列表第一个元素,-1表示最后一个元素,-2表示倒数第二个元素。

$ret = $redis->lrange('city', 0, -1);//查看队列所有元素

//将一个插入已存在的列表头部,列表不存在时操作无效。

$ret = $redis->lPushx('city', 'hangzhou');

//将一个或多个值插入已存在的列表尾部,列表不存在时操作无效。

$ret = $redis->rPushx('city', 'hangzhou');

//移除并返回列表的第一个元素,若key不存在或不是列表则返回false。

$ret = $redis->lPop('city');

//移除并返回列表的最后一个元素,若key不存在或不是列表则返回false。

$ret = $redis->rPop('city');

//移除并获取列表的第一个元素。如果列表没有元素则会阻塞列表直到等待超时或发现可弹出元素为止。

//参数:key,超时时间(单位:秒)

//返回值:[0=>key,1=>value],超时返回[]

$ret = $redis->blPop('city', 10);

//移除并获取列表的最后一个元素。如果列表没有元素则会阻塞列表直到等待超时或发现可弹出元素为止。

//参数:key,超时时间(单位:秒)

//返回值:[0=>key,1=>value],超时返回[]

$ret = $redis->brPop('city', 10);

//移除列表中最后一个元素,将其插入另一个列表头部,并返回这个元素。若源列表没有元素则返回false。

$ret = $redis->rpoplpush('city', 'city2');

//移除列表中最后一个元素,将其插入另一个列表头部,并返回这个元素。如果列表没有元素则会阻塞列表直到等待超时或发现可弹出元素为止。

//参数:源列表,目标列表,超时时间(单位:秒)

//超时返回false

$ret = $redis->brpoplpush('city', 'city2', 10);

//返回列表长度。

$ret = $redis->lLen('city');

//通过索引获取列表中的元素。若索引超出列表范围则返回false。

$ret = $redis->lindex('city', 0);

//通过索引设置列表中元素的值。若是索引超出范围,或对一个空列表进行lset操作,则返回false。

$ret = $redis->lSet('city', 2, 'changsha');

//在列表中指定元素前或后面插入元素。若指定元素不在列表中,或列表不存在时,不执行任何操作。

//参数:列表key,Redis::AFTER或Redis::BEFORE,基准元素,插入元素

//返回值:插入成功返回插入后列表元素个数,若基准元素不存在返回-1,若key不存在返回0,若key不是列表返回false。

$ret = $redis->lInsert('city', Redis::AFTER, 'changsha', 'nanjing');

//根据第三个参数count的值,移除列表中与参数value相等的元素。

//count > 0 : 从表头开始向表尾搜索,移除与value相等的元素,数量为count。

//count < 0 : 从表尾开始向表头搜索,移除与value相等的元素,数量为count的绝对值。

//count = 0 : 移除表中所有与value相等的值。

//返回实际删除元素个数

$ret = $redis->lrem('city', 'guangzhou', -2);

//对一个列表进行修剪,只保留指定区间的元素,其他元素都删除。成功返回true。

$ret = $redis->ltrim('city', 1, 4);

 

五、Set操作

 

//将一个元素加入集合,已经存在集合中的元素则忽略。若集合不存在则先创建,若key不是集合类型则返回false,若元素已存在返回0,插入成功返回1。

$ret = $redis->sAdd('myset', 'hello');

//返回集合中所有成员。

$ret = $redis->sMembers('myset');

//判断指定元素是否是指定集合的成员,是返回true,否则返回false。

$ret = $redis->sismember('myset', 'hello');

//返回集合中元素的数量。

$ret = $redis->scard('myset');

//移除并返回集合中的一个随机元素。

$ret = $redis->sPop('myset');

//返回集合中的一个或多个随机成员元素,返回元素的数量和情况由函数的第二个参数count决定:

//如果count为正数,且小于集合基数,那么命令返回一个包含count个元素的数组,数组中的元素各不相同。

//如果count大于等于集合基数,那么返回整个集合。

//如果count为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为count的绝对值。

$ret = $redis->sRandMember('myset', 2);

//移除集合中指定的一个元素,忽略不存在的元素。删除成功返回1,否则返回0。

$ret = $redis->srem('myset', 'hello');

//迭代集合中的元素。

//参数:key,迭代器变量,匹配模式,每次返回元素数量(默认为10个)

$ret = $redis->sscan('myset', $it, 'a*', 5);

//将指定成员从一个源集合移动到一个目的集合。若源集合不存在或不包含指定元素则不做任何操作,返回false。

//参数:源集合,目标集合,移动元素

$ret = $redis->sMove('myset', 'myset2', 'aaa');

//返回所有给定集合之间的差集,不存在的集合视为空集。

$ret = $redis->sDiff('myset', 'myset2', 'myset3');

//将所有给定集合之间的差集存储在指定的目的集合中。若目的集合已存在则覆盖它。返回差集元素个数。

//参数:第一个参数为目标集合,存储差集。

$ret = $redis->sDiffStore('myset3', 'myset', 'myset2');

//返回所有给定集合的交集,不存在的集合视为空集。

$ret = $redis->sInter('myset', 'myset2', 'myset3');

//将所有给定集合的交集存储在指定的目的集合中。若目的集合已存在则覆盖它。返回交集元素个数。

//参数:第一个参数为目标集合,存储交集。

$ret = $redis->sInterStore('myset4', 'myset', 'myset2', 'myset3');

//返回所有给定集合的并集,不存在的集合视为空集。

$ret = $redis->sUnion('myset', 'myset2', 'myset3');

//将所有给定集合的并集存储在指定的目的集合中。若目的集合已存在则覆盖它。返回并集元素个数。

//参数:第一个参数为目标集合,存储并集。

$ret = $redis->sUnionStore('myset4', 'myset', 'myset2', 'myset3');

 

六、Zset操作

 

//将一个或多个成员元素及其分数值加入到有序集当中。如果某个成员已经是有序集的成员,则更新这个成员的分数值,并通过重新插入这个成员元素,来保证该成员在正确的位置上。分数值可以是整数值或双精度浮点数。

$ret = $redis->zAdd('scores', 98, 'English', 90, 'physics');

//返回有序集中指定区间内的成员。成员按分数值递增排序,分数值相同的则按字典序来排序。

//参数:第四个参数表示是否返回各个元素的分数值,默认为false。

$ret = $redis->zRange('scores', 0, -1, true);//查看Zset所有成员以及它们各自的分数值

//返回有序集中指定区间内的成员。成员按分数值递减排序,分数值相同的则按字典序的逆序来排序。

$ret = $redis->zReverseRange('scores', 0, -1, true);

//返回有序集中指定分数区间的成员列表,按分数值递增排序,分数值相同的则按字典序来排序。默认使用闭区间。

$ret = $redis->zRangeByScore('scores', 90, 100, ['withscores'=>true]);

//返回有序集中指定分数区间的成员列表,按分数值递减排序,分数值相同的则按字典序的逆序来排序。注意,区间表示的时候大值在前,小值在后,默认使用闭区间。

$ret = $redis->zRevRangeByScore('scores', 100, 90, ['withscores'=>true]);

//迭代有序集合中的元素。

//返回值:[元素名=>分数值,,..]

$ret = $redis->zscan('scores', $it, '', 10);

//返回指定有序集的元素数量。

$ret = $redis->zCard('scores');

//返回有序集中指定分数区间的成员数量。

$ret = $redis->zCount('scores', 90, 100);

//返回有序集中指定成员的分数值。若成员不存在则返回false。

$ret = $redis->zScore('scores', 'math');

//返回有序集中指定成员的排名,按分数值递增排序。分数值最小者排名为0。

$ret = $redis->zRank('scores', 'chemistry');

//返回有序集中指定成员的排名,按分数值递减排序。分数值最大者排名为0。

$ret = $redis->zRevRank('scores', 'chemistry');

//移除有序集中的一个或多个成员,忽略不存在的成员。返回删除的元素个数。

$ret = $redis->zRem('scores', 'chemistry', 'English');

//移除有序集中指定排名区间的所有成员。

$ret = $redis->zRemRangeByRank('scores', 0, 2);

//移除有序集中指定分数值区间的所有成员。

$ret = $redis->zRemRangeByScore('scores', 80, 90);

//对有序集中指定成员的分数值增加指定增量值。若为负数则做减法,若有序集不存在则先创建,若有序集中没有对应成员则先添加,最后再操作。

$ret = $redis->zIncrBy('scores', 2, 'Chinese');

//计算给定一个或多个有序集的交集,并将其存储到一个目的有序集中。结果集中某个成员的分数值是所有给定集下该成员分数值之和。

$ret = $redis->zinterstore('zset3', 'zset2', 'zset1');

//计算给定一个或多个有序集的并集,并将其存储到一个目的有序集中。结果集中某个成员的分数值是所有给定集下该成员分数值之和。

$ret = $redis->zunionstore('zset3', 'zset2', 'zset1');

 

 

相关推荐:

PHP操作JSON方法大全

30个php操作redis常用的方法代码例子

php操作redis的命令分享

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/402794.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IO调度算法

IO调度算法的选择 一) I/O调度程序的总结 1) 当向设备写入数据块或是从设备读出数据块时,请求都被安置在一个队列中等待完成. 2) 每个块设备都有它自己的队列. 3) I/O调度程序负责维护这些队列的顺序,以更有效地利用介质.I/O调度程序将无序的I/O操作变为有序的I/O操作. 4) 内核…

ORA-01555 原因与解决

ORA-01555 原因与解决&#xff1a; 前面提到了ORA-01555错误&#xff0c;那么现在来看一下ORA-01555错误是怎样产生的。由于回滚段是循环使用的&#xff0c;当事务提交以后&#xff0c;该事务占用的回滚段事务会被标记为非活动&#xff0c;回滚段空间可以被覆盖重用。那么一个问…

使用css优雅解决文字两端对齐的方式之一

效果图 HTML <body><div>学校</div><div>班级</div><div>班主任</div><div>上课时间</div><div>名字</div></body>CSS div {margin: 10px 0;width: 70px;border: 1px solid brown;text-align: just…

centos7 下安装Poco

参考&#xff1a; https://pocoproject.org/download.html 以下是我自己安装时的步骤&#xff0c;亲自实践&#xff01; 1. 下载 git clone -b master https://github.com/pocoproject/poco.git 2. 安装依赖包 切换至root用户 yum install mysql mysql-devel mysql # 我…

DPlist

DP大法&#xff08;之POJ&#xff09;&#xff1a; [1]POJ 动态规划题目列表 http://cippus.dlut.edu.cn/forum/posts/list/45.page容易&#xff1a; 1018,1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1208, 1276, 1322, 1414, 1456, 1458, 1609, 1644, 1664…

学习《css世界》笔记之loading三点动画效果

动画实例 HTML <div>正在加载中<span>...</span></div>CSS span {display: inline-block;height: 1em;line-height: 1;text-align: left;vertical-align: -0.25em;/* 属性设置元素的垂直对齐方式。指定为负长度&#xff0c;可以使元素降低 */overfl…

关于今天

今天天气晴朗,晴空万里,万里无云,哈哈... 早上起来的时候,大雾,妖风四起. 然后早上起来居然就玩了一天的 冰封要塞. 说说玩了后的心得吧. 推塔游戏,额,这是CF第一次推出的这种模式.可以说和dota和英雄联盟有些相似.估计是某人从dota和英雄联盟这么火的情况下想出来的这招. 推塔…

Mac下安装event库

因为使用的GatewayWorker框架使用了swoole&#xff0c;但swoole依赖于event&#xff0c;所以必须安装下event扩展&#xff01; 1. 最初使用brew install libevent安装了下&#xff0c;运行gatewayworker发现错误依然存在&#xff01; 2. 考虑到是php里使用event&#xff0c;所…

Road Construction

【题目描述】 某岛屿上有N个旅游景点&#xff0c;任意两个旅游景点之间能够连通&#xff0c;但道路部门正在对某条道路进行施工&#xff0c;禁止游客通行&#xff0c;为了使所有旅游景点依然能够正常开放&#xff0c;道路部门决定搭建一些临时桥梁&#xff0c;使得无论哪条道路…

学习《css世界》笔记之content自动添加开启闭合符号

实例 HTML <p lang"zh"><q>啦啦德玛西亚</q></p><p lang"en"><q>This book is very good!</q></p><p lang"no"><q>denne bog er fantasisk!</q></p><p class"…

Sybase用户登录以后的自动运行脚本

最近开始学习sybase&#xff0c;对学习过程中遇到的问题会在此做以记录&#xff0c;希望和大家共同来学习。 sybase&#xff08;ASE&#xff09;在用户登录之后可以指定自动运行一个脚本&#xff0c;执行指定的操作。一般为自定义的存储过程。 15.7之前的版本采用 添加&#xf…

php自动加载指定目录下的类文件

From: https://www.cnblogs.com/CpNice/p/4369399.html 网上找到的类&#xff0c;非常有用&#xff0c;文件名: autoload.php <?php /*** Created by PhpStorm.* User: zcm* Mail: zhouciming163.com* Date: 2018/10/10 上午10:20*/if(!defined(ROOTDIR)) {define(ROOTDI…

maven+jetty项目在tomcat部署

步骤1&#xff1a;项目打包 clean install 步骤二&#xff1a;拷贝war 包到tomcat下 步骤三&#xff1a;修改server.xml文件的端口 步骤四&#xff1a;启动tomcat,注意jetty的项目是不需要带项目名的&#xff0c;Tomcat的项目需要加上项目名。 温馨提示&#xff0c;在启动tomca…

学习《css世界》笔记之多行文本实现垂直居中

效果图 HTML <div class"box"><div class"content">具有行高实现的多行文字垂直居中效果&#xff0c;需要属性vertical-align帮助</div> </div>CSS .box{width: 200px;line-height: 120px;background-color: #f0f0f0;}.content{…

c++服务器websocket支持

From: https://blog.csdn.net/u010223072/article/details/80637127 介绍 目前公司服务器是c tcp的网络架构&#xff0c;现在想用这套做h5游戏&#xff0c;所以要扩展支持websocket通信。 那么什么是websocket&#xff1f;它和tcp有什么区别&#xff1f;这些随便一搜一大把&…

Ubuntu10.04制作官方源镜像以及搭建本地源

不能上网、网速慢、共享等等需求&#xff0c;使我们不能或者不想使Ubuntu10.04在线安装软件包&#xff0c;而是需要一个本地的更新源。通过apt-mirror工具&#xff0c;我们可以轻松制作官方源的本地镜像&#xff0c;通过本地镜像&#xff0c;我们可以本地安装更新软件. 1. 安装…

学习《css世界》笔记之使用vertical-align数值实现文字和小图标对齐

效果图 HTML <p>请选择<i class"icon-arrow"></i></p> <p>请选择<i class"icon-arrow valing-1"></i></p> <p>请选择<i class"icon-arrow valing-2"></i></p>CSS .i…

dll 和 lib--初级

今天碰到一个奇怪的问题&#xff0c;一个第三方的库&#xff0c;提供了A.dll和A.lib,编译的时候可以通过&#xff0c;运行的时候一直报错&#xff0c;说找不到A.dll。 我就在main函数那里设了断点&#xff0c;发现没有进main 函数的时候就已经报错了&#xff0c;应该是在入口函…

[Mac] php安装protobuf扩展

环境: mac os x 10.10.3 [zcmGatewayWorker 19]$php -v PHP 7.2.5 (cli) (built: May 1 2018 09:50:45) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologieswith Xdebug v2.6.0, Copyright (c) 2002-2018, by De…

MS SQL 能否修改实例名称

前几天研究了了一下修改数据库名称的方式后&#xff0c;今天突然冒出一个问题&#xff0c;MS SQL的命名实例是否也可以修改呢&#xff1f;例如下图&#xff0c;我在本机上安装了一个命名实例GSP&#xff0c;如果我想将其改为GSPS&#xff0c;能行吗&#xff1f; 如果可以&#…