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 相关文章推荐
dedecms中常见问题修改方法总结
Mar 21 PHP
PHP获取文件后缀名的三个函数
Oct 15 PHP
基于php无限分类的深入理解
Jun 02 PHP
php实现监听事件
Nov 06 PHP
php下载excel无法打开的解决方法
Dec 24 PHP
php实现window平台的checkdnsrr函数
May 27 PHP
yii2 commands模式以及配置crontab定时任务的方法
Aug 19 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
Nov 17 PHP
php 可变函数使用小结
Jun 12 PHP
微信JSSDK分享功能图文实例详解
Apr 08 PHP
Yii框架核心组件类实例详解
Aug 06 PHP
Aliyun Linux 编译安装 php7.3 tengine2.3.2 mysql8.0 redis5的过程详解
Oct 20 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
YB217、YB235、YB400浅听
2021/03/02 无线电
PHP实现Soap通讯的方法
2014/11/03 PHP
php实现把url转换迅雷thunder资源下载地址的方法
2014/11/07 PHP
PHP处理CSV表格文件的常用操作方法总结
2016/07/01 PHP
tp5(thinkPHP5框架)时间查询操作实例分析
2019/05/29 PHP
我见过最全的个人js加解密功能页面
2007/12/12 Javascript
JavaScript之HTMLCollection接口代码
2011/04/27 Javascript
jQuery中校验时间格式的正则表达式小结
2013/09/22 Javascript
angularJS提交表单(form)
2015/02/09 Javascript
jQuery实现列表内容的动态载入特效
2015/08/08 Javascript
浅析js绑定事件的常用方法
2016/05/15 Javascript
input框中自动展示当前日期yyyy/mm/dd的实现方法
2017/07/06 Javascript
深入理解Vue transition源码分析
2017/07/30 Javascript
vue+webpack实现异步组件加载的方法
2018/02/03 Javascript
Angularjs中date过滤器失效的问题及解决方法
2018/07/06 Javascript
Vue.js 图标选择组件实践详解
2018/12/03 Javascript
基于layui的下拉列表的数据回显方法
2019/09/24 Javascript
vue和iview实现Scroll 数据无限滚动功能
2019/10/31 Javascript
[03:55]2014DOTA2国际邀请赛 Fnatic经理采访赢DK在情理之中
2014/07/10 DOTA
Python之str操作方法(详解)
2017/06/19 Python
scrapy爬虫实例分享
2017/12/28 Python
Python使用修饰器进行异常日志记录操作示例
2019/03/19 Python
python+selenium实现简历自动刷新的示例代码
2019/05/20 Python
用django-allauth实现第三方登录的示例代码
2019/06/24 Python
使用 Supervisor 监控 Python3 进程方式
2019/12/05 Python
Html5+JS实现手机摇一摇功能
2015/04/24 HTML / CSS
windeln官方海外旗舰店:德淘超人气母婴超市
2017/12/15 全球购物
苹果音乐订阅:Apple Music
2018/08/02 全球购物
鲜果饮品店创业计划书
2014/01/21 职场文书
初中语文教学反思
2014/02/02 职场文书
煤矿安全生产责任书
2014/04/15 职场文书
党员“四风”问题批评与自我批评思想汇报
2014/10/06 职场文书
入党培养人考察意见
2015/06/08 职场文书
人代会简报
2015/07/21 职场文书
2016年综治和平安建设宣传月活动总结
2016/04/01 职场文书
CSS filter 有什么神奇用途
2021/05/25 HTML / CSS