php操作redis数据库常见方法实例总结


Posted in PHP onFebruary 20, 2020

本文实例讲述了php操作redis数据库常见方法。分享给大家供大家参考,具体如下:

一、安装php_redis扩展,用以操作redis

http://pecl.php.net/package/redis

选择自已系统php版本对应的扩展。

二、redis连接与验证

<?php
//创建一个redis客户端
$redis = new Redis();
//连接redis服务,指定主机,端口,和超时时间
$redis->connect('127.0.0.1', 6379, 60);
//进行密码验证
$redis->auth('');

三、redis的字符串(string)操作

//设置键的值,成功返回true,失败返回false
$ret = $redis->set('app_id', '1234567890');
var_dump($ret);
//获取键的值,成功返回键值,失败返回false
$ret = $redis->get('app_id');
var_dump($ret);
//设置键的值从指定偏移量开始,替换成指定字符串,成功返回新字符串的长度
$ret = $redis->setRange('app_id', 2, '666');
var_dump($ret);
//获取键的值,通过开始索引和结束索引,获取的子符串包括开始索引和结束索引
$ret = $redis->getRange('app_id', 0, -1);
var_dump($ret);
$ret = $redis->getRange('app_id', 3, 6);
var_dump($ret);
//设置新值,返回旧值,如果key不存在,则设置值,返回false
$ret = $redis->getSet('app_id', '666666666');
var_dump($ret);
//一次设置多个键值对
$ret = $redis->mset(['db_name' => 'test', 'db_host' => 'localhost']);
var_dump($ret);
//一次获取多个键值对,返回一个数组
$ret = $redis->mget(['db_name', 'db_host']);
var_dump($ret);
//设置键值,和过期时间,单位:秒,成功返回true
$ret = $redis->setex('name', 10, 'hello');
var_dump($ret);
//设置键值,过期时间以毫秒为单位
$ret = $redis->psetex('age', 10, '28');
var_dump($ret);
//key不存在时,才设置值,key不存在且设置成功返回true,否则返回false
$ret = $redis->setnx('name', 'test');
var_dump($ret);
//setnx的批量操作,只有在所有key都不存在时才能设置成功,否则,有一个key存在,所有key都无法设置成功
$ret = $redis->msetnx(['name' => 'hello', 'age' => '28', 'sex' => '男']);
var_dump($ret);
//获取键值的字符串长度,如果key不存在,返回0,如果值不为字符串返回false
$ret = $redis->strlen('name');
var_dump($ret);
//将key中存储的数字值加1,如果key不存在先初始为0再加1,如果存储的不是数字值,则返回false,成功返回新增值
$ret = $redis->incr('age');
var_dump($ret);
//将key中存储的数字值加指定增量值
$ret = $redis->incrBy('age', 10);
var_dump($ret);
//将key中存储的数字值加指定浮点增量值
$ret = $redis->incrByFloat('age', 0.25);
var_dump($ret);
//将key中存储的数字值减1
$ret = $redis->decr('age');
var_dump($ret);
//将key中存储的数字值减指定减量值
$ret = $redis->decrBy('age', 10);
var_dump($ret);
//给指定key的值,追加值到原值末尾,如果key不存在,则相当于set()函数
$ret = $redis->append('name', 'hahaha');
var_dump($ret);

四、redis的哈希(hash)操作

