zoukankan      html  css  js  c++  java
  • php redis 代码实例

    <?php
    header("Content-type:text/html;charset=utf8");
    $redis = new redis();
    $redis ->connect("127.0.0.1",'6379');
    $redis ->select (1);

    var_dump("############################################LIST队列##################################################");
    $list1 = "list1";
    $list2 = "list2";
    $list3 = "list3";
    //del 删除key 多个参数删除多个key
    $redis->del($list1,$list2);

    //lpush 左推入队列 || rpush 右推入队列
    //@push 1,2,3,4,5,6,7,8,9,10
    $redis->lpush($list1,1,2,3,4,5,6,7,8,9,10);
    //llen 获取队列长度
    $llen = $redis->llen($list2);
    var_dump("队列长度(llen):".$llen);

    //rpop 在队列右侧弹出元素 || lpop 在队列左侧弹出元素
    $item = $redis->rpop($list1);
    var_dump("右弹出元素(rpop):".$item);

    //rpoplpush 队列右侧弹出元素,并且将元素左推入另一个队列
    $redis->rpoplpush($list1,$list2);

    //rpushx/lpushx 当队列存在时右/左推入元素,否则失败 添加成功返回队列长度,否则返回0
    $ret = $redis->rpushx($list3,1);
    var_dump("右推入不存在的队列(rpushx):".$ret);
    $ret = $redis->rpushx($list1,11);
    var_dump("右推入存在的队列(rpushx):".$ret);

    //lrange(key,start,end)返回名称为key的list中start至end之间的元素(end为 -1 ,返回所有)
    //@return array
    $ret = $redis->lrange($list1,0,-1);
    var_dump("获取队列中的元素(lrange):",$ret);

    //blpop/brpop 弹出元素,阻塞(等待队列加入元素,直到超时,当队列加入元素,立即弹出)
    //@return array 0-key名称 1-元素值
    // $redis->del($list1);
    // $item = $redis->brpop($list1,10);
    // var_dump("获取队列中的元素(阻塞)(brpop):",$item);

    //brpoplpush rpoplpush 的阻塞型 参考BRPOP和RPOPLPUSH
    // $redis->del($list1,$list2);
    // $item = $redis->brpoplpush($list1,$list2);

    //lindex 通过index索引获取元素值
    $item = $redis->lindex($list1,8);
    var_dump("通过index索引获取元素值(brpop):",$item);

    //linsert在名称为为key的list中,找到值为pivot 的value,并根据参数Redis::BEFORE | Redis::AFTER,来确定,newvalue 是放在 pivot 的前面,或者后面。如果key不存在,不会插入,如果 pivot不存在,return -1
    $redis->linsert($list1,REDIS::AFTER,"11","12");
    $item = $redis->lrange($list1,0,-1);
    var_dump("查找元素11,存在则在其后加入元素12(linsert):",$item);
    $ret = $redis->linsert($list1,REDIS::AFTER,"NONE","12");
    var_dump("查找元素NONE,不存在则返回(linsert):",$ret);


    //LREM 删除count个名称为key的list中值为value的元素。count为0,删除所有值为value的元素,count>0从头至尾删除count个值为value的元素,count<0从尾到头删除|count|个值为value的元素
    $redis->lrem($list1,11,2);
    $item = $redis->lrange($list1,0,-1);
    var_dump("移除2个值为11的元素之后(LREM):",$item);

    //LSET 根据索引设置队列中元素的值
    $redis->lset($list1,0,88);
    $item = $redis->lrange($list1,0,-1);
    var_dump("将队列第一个元素设置为88之后(LSET):",$item);


    var_dump("############################################SET集合##################################################");
    $set1 = "set1";
    $set2 = "set2";
    $set3 = "set3";
    $redis->del($set1,$set2,$set3);
    //SADD 集合添加元素
    $redis->sadd($set1,1,2,3,4,5,6,7,8,9);
    $redis->sadd($set2,2,43,54,6,7,8,2);
    //SMEMBERS 获取集合全部元素
    //@return ARRAY
    $item = $redis->smembers($set1);
    var_dump("获取集合全部元素(smembers):",$item);

    //SCARD 获取集合元素数量
    $ret = $redis->scard($set1);
    var_dump("获取集合元素数量(SCARD):".$ret);

    //SDIFF 求差集,返回第一个集合差集元素,返回结果中无第二个集合元素
    //@return ARRAY
    $item = $redis->sdiff($set1,$set2);
    var_dump("求差集(SDIFF):",$item);

    //SDIFFSTORE 求差集并将差集保存到output的集合 ,如果新集合已经存在则覆盖
    //@return 新集合的长度
    $item = $redis->sdiffstore($set3,$set1,$set2);
    var_dump("求差集,新集合放到set3,返回新集合长度(SDIFFSTORE):".$item);
    $item = $redis->smembers($set3);
    var_dump("求差集,新集合放到set3(SDIFFSTORE):",$item);

    //SINTER 求交集
    //@return array
    var_dump("交集计算++++++++++++++++++++++++++++++++");
    $item = $redis->smembers($set1);
    var_dump("set1:",$item);
    $item = $redis->smembers($set2);
    var_dump("set2:",$item);

    $item = $redis->sinter($set1,$set2);
    var_dump("求交集,返回交集结果(SINTER):",$item);

    //SINTERSTORE 求交集并将结果写入新的集合,如果新集合已经存在则覆盖
    //@return 交集长度
    $item = $redis->sinterstore($set3,$set1,$set2);
    var_dump("求交集,结果写入set3,返回交集长度(SINTERSTORE):".$item);
    $item = $redis->smembers($set3);
    var_dump("求交集,新集合放到set3(SINTERSTORE):",$item);

    //sismember名称为key的集合中查找是否有value元素,有ture 没有 false
    $redis->sIsMember($set1, 7);

    //SMOVE 将一个集合中的元素移动到另一个集合
    //将set1中的1元素移动到set2中
    $ret = $redis->smove($set1,$set2,1);
    var_dump("SMOVE返回的结果:",$ret);

    //SPOP 在集合中随机弹出一个元素
    $item = $redis->spop($set2);
    var_dump("SPOP随机弹出得元素:",$item);

    //SRANDMEMBER 随机弹出若干个元素
    //set1中弹出2个元素
    $item = $redis->srandmember($set1,2);
    var_dump("SRANDMEMBER随机弹出2个元素:",$item);

    //SREM 删除集合元素 ,返回删除的元素个数
    //删除set3中的8和7元素
    $ret = $redis->srem($set3,8,7);
    var_dump("SREM返回结果:",$ret);

    //SSCAN 模糊匹配元素名称,并返回
    $redis->sadd($set1,"hell",'hall','work','word');
    // $item = $redis->sscan();
    // var_dump("SSCAN结果:",$item);
    //SUNION 取结合并集 sunionstore求并集后赋值给新集合,如果新集合存在则覆盖,省略不表,使用方法参考sdiff,sdiffstore


    var_dump("############################################HASH对象##################################################");
    //HSET 设置哈希对象中的值
    $hash1 = "hash1";
    $hash2 = "hash2";
    $hash3 = "hash3";
    $redis->del($hash1,$hash2,$hash3);
    //HSET设置hash对像单个属性值
    $redis->hset($hash1,"name",'feiyu');
    //HGETALL 获取hash对象所有得key=>value
    $item = $redis->hgetall($hash1);
    var_dump($item);

    //HMSET 批量设置hash对象字段
    $ret = $redis->hmset($hash1,array("sex"=>"男","money"=>"$999999999999999999",'age'=>27,'height'=>175.63,"+++"=>"aaaaaa"));
    var_dump("HMSET返回结果:",$ret);
    $item = $redis->hgetall($hash1);
    var_dump("HMSET插入之后的结果:",$item);

    //HDEL 根据属性名称删除hash对象的属性
    $redis->hdel($hash1,"+++");
    $item = $redis->hgetall($hash1);
    var_dump("HDEL删除之后:",$item);

    //HEXISTS 判断该属性再hash对象中是否存在
    $ret = $redis->hexists($hash1,"sex");
    var_dump("HEXISTS返回结果:",$ret);
    //HGET 获取hash对象的某个值
    $item = $redis->hGet($hash1,"name");
    var_dump("HGET获取结果",$item);
    //HINCRBY 哈希对象字段累加 注:field及value必须为int,否则return false;
    $ret = $redis->HINCRBY($hash1,"age",1);
    var_dump("HINCRBY执行结果",$ret);
    $item = $redis->hGet($hash1,"age");
    var_dump("HINCRBY执行之后的结果",$item);

    //HINCRBYFLOAT hash对象字段累加浮点数 注:field及value 为int类型时也可以执行,返回值小数点后长度根据累加值决定,但是实际存储位为浮点数,通过HVALS等函数获取时注意舍取
    $ret = $redis->HINCRBYFLOAT($hash1,"height",1.223);
    var_dump("HINCRBY执行结果",$ret);

    //HKEYS 获取hash对象得所有key值
    $item = $redis->HKEYS($hash1);
    var_dump("KEYS获取hash的所有keys",$item);

    //HLEN 获取hash对象的长度
    $ret = $redis->hlen($hash1);
    var_dump("KEYS获取hash的长度",$ret);

    //HMGET 获取多个hash对象的值
    $item = $redis->hmget($hash1,array("name","age"));
    var_dump("HMGET获取hash的多个值",$item);
    //HSETNS 设置hash的值,如果key不存在则创建,如果已经存在则执行失败
    $item = $redis->hset($hash1,"name",'feiyu');
    var_dump("HSETNS设置已经存在得key",$item);
    $item = $redis->hset($hash1,"first",'08');
    var_dump("HSETNS设置已经存在得key",$item);
    //HVALS 获取hash的所有值
    $item = $redis->hvals($hash1);
    var_dump("HVALS获取哈希的所有值",$item);
    // HSCAN PHP暂时无实例, 服务器命令:HSCAN hash1(哈希对象名称) 0(资源起始) [match nam*] [count 1]
    // $redis->setOption(Redis::OPT_SCAN, Redis::SCAN_RETRY);
    // $item = $redis->hscan($hash1,0);
    // var_dump("HVALS获取哈希的所有值",$item);

    var_dump("############################################Sorted SET有序集合##################################################");
    $zset1 = "zset1";
    $zset2 = "zset2";
    $zset3 = "zset3";
    $redis->del($zset1,$zset2,$zset3);
    //ZADD向集合加入元素,进行排序 命令模式 ZADD source members
    //注意:元素值不能重复,如果该元素已经存在则写入失败
    $ret = $redis->zadd($zset1,0,"daaa");
    $ret = $redis->zadd($zset1,1,"bb");
    $ret = $redis->zadd($zset1,1,"cc");
    $ret = $redis->zadd($zset1,3,1);
    var_dump($ret);
    //获取有序集合中start 到 stop位置的元素 ZRange(集合KEY,start,stop)
    //返回数组
    $item = $redis->zRange($zset1,0,1);
    var_dump($item);
    //ZCARD获取有序集合的元素个数
    $ret = $redis->zcard($zset1);
    var_dump($ret);

    //ZCOUNT key min max 根据集合中的source 范围获取有序集合得长度 PHP:zcount(key,minsource,maxsource)
    $ret = $redis->zcount($zset1,0,1);
    var_dump($ret);

    //ZINCERBY 有序集合中元素累加
    //命令模式:zincerby key increment member
    //php:当前版本不支持该方法
    // $ret = $redis->zincerby($zset1,12,1);
    // var_dump($ret);

    //zAdd(key, score, member):向名称为key的zset中添加元素member,score用于排序。如果该元素已经存在,则根据score更新该元素的顺序。
    $redis->zAdd('key', 1, 'val1');
    $redis->zAdd('key', 0, 'val0');
    $redis->zAdd('key', 5, 'val5');
    $redis->zRange('key', 0, -1); // array(val0, val1, val5)

    //zRange(key, start, end,withscores):返回名称为key的zset(元素已按score从小到大排序)中的index从start到end的所有元素
    $redis->zAdd('key1', 0, 'val0');
    $redis->zAdd('key1', 2, 'val2');
    $redis->zAdd('key1', 10, 'val10');
    $redis->zRange('key1', 0, -1); // with scores $redis->zRange('key1', 0, -1, true);

    //zDelete, zRem
    //zRem(key, member) :删除名称为key的zset中的元素member
    $redis->zAdd('key', 0, 'val0');
    $redis->zAdd('key', 2, 'val2');
    $redis->zAdd('key', 10, 'val10');
    $redis->zDelete('key', 'val2');
    $redis->zRange('key', 0, -1);

    //zRevRange(key, start, end,withscores):返回名称为key的zset(元素已按score从大到小排序)中的index从start到end的所有元素.withscores: 是否输出socre的值,默认false,不输出
    $redis->zAdd('key', 0, 'val0');
    $redis->zAdd('key', 2, 'val2');
    $redis->zAdd('key', 10, 'val10');
    $redis->zRevRange('key', 0, -1); // with scores $redis->zRevRange('key', 0, -1, true);

    //zRangeByScore, zRevRangeByScore
    //$redis->zRangeByScore(key, star, end, array(withscores, limit ));
    //返回名称为key的zset中score >= star且score <= end的所有元素

    //zCount
    //$redis->zCount(key, star, end);
    //返回名称为key的zset中score >= star且score <= end的所有元素的个数

    //zRemRangeByScore, zDeleteRangeByScore
    //$redis->zRemRangeByScore('key', star, end);
    //删除名称为key的zset中score >= star且score <= end的所有元素,返回删除个数

    // zSize, zCard
    // 返回名称为key的zset的所有元素的个数

    // zScore
    // $redis->zScore(key, val2);
    // 返回名称为key的zset中元素val2的score

    // zRank, zRevRank
    // $redis->zRevRank(key, val);
    // 返回名称为key的zset(元素已按score从小到大排序)中val元素的rank(即index,从0开始),若没有val元素,返回“null”。zRevRank 是从大到小排序

    // zIncrBy
    // $redis->zIncrBy('key', increment, 'member');
    // 如果在名称为key的zset中已经存在元素member,则该元素的score增加increment;否则向集合中添加该元素,其score的值为increment

    // zUnion/zInter
    // 参数
    // keyOutput
    // arrayZSetKeys
    // arrayWeights
    // aggregateFunction Either "SUM", "MIN", or "MAX": defines the behaviour to use on duplicate entries during the zUnion.
    // 对N个zset求并集和交集,并将最后的集合保存在dstkeyN中。对于集合中每一个元素的score,在进行AGGREGATE运算前,都要乘以对于的WEIGHT参数。如果没有提供WEIGHT,默认为1。默认的AGGREGATE是SUM,即结果集合中元素的score是所有集合对应元素进行SUM运算的值,而MIN和MAX是指,结果集合中元素的score是所有集合对应元素中最小值和最大值。

     更多详细内容参考:http://www.cnblogs.com/zcy_soft/archive/2012/09/21/2697006.html

  • 相关阅读:
    java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä'...解决
    Dos命令查看端口占用及关闭教程
    IDEA中Tomcat启动出现乱码
    ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务
    MySQL 面试问题分析总结
    深入Cpython (编写一个Cpython 模块)
    使用docker构建简约高效的镜像
    深入理解C
    ELK 起航
    jquery
  • 原文地址:https://www.cnblogs.com/feiyujinghong/p/php_redis.html
Copyright © 2011-2022 走看看