redis散列使用详解

发布时间:2017-04-05编辑:lianpenglin阅读(1231)

    本文将对常用的散列命令进行介绍:其中包括添加和删除键值对的命令、获取所有键值对的命令,以及对键值对的值进行自增或者自减操作的命令。阅读本文可以让读者学习到如何将数据存储到散列里面,以及这样做的好处是什么。下表展示了一部门常用的散列命令:

    命令用例和描述
    HMGETHMGET key-name key [key....]从散列里面获取一个或多个键的值
    HMSETHMSET key-name key value [key value ...]--为散列里面的一个或多个键设置值
    HDELHDEL key-name key [key ... ]--删除散列里面的一个或多个键值对,返回成功找到并删除的键值对数量
    HLENHLEN key-name ----返回散列包含的键值对数量

    以上表格中命令具体用法:

    <?php
    /*
     * redis散列的使用
     */
    echo "<pre/>";
    $redis = new Redis();
    $redis->connect('127.0.0.1','6379');
    $redis->hMset('hash',array('k1'=>'v1','k2'=>v2,'k3'=>'v3'));//批量添加散列
    $a = $redis->hMget('hash',array('k1','k2'));//批量读取散列
    var_dump($a);
    echo $a['k1'];
    echo "<br/>";
    echo $redis->hLen('hash');//获取散列长度
    echo "<br/>";
    echo $redis->hDel('hash','k1','k4');//删除散列,返回删除的长度
    echo "<br/>";
    echo $redis->hLen('hash');//获取散列长度

    下表列出了散列的其他几个批量操作命令,以及一些和字符串操作类似的散列命令。

    命令用例和描述
    HEXISTSHEXISTS key-name key---检查给定键是否存在于散列中
    HKEYSHKEYS key-name---获取散列包含的所有键
    HVALSHVALS key-name---获取散列包含的所有值
    HGETALLHGETALL key-name----获取散列包含所有的键值对
    HINCRBYHINCRBY key-name key increment --将键key存储的值加上整数increment
    HINCRBYFLOATHINCRBYFLOAT key-name key increment ----将键key存储的值加上浮点数increment

    尽管有HGETALL存在,但HKEYS和HVALS也是非常有用的:如果散列包含的值非常大,那么用户可以先使用HKEYS取出散列包含的所有值,然后再使用HGET一个接一个的取出键的值,从而避免一次获取多个大体积的值而导致服务器阻塞。

    HINCRBY和HINCRBYFLOAT可能会让读者回想起用于处理字符串的INCRBY 和INCRBYFLOAT,这两对命令拥有相同的语义,它们的不同在于HINCRBY和HINCRBYFLOAT处理的是散列,而不是字符串,下面是具体代码:

    <?php
    /*
     * redis散列的使用
     */
    echo "<pre/>";
    $redis = new Redis();
    $redis->connect('127.0.0.1','6379');
    $redis->hMset('hash',array('k1'=>'v1','k2'=>v2,'k3'=>'v3'));//批量添加散列
    $a = $redis->hMget('hash',array('k1','k2'));//批量读取散列
    var_dump($a);
    echo $a['k1'];
    echo "<br/>";
    echo $redis->hLen('hash');//获取散列长度
    echo "<br/>";
    echo $redis->hDel('hash','k1','k4');//删除散列,返回删除的长度
    echo "<br/>";
    echo $redis->hLen('hash');//获取散列长度
    echo "<br/>";
    $redis->hMset('hash2',array('short'=>'hello','long'=>1000*1));
    $key = $redis->hKeys('hash2');//获取散列全部的键
    var_dump($key);
    $aa = $redis->hExists('hash2','num');//检查给定的键是否存在散列中
    var_dump($aa);
    var_dump($redis->hIncrBy('hash2','num',1));//对于一个不存在的键进行自增操作,redis会默认为0
    $aa = $redis->hExists('hash2','num');//检查给定的键是否存在散列中
    var_dump($aa);

    正如前面所说,对散列进行处理的时候,如果键值对的值的体积非常大,那么用户可以先使用HKEYS获取所有的键,然后通过获取必要的值来减少需要传输的数据量。除此之外,用户还可以像使用SISMEMBER检查一个元素是否存在于集合里面一样,使用HEXISTS检查一个键是否存在与散列里面。

标签redis php

如果对你有用打赏一下吧!