//设置hash表中的键值,成功返回1,失败返回0
$ret = $redis->hSet('user', 'name', 'xiaoxu');
var_dump($ret);
//获取hash表中键的值,如果hash表中不存在,则返回false
$ret = $redis->hget('user', 'name');
var_dump($ret);
//判断hash表中字段是否存在,存在返回true,失败返回false
$ret = $redis->hExists('user', 'name');
var_dump($ret);
//删除hash表中的字段,成功返回1,失败返回0
$ret = $redis->hDel('user', 'name');
var_dump($ret);
//批量设置hash表中字段的值,成功返回true
$ret = $redis->hMSet('user', ['name' => 'xiaoxu', 'age' => 28, 'sex' => '男']);
var_dump($ret);
//批量获取hash表中字段的值
$ret = $redis->hMGet('user', ['name', 'age', 'sex']);
var_dump($ret);
//获取hash表中所有字段和值
$ret = $redis->hGetAll('user');
var_dump($ret);
//获取hash表中所有字段名,hash不存在时返回空数组
$ret = $redis->hKeys('user');
var_dump($ret);
//获取hash表中所有字段值
$ret = $redis->hVals('user');
var_dump($ret);
//当hash表中字段不存在时,设置值。如果hash表不存在先创建,若字段存在,不作任何操作。
//设置成功返回true,否则返回false
$ret = $redis->hSetNx('user', 'height', 172);
var_dump($ret);
//获取hash表的字段数量,hash不存在返回0
$ret = $redis->hlen('user');
var_dump($ret);
//为hash表中字段值增加指定增量值,如果增量值为负数,则相当于减法操作
//hash表不存在则先创建,字段不存在则初始为0,若字段值为字符串,则返回false
$ret = $redis->hIncrBy('user', 'age', 10);
var_dump($ret);
//为hash表中字段值增加指定浮点增量值
$ret = $redis->hIncrByFloat('user', 'age', 0.25);
var_dump($ret);

五、redis的列表(list)操作

//从列表头部插入一个值
$ret = $redis->lpush('students', 'xiaoxu');
$ret = $redis->lpush('students', 'xiaoxu2');
var_dump($ret);
//从列表尾部插入一个值
$ret = $redis->rpush('students', 'xiaowang');
$ret = $redis->rpush('students', 'xiaowang2');
var_dump($ret);
//获取列表指定范围内的元素,0表示第一个元素,-1表示最后一个元素
$ret = $redis->lRange('students', 0, -1);
var_dump($ret);
//将一个值插入到已存在的列表头部,列表不存在时操作无效。
$ret = $redis->lPushx('students', 'xiaozhang');
var_dump($ret);
//将一个值插入到已存在的列表尾部,列表不存在时操作无效。
$ret = $redis->rPushx('students', 'xiaoli');
var_dump($ret);
//移出并获取列表的第一个元素,若key不存在或不是列表则返回false。
$ret = $redis->lpop('students');
var_dump($ret);
//移出并获取列表的最后一个元素,若key不存在或不是列表则返回false。
$ret = $redis->rpop('students');
var_dump($ret);
//移出并获取列表的第一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
//超时时间单位:秒
$ret = $redis->blPop('students', 10);
var_dump($ret);
//移出并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
$ret = $redis->brPop('students', 10);
var_dump($ret);
//移除列表中最后一个元素,将其插入另一个列表头部,并返回这个元素。若源列表没有元素则返回false。
$ret = $redis->rpoplpush('students', 'students2');
var_dump($ret);
//移除列表中最后一个元素,将其插入另一个列表头部,并返回这个元素。
//如果列表没有元素则会阻塞列表直到等待超时或发现可弹出元素为止。
//超时时间单位:秒
$ret = $redis->brpoplpush('students', 'students2', 10);
var_dump($ret);
//获取列表的长度
$ret = $redis->lLen('students2');
var_dump($ret);
//通过索引获取列表中的元素。若索引超出列表范围则返回false。
$ret = $redis->lIndex('students2', 0);
var_dump($ret);
//通过索引设置列表中元素的值。若是索引超出范围,或对一个空列表进行lset操作,则返回false。
$ret = $redis->lSet('students2', 0, 'xiaomi');
var_dump($ret);
//在列表中指定元素前或后面插入元素。若指定元素不在列表中,或列表不存在时,不执行任何操作。
//参数:列表的key,Redis::AFTER或Redis::BEFORE,基准元素,插入元素
//返回值:插入成功返回插入后列表元素个数,若基准元素不存在返回-1,若key不存在返回0,若key不是列表返回false。
$ret = $redis->lInsert('students2', Redis::AFTER, 'xiaomi', 'xiaoji');
var_dump($ret);
//根据第三个参数count的值,移除列表中与参数value相等的元素。
//count > 0 : 从表头开始向表尾搜索,移除与value相等的元素,数量为count。
//count < 0 : 从表尾开始向表头搜索,移除与value相等的元素,数量为count的绝对值。
//count = 0 : 移除表中所有与value相等的值。
//返回实际删除元素个数
$ret = $redis->lrem('students2', 'xiaomi', 0);
var_dump($ret);
//对列表进行修剪,只保留指定区间的元素,其他元素都删除。成功返回true。
$ret = $redis->ltrim('students2', 0, -1);
var_dump($ret);

