本文实例讲述了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);