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+AJAX实现无刷新注册(带用户名实时检测)
Jan 02 PHP
PHP中的日期处理方法集锦
Jan 02 PHP
PHP函数学习之PHP函数点评
Jul 05 PHP
学习php过程中的一些注意点的总结
Oct 25 PHP
PHP获取MAC地址的具体实例
Dec 13 PHP
兼容PHP和Java的des加密解密代码分享
Jun 26 PHP
php通过淘宝API查询IP地址归属等信息
Dec 25 PHP
zend framework重定向方法小结
May 28 PHP
PHP简单判断手机设备的方法
Aug 23 PHP
利用PHP抓取百度阅读的方法示例
Dec 18 PHP
PHP实现的日历功能示例
Sep 01 PHP
PHP切割整数工具类似微信红包金额分配的思路详解
Sep 18 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数组是否为索引数组的实现方法
2013/06/13 PHP
php配置php-fpm启动参数及配置详解
2013/11/04 PHP
帝国cms目录结构分享
2015/07/06 PHP
js url传值中文乱码之解决之道
2009/11/20 Javascript
Javascript公共脚本库系列(一): 弹出层脚本
2011/02/24 Javascript
JavaScript高级程序设计(第3版)学习笔记12 js正则表达式
2012/10/11 Javascript
如何实现修改密码时密码框显示保存到cookie的密码
2013/12/10 Javascript
JS获取文本框,下拉框,单选框的值的简单实例
2014/02/26 Javascript
jquery.mobile 共同布局遇到的问题小结
2015/02/10 Javascript
详解axios 全攻略之基本介绍与使用(GET 与 POST)
2017/09/15 Javascript
微信小程序使用template标签实现五星评分功能
2018/11/03 Javascript
js使用cookie实现记住用户名功能示例
2019/06/13 Javascript
如何阻止小程序遮罩层下方图层滚动
2019/09/05 Javascript
Postman动态获取返回值过程详解
2020/06/30 Javascript
JS+CSS实现炫酷光感效果
2020/09/05 Javascript
python数据结构之列表和元组的详解
2017/09/23 Python
详解tensorflow实现迁移学习实例
2018/02/10 Python
Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】
2019/04/26 Python
pyqt 实现在Widgets中显示图片和文字的方法
2019/06/13 Python
pandas抽取行列数据的几种方法
2020/12/13 Python
Matlab使用Plot函数实现数据动态显示方法总结
2021/02/25 Python
使用html5制作loading图的示例
2014/04/14 HTML / CSS
美国在线购物频道:Shop LC
2019/04/21 全球购物
英国家居用品和床上用品零售商:P&B Home
2020/01/16 全球购物
局域网标准
2016/09/10 面试题
材料加工硕士生求职信
2013/10/10 职场文书
管理学专业个人求职信范文
2013/12/13 职场文书
工厂实习感言
2014/01/14 职场文书
《小熊住山洞》教学反思
2014/02/21 职场文书
新闻学专业大学生职业生涯规划范文
2014/03/02 职场文书
菜篮子工程实施方案
2014/03/08 职场文书
中药学专业毕业生推荐信
2014/07/10 职场文书
催款通知书范文
2015/04/17 职场文书
工作态度恶劣检讨书
2015/05/06 职场文书
2019个人工作自我评价范文(3篇)
2019/09/19 职场文书
golang用type-switch判断interface的实际存储类型
2022/04/14 Golang