六、redis的集合(set)操作

//向集合添加一个或多个成员
//若集合不存在则先创建,若key不是集合类型则返回false
//若元素已存在返回0,插入成功返回1。
$ret = $redis->sAdd('friend', 'xiaoxu', 'xiaowang', 'xiaoli', 'xiaozhang');
var_dump($ret);
//返回集合中所有成员。
$ret = $redis->sMembers('friend');
var_dump($ret);
//判断元素是否是集合key的成员
$ret = $redis->sIsMember('friend', 'xiaoxu');
var_dump($ret);
//返回集合中成员的数量。
$ret = $redis->scard('friend');
var_dump($ret);
//移除并返回集合中的一个随机元素
$ret = $redis->spop('friend');
var_dump($ret);
//返回集合中的一个或多个随机成员元素,返回元素的数量和情况由函数的第二个参数count决定:
//如果count为正数,且小于集合基数,那么命令返回一个包含count个元素的数组,数组中的元素各不相同。
//如果count大于等于集合基数,那么返回整个集合。
//如果count为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为count的绝对值。
$ret = $redis->sRandMember('friend', 2);
var_dump($ret);
//移除集合中指定的一个元素,忽略不存在的元素。删除成功返回1,否则返回0。
$ret = $redis->sRem('friend', 'xiaowang');
var_dump($ret);
//迭代集合中的元素
//参数:集合的key,迭代器变量,匹配模式,每次返回元素数量(默认为10个)
$ret = $redis->sScan('friend', $iter, 'xiao*', 5);
var_dump($ret);
var_dump($iter);
//将指定成员从一个源集合移动到一个目的集合。
//若源集合不存在或不包含指定元素则不做任何操作,返回false。
//参数:源集合,目标集合,移动元素
$ret = $redis->sMove('friend', 'friend2', 'xiaoxu');
var_dump($ret);
//返回所有给定集合之间的差集,不存在的集合视为空集。
$ret = $redis->sDiff('friend', 'friend2');
var_dump($ret);
//将所有给定集合之间的差集存储在指定的目的集合中。
//若目的集合已存在则覆盖它。返回差集元素个数。
//参数:第一个参数为目标集合,存储差集。
$ret = $redis->sDiffStore('friend3', 'friend2', 'friend');
var_dump($ret);
//返回所有给定集合的交集,不存在的集合视为空集。
$ret = $redis->sInter('friend', 'friend2');
var_dump($ret);
//将所有给定集合的交集存储在指定的目的集合中。
//若目的集合已存在则覆盖它。返回交集元素个数。
//参数:第一个参数为目标集合,存储交集。
$ret = $redis->sInterStore('friend4', 'friend2', 'friend');
var_dump($ret);
//返回所有给定集合的并集,不存在的集合视为空集。
$ret = $redis->sUnion('friend', 'friend2');
var_dump($ret);
//将所有给定集合的并集存储在指定的目的集合中。
//若目的集合已存在则覆盖它。返回并集元素个数。
//参数:第一个参数为目标集合,存储并集。
$ret = $redis->sUnionStore('friend5', 'friend2', 'friend');
var_dump($ret);

七、redis的有序集合(sorted set)操作

//将一个或多个成员元素及其分数值加入到有序集当中。
//如果某个成员已经是有序集的成员,则更新这个成员的分数值,并通过重新插入这个成员元素,来保证该成员在正确的位置上。
//分数值可以是整数值或双精度浮点数。
$ret = $redis->zadd('scores', 60, 'math', 80, 'english', 75, 'chinese');
var_dump($ret);
//返回有序集中指定区间内的成员。成员按分数从小到大排序,分数值相同的则按字典序来排序。
//参数:第四个参数表示是否返回各个元素的分数值,默认为false。
$ret = $redis->zRange('scores', 0, -1, true);
var_dump($ret);
//返回有序集中指定区间内的成员。成员按分数值从大到小排序,分数值相同的则按字典序的逆序来排序。
$ret = $redis->zRevRange('scores', 0, -1, true);
var_dump($ret);
//返回有序集中指定分数区间的成员列表,按分数值从小到大排序,
//分数值相同的则按字典序来排序。默认使用闭区间。
$ret = $redis->zRangeByScore('scores', 60, 90, ['withscores' => true]);
var_dump($ret);
//返回有序集中指定分数区间的成员列表,按分数值递减排序,
//分数值相同的则按字典序的逆序来排序。
//注意,区间表示的时候大值在前,小值在后,默认使用闭区间。
$ret = $redis->zRevRangeByScore('scores', 90, 60, ['withscores' => true]);
var_dump($ret);
//迭代有序集合中的元素。
//返回值:[元素名 => 分数值, ...]
$ret = $redis->zScan('scores', $iter, '*', 10);
var_dump($ret);
var_dump($iter);
//返回指定有序集的元素数量。
$ret = $redis->zCard('scores');
var_dump($ret);
//返回有序集中指定分数区间的成员数量。
$ret = $redis->zCount('scores', 60, 90);
var_dump($ret);
//返回有序集中指定成员的分数值。若成员不存在则返回false。
$ret = $redis->zScore('scores', 'english');
var_dump($ret);
//返回有序集中指定成员的排名,按分数值从小到大排序。分数值最小者排名为0。
$ret = $redis->zRank('scores', 'english');
var_dump($ret);
//返回有序集中指定成员的排名,按分数值从大到小排序。分数值最大者排名为0。
$ret = $redis->zRevRank('scores', 'english');
var_dump($ret);
//移除有序集中的一个或多个成员,忽略不存在的成员。返回删除的元素个数。
$ret = $redis->zRem('scores', 'english');
var_dump($ret);
//移除有序集中指定排名区间的所有成员。
$ret = $redis->zRemRangeByRank('scores', 0, 2);
var_dump($ret);
//移除有序集中指定分数值区间的所有成员。
$ret = $redis->zRemRangeByScore('scores', 60, 90);
var_dump($ret);
//对有序集中指定成员的分数值增加指定增量值。
//若为负数则做减法,若有序集不存在则先创建,若有序集中没有对应成员则先添加,最后再操作。
$ret = $redis->zIncrBy('scores', 2, 'chinese');
var_dump($ret);
//计算给定一个或多个有序集的交集,并将其存储到一个目的有序集中。
//参数:目的有序集合,多个有序集合,多个有序集合的权重,合并有序集合的方式(成员的分数值与权重相乘后的是相加或是比较大小)
$redis->zAdd('s1', 1, '111');
$redis->zAdd('s1', 2, '222');
$redis->zAdd('s1', 3, '333');
$redis->zAdd('s2', 4, '222');
$redis->zAdd('s2', 5, '333');
$ret = $redis->zInter('s3', ['s1', 's2'], [1, 5], 'SUM');
// ['222' => 22, '333' => 28]
var_dump($ret);
$ret = $redis->zInter('s4', ['s1', 's2'], [1, 5], 'MIN');
// ['222' => 2, '333' => 3]
var_dump($ret);
$ret = $redis->zInter('s5', ['s1', 's2'], [1, 5], 'MAX');
// ['222' => 20, '333' => 25]
var_dump($ret);
//计算给定一个或多个有序集的并集,并将其存储到一个目的有序集中。
//结果集中某个成员的分数值是所有给定集下该成员分数值之和。
$ret = $redis->zUnion('s6', ['s1', 's2'], [5, 1], 'SUM');
// ['111' => 5, '222' => 14, '333' => 20]
var_dump($ret);
$ret = $redis->zUnion('s7', ['s1', 's2'], [5, 1], 'MIN');
// ['222' => 4, '111' => 5, '333' => 5]
var_dump($ret);
$ret = $redis->zUnion('s8', ['s1', 's2'], [5, 1], 'MAX');
// ['111' => 5, '222' => 10, '333' => 15]
var_dump($ret);

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP中的array数组类型分析说明
Jul 27 PHP
php程序的国际化实现方法(利用gettext)
Aug 14 PHP
PHPExcel读取Excel文件的实现代码
Dec 06 PHP
php数组一对一替换实现代码
Aug 31 PHP
关于PHP递归算法和应用方法介绍
Apr 15 PHP
PHP使用feof()函数读文件的方法
Nov 07 PHP
WordPress主题中添加文章列表页页码导航的PHP代码实例
Dec 22 PHP
weiphp微信公众平台授权设置
Jan 04 PHP
CI框架实现cookie登陆的方法详解
May 18 PHP
[原创]php使用curl判断网页404(不存在)的方法
Jun 23 PHP
php中字符串和整数比较的操作方法
Jun 06 PHP
php将xml转化对象的实例详解
Nov 17 PHP
php使用redis的几种常见操作方式和用法示例
Feb 20 #PHP
PHP使用openssl扩展实现加解密方法示例
Feb 20 #PHP
php使用redis的有序集合zset实现延迟队列应用示例
Feb 20 #PHP
解决windows上php xdebug 无法调试的问题
Feb 19 #PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
Feb 18 #PHP
laravel框架select2多选插件初始化默认选中项操作示例
Feb 18 #PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
Feb 18 #PHP
You might like
php启动时候提示PHP startup的解决方法
2013/05/07 PHP
Joomla调用系统自带编辑器的实现方法
2016/05/05 PHP
JS启动应用程序的一个简单例子
2008/05/11 Javascript
常用js字符串判断方法整理
2013/10/18 Javascript
js history对象简单实现返回和前进
2013/10/30 Javascript
将HTML格式的String转化为HTMLElement的实现方法
2014/08/07 Javascript
JS实现弹出浮动窗口(支持鼠标拖动和关闭)实例详解
2015/08/06 Javascript
10个很棒的jQuery代码片段
2015/09/24 Javascript
利用Bootstrap实现表格复选框checkbox全选
2016/12/21 Javascript
package.json文件配置详解
2017/06/15 Javascript
前端常见跨域解决方案(全)
2017/09/19 Javascript
express+mockjs实现模拟后台数据发送功能
2018/01/07 Javascript
JavaScript中利用Array filter() 方法压缩稀疏数组
2018/02/24 Javascript
vue-cli+webpack项目 修改项目名称的方法
2018/02/28 Javascript
通过vue-router懒加载解决首次加载时资源过多导致的速度缓慢问题
2018/04/08 Javascript
微信公众号生成新浪短网址的实现(快速生成)
2019/08/18 Javascript
js判断一个对象是数组(函数)的方法实例
2019/12/19 Javascript
vue 页面回退mounted函数不执行的解决方案
2020/07/26 Javascript
vue axios请求成功却进入catch的原因分析
2020/09/08 Javascript
解决ant design vue中树形控件defaultExpandAll设置无效的问题
2020/10/26 Javascript
Django实现的自定义访问日志模块示例
2017/06/23 Python
Python标准模块--ContextManager上下文管理器的具体用法
2017/11/27 Python
Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地
2018/02/23 Python
python使用threading.Condition交替打印两个字符
2019/05/07 Python
python对文件目录的操作方法实例总结
2019/06/24 Python
python 申请内存空间,用于创建多维数组的实例
2019/12/02 Python
Python -m参数原理及使用方法解析
2020/08/21 Python
前端实现打印图像功能
2019/08/27 HTML / CSS
女士时装鞋:Chinese Laundry
2018/08/29 全球购物
建筑公司文秘岗位职责
2013/11/29 职场文书
园林设计专业毕业生求职信
2014/03/23 职场文书
表扬通报怎么写
2015/01/16 职场文书
2015年小学英语教师工作总结
2015/05/12 职场文书
出纳试用期工作总结2015
2015/05/28 职场文书
小程序实现文字循环滚动动画
2021/06/14 Javascript
关于MySQL中explain工具的使用
2023/05/08 MySQL