zoukankan      html  css  js  c++  java
  • 常用php操作redis命令整理(一)通用及字符串类型

    Key相关操作

    TYPE

     类型检测,字符串返回string,列表返回 list,set表返回set/zset,hash表返回hash,key不存在返回0

    <?php
    echo $redis->type('not_exists_key'); //none /int(0)
    
    $redis->set('str_key',"str_val");  //构建一个字符串
    echo $redis->type('str_key');        //string / int(1)
    
    $redis->sadd('s_key',"s_val1");        //构建一个集合
    echo $redis->TYPE('s_key');            //set /int(2)
    
    $redis->lpush('list_key',"list_val1");  //构建一个列表
    echo $redis->type('list_key');    //list / int(3) 
    
    $redis->zadd('z_key',1,'z_val1'); //构建一个zset (sorted set) // int(1)
    $redis->zadd('z_key',2,'z_val2');
    $redis->zadd('z_key',3,'z_val3');
    echo $redis->zrange('z_key',0,-1); // array(3) { [0]=> string(3) "z_val1" [1]=> string(3) "z_val2" [2]=> string(3) "z_val3" }
    echo $redis->type('z_key');     //zset / int(4)
    
    $redis->hset('website','baidu','www.baidu.com');   //一个新域
    echo $redis->hget('website','baidu');         //string(8) "www.baidu.com"
    echo $redis->type('website');               //hash /int(5)

    DEL

    移除给定的一个或多个key,如果key不存在,则忽略该命令。

    <?php
    //①删除单个key
    $redis->set('key','val');
    $redis->del('key');           //返回 TRUE(1)
    var_dump($redis->get('key')); //返回 bool(false)
    
    //②删除一个不存在的key
    if(!$redis->exists('no_exists_key'))   //不存在
    var_dump($redis->del('no_exists_key'));  //返回 int(0)
    
    //③同时删除多个key
    $array_mset=['key1'=>'val1','key2'=>'val2','key3'=>'val3'];
    $redis->mset($array_mset); //用MSET一次储存多个值
    $array_mget=array('key1','key2','key3');
    var_dump($redis->mget($array_mget)); //一次返回多个值 //array(3) { [0]=> string(4) "val1" [1]=> string(4) "val2" [2]=> string(4) "val3" }
    
    $redis->del($array_mget); //同时删除多个key
    var_dump($redis->mget($array_mget)); //返回 array(3) { [0]=> bool(false) [1]=> bool(false) [2]=> bool(false) }       

    RANDOMKEY

    从当前数据库中随机返回(不删除)一个key。当数据库不为空时,返回一个key,当数据库为空时,返回nil。

    <?php
    //①数据库不为空
    echo $redis->randomkey(); //返回随机key
    //②数据库为空
    var_dump($redis-> randomkey()); //bool(false)

    EXPIRE

    为给定key设置生存时间,当key过期时,它会被自动删除。

    <?php
    $redis->expire('key', 30); //设置有效期为30秒;第二参数不传递,则取消expire行为

    EXPIREAT

    EXPIREAT的作用和EXPIRE一样,都用于为key设置生存时间。不同在于EXPIREAT命令接受的时间参数是UNIX时间戳。

    <?php
    $redis->set('key','val');
    echo $redis->expireat('key',strtotime('2018-01-23 18:00')); //设定过期时间为2018-01-23 18:00
    echo $redis->ttl('key');  //倒计时剩余秒数

    TTL

    返回给定key的剩余生存时间,单位秒。当 key 不存在时,返回 -2,当 key 存在但没有设置剩余生存时间时,返回 -1 。

    <?php
    //①设置过期时间的key
    $redis->set('key','val');       
    $redis->expire('key',30);       //设置生存时间为30秒 //return (integer) 1
    echo $redis->get('key');        //return val
    echo $redis->ttl('key');        //(integer) 25 ,不断输出,会不断缩减过期时间
    
    echo $redis->ttl('key');        //30秒过去,name过期 //(integer) -2
    var_dump($redis->get('key'));   //过期的key将被删除 //return bool(false);
    
    //②没有设置过期时间的key
    $redis->set('key','val');
    var_dump($redis->ttl('key'));   //int(-1)
    
    //③不存在的key
    $redis->exists('not_exists_key');//int(0)
    var_dump($redis->ttl('not_exists_key'));//int(-2)

    EXISTS

    检查给定key是否存在,若key存在,返回1,否则返回0。

    <?php
    var_dump($redis->exists('key'));  //key存在 返回bool(true) ,否则false

    RENAME

    对key进行改名,当key和newkey相同或者key不存在时,返回一个错误;当newkey已经存在时,RENAME命令将覆盖旧值。

    <?php
    //①key存在且newkey不存在
    $redis->set('key',"val");
    var_dump($redis->rename('key','new_key'));  //bool(true)
    var_dump($redis->exists('key'));    //key不复存在 //bool(false)
    var_dump($redis->exists('new_key'));    //new_key取而代之 //bool(true)
    
    //②当key不存在时,返回错误 ,返回false;
    var_dump($redis->rename('not_exists_key','new_key'));  //bool(false)
    
    //③new_key已存在时,RENAME会覆盖旧new_key
    $redis->set('key',"val");
    $redis->set('key2',"val2"); 
    var_dump($redis->rename('key','key2')); //bool(true)
    var_dump($redis->get('key')); //(nil)  bool(false)
    var_dump($redis->get('key2'));  //string(6) "val"

    RENAMENX

    当且仅当new_key不存在时,将key改为new_key。出错的情况和RENAME一样(key不存在时报错)。修改成功时,返回1。如果newkey已经存在,返回0。

    <?php
    //① new_key不存在,成功
    $redis->set('key',"val");
    $redis->exists('new_key'); //int(0)
    var_dump($redis->renamenx('key','new_key')); // bool(true) 
    
    //②new_key存在时,失败
    $redis->set('key1',"val1");
    $redis->set('key2',"val2");
    var_dump($redis->renamenx('key1', 'key2'));// bool(false)

    SORT

    参数:
    array(
    'by' => 'pattern', //匹配模式
    'limit' => array(0, 1),
    'get' => 'pattern'
    'sort' => 'asc' or 'desc',
    'alpha' => TRUE,
    'store' => 'external-key'
    )

    返回或保存给定列表、集合、有序集合key中经过排序的元素。

    ①一般排序

    <?php
    $redis->lpush('test', 1);
    $redis->lpush('test', 10);
    $redis->lpush('test', 8);
    print_r($redis->sort('test')); //结果:Array ( [0] => 1 [1] => 8 [2] => 10 )

    ②字母排序

    <?php
    $redis->lpush('website', "www.reddit.com"); $redis->lpush('website', "www.slashdot.com"); $redis->lpush('website', "www.infoq.com"); //默认排序 var_dump($redis->SORT('website'));//array(3) { [0]=> string(13) "www.infoq.com" [1]=> string(16) "www.slashdot.com" [2]=> string(14) "www.reddit.com" } //按字符排序 ALPHA=true var_dump($redis->SORT('website', array('ALPHA'=>TRUE))); //array(3) { [0]=> string(13) "www.infoq.com" [1]=> string(14) "www.reddit.com" [2]=> string(16) "www.slashdot.com" }

    ③排序取部分数据

    <?php
    $redis->lpush('test', 1);
    $redis->lpush('test', 10);
    $redis->lpush('test', 8);
    print_r($redis->sort('test')); //结果:Array ( [0] => 1 [1] => 8 [2] => 10 )

    ④使用外部key进行排序
    有时候你会希望使用外部的key作为权重来比较元素,代替默认的对比方法。

    假设现在有用户(user)数据如下:

    id     name     level
    -------------------------------
    1    admin       9999
    2    huangz      10
    59230  jack        3
    222    hacker      9999

    id数据保存在key名为user_id的列表中。
    name数据保存在key名为user_name_{id}的列表中
    level数据保存在user_level_{id}的key中。

    <?php
    //先将要使用的数据加入到数据库中
    
    //admin
    $redis->LPUSH('user_id', 1);//(integer) 1
    $redis->SET('user_name_1', 'admin');
    $redis->SET('user_level_1',9999);
    
    //huangz
    $redis->LPUSH('user_id', 2);//(integer) 2
    $redis->SET('user_name_2', 'huangz');
    $redis->SET('user_level_2', 10);
    
    // jack
    $redis->LPUSH('user_id', 59230);//(integer) 3
    $redis->SET('user_name_59230','jack');
    $redis->SET('user_level_59230', 3);
    
    //hacker
    $redis->LPUSH('user_id', 222);  //(integer) 4
    $redis->SET('user_name_222', 'hacker');
    $redis->SET('user_level_222', 9999);

    如果希望按level从大到小排序user_id,可以使用以下命令

    <?php
    $redis_sort_option=array('BY'=>'user_level_*', 'SORT'=>'DESC' ); var_dump($redis->SORT('user_id',$redis_sort_option)); //array(4) { [0]=> string(3) "222" [1]=> string(1) "1" [2]=> string(1) "2" [3]=> string(5) "59230" } //--------------------------- //1) "222" # hacker //2) "1" # admin //3) "2" # huangz //4) "59230" # jack

    但是有时候只是返回相应的id没有什么用,你可能更希望排序后返回id对应的用户名,这样更友好一点,使用GET选项可以做到这一点

    <?php
    $redis_sort_option=array('BY'=>'user_level_*', 'SORT'=>'DESC', 'GET'=>'user_name_*' ); var_dump($redis->SORT('user_id', $redis_sort_option)); //array(4) { [0]=> string(6) "hacker" [1]=> string(5) "admin" [2]=> string(6) "huangz" [3]=> string(4) "jack" } //--------------------------- //1) "hacker" //2) "admin" //3) "huangz" //4) "jack"

    可以多次地、有序地使用GET操作来获取更多外部key。
    比如你不但希望获取用户名,还希望连用户的密码也一并列出,可以使用以下命令:

    <?php
    // 先添加一些测试数据
    $redis->SET('user_password_222', "hey,im in");
    $redis->SET('user_password_1', "a_long_long_password");
    $redis->SET('user_password_2', "nobodyknows");
    $redis->SET('user_password_59230', "jack201022");
    
    // 获取name和password
    $redis_sort_option=array('BY'=>'user_level_*',
                'SORT'=>'DESC',
                'GET'=>array('user_name_*','user_password_*')
                );
    var_dump($redis->SORT('user_id',$redis_sort_option));//array(8) { [0]=> string(6) "hacker" [1]=> string(9) "hey,im in" [2]=> string(5) "admin" [3]=> string(20) "a_long_long_password" [4]=> string(6) 
    "huangz" [5]=> string(11) "nobodyknows" [6]=> string(4) "jack" [7]=> string(10) "jack201022" }
    //------------------------------------ //1) "hacker" // 用户名 //2) "hey,im in" // 密码 //3) "jack" //4) "jack201022" //5) "huangz" //6) "nobodyknows" //7) "admin" //8) "a_long_long_password"

    注意GET操作是有序的,GET user_name_* GET user_password_* 和 GET user_password_* GET user_name_*返回的结果位置不同

    <?php
    //获取name和password 注意GET操作是有序的
    $redis_sort_option=array('BY'=>'user_level_*',
                'SORT'=>'DESC',
                'GET'=>array('user_password_*','user_name_*')
                );
    var_dump($redis->SORT('user_id',$redis_sort_option));// array(8) { [0]=> string(9) "hey,im in" [1]=> string(6) "hacker" [2]=> string(20) "a_long_long_password" [3]=> string(5) "admin" [4]=> string(11) "nobodyknows" 
    [5]=> string(6) "huangz" [6]=> string(10) "jack201022" [7]=> string(4) "jack" }

    GET还有一个特殊的规则——"GET #",用于获取被排序对象(我们这里的例子是user_id)的当前元素。
    比如你希望user_id按level排序,还要列出id、name和password,可以使用以下命令:

    <?php
    $redis_sort_option=array('BY'=>'user_level_*',
                'SORT'=>'DESC',
                'GET'=>array('//','user_password_*','user_name_*')
                );
    var_dump($redis->SORT('user_id',$redis_sort_option));//array(12) { [0]=> string(3) "222" [1]=> string(9) "hey,im in" [2]=> string(6) "hacker" [3]=> string(1) "1" [4]=> string(20) "a_long_long_password" 
    [5]=> string(5) "admin" [6]=> string(1) "2" [7]=> string(11) "nobodyknows" [8]=> string(6) "huangz" [9]=> string(5) "59230" [10]=> string(10) "jack201022" [11]=> string(4) "jack" }
    //-------------------------------------------------------------- //1) "222" // id //2) "hacker" // name //3) "hey,im in" // password //4) "1" //5) "admin" //6) "a_long_long_password" //7) "2" //8) "huangz" //9) "nobodyknows" //10) "59230" //11) "jack" //12) "jack201022"

    只获取对象而不排序
    BY修饰符可以将一个不存在的key当作权重,让SORT跳过排序操作。
    该方法用于你希望获取外部对象而又不希望引起排序开销时使用。

    <?php
    // 确保fake_key不存在
    $redis->EXISTS('fake_key');//(integer) 0
    
    // 以fake_key作BY参数,不排序,只GET name 和 GET password
    $redis_sort_option=array('BY'=>'fake_key',
                'SORT'=>'DESC',
                'GET'=>array('//','user_name_*','user_password_*')
                );
    var_dump($redis->SORT('user_id',$redis_sort_option));//array(12) { [0]=> string(3) "222" [1]=> string(6) "hacker" [2]=> string(9) "hey,im in" [3]=> string(5) "59230" [4]=> string(4) "jack" [5]=> string(10) 
    "jack201022" [6]=> string(1) "2" [7]=> string(6) "huangz" [8]=> string(11) "nobodyknows" [9]=> string(1) "1" [10]=> string(5) "admin" [11]=> string(20) "a_long_long_password" }
    //---------------------------------------------- //1) "222" // id //2) "hacker" // user_name //3) "hey,im in" // password //4) "59230" //5) "jack" //6) "jack201022" //7) "2" //8) "huangz" //9) "nobodyknows" //10) "1" //11) "admin" //12) "a_long_long_password"

    保存排序结果

    默认情况下,SORT操作只是简单地返回排序结果,如果你希望保存排序结果,可以给STORE选项指定一个key作为参数,排序结果将以列表的形式被保存到这个key上。(若指定key已存在,则覆盖。)

    <?php
    $redis->EXISTS('user_info_sorted_by_level');  // 确保指定key不存在   //(integer) 0
    $redis_sort_option=array('BY'=>'user_level_*',
                'GET'=>array('//','user_name_*','user_password_*'),
                'STORE'=>'user_info_sorted_by_level'
                );
    
    var_dump($redis->SORT('user_id',$redis_sort_option)); //int(12)
    var_dump($redis->LRANGE('user_info_sorted_by_level', 0 ,11));  // 查看排序结果  //array(12) { [0]=> string(5) "59230" [1]=> string(4) "jack" [2]=> string(10) "jack201022" [3]=> string(1) "2" [4]=> string(6) 
    "huangz" [5]=> string(11) "nobodyknows" [6]=> string(3) "222" [7]=> string(6) "hacker" [8]=> string(9) "hey,im in" [9]=> string(1) "1" [10]=> string(5) "admin" [11]=> string(20) "a_long_long_password" }
    //----------------------------------------------------------------- //1) "59230" //2) "jack" //3) "jack201022" //4) "2" //5) "huangz" //6) "nobodyknows" //7) "222" //8) "hacker" //9) "hey,im in" //10) "1" //11) "admin" //12) "a_long_long_password"

    一个有趣的用法是将SORT结果保存,用EXPIRE为结果集设置生存时间,这样结果集就成了SORT操作的一个缓存。
    这样就不必频繁地调用SORT操作了,只有当结果集过期时,才需要再调用一次SORT操作。
    有时候为了正确实现这一用法,你可能需要加锁以避免多个客户端同时进行缓存重建(也就是多个客户端,同一时间进行SORT操作,并保存为结果集),具体参见SETNX命令。
    在GET和BY中使用哈希表
    可以使用哈希表特有的语法,在SORT命令中进行GET和BY操作。

    <?php
    // 假设现在我们的用户表新增了一个serial项来为作为每个用户的序列号
    // 序列号以哈希表的形式保存在serial哈希域内。
    
    $redis_hash_testdata_array=array(1=>'23131283',
                    2=>'23810573',
                    222=>'502342349',
                    59230=>'2435829758'
                    );
    
    $redis->HMSET('serial',$redis_hash_testdata_array);
    
    // 我们希望以比较serial中的大小来作为排序user_id的方式
    $redis_sort_option=array('BY'=>'*->serial');
    var_dump($redis->SORT('user_id', $redis_sort_option)); //array(4) { [0]=> string(3) "222" [1]=> string(5) "59230" [2]=> string(1) "2" [3]=> string(1) "1" }
    
    //----------------------------------------
    //1) "222"
    //2) "59230"
    //3) "2"
    //4) "1"

    符号"->"用于分割哈希表的关键字(key name)和索引域(hash field),格式为"key->field"。
    除此之外,哈希表的BY和GET操作和上面介绍的其他数据结构(列表、集合、有序集合)没有什么不同。

    SET

    将字符串值value关联到key。如果key已经持有其他值,SET就覆写旧值,无视类型,总是返回OK(TRUE),因为SET不可能失败。

    <?php
    //①对字符串类型的key进行SET
    $redis->SET('key', 'val');//bool(true)
    
    //②对非字符串类型的key进行SET
    $redis->LPUSH('key_obj', "val1");  //建立一个列表 #(integer) 1 //int(1)
    $redis->TYPE('key_obj');//list //int(3)
    
    $redis->SET('key', "val_obj");   //覆盖列表类型 #OK //bool(true)
    $redis->TYPE('key');//string //int(1)

    SETNX

    将key的值设为value,当且仅当key不存在。若给定的key已经存在,则SETNX不做任何动作。设置成功,返回1。设置失败,返回0。

    <?php
    $redis->exists('key');  // key不存在 //bool(false);
    $redis->setnx('key', "val");  // key设置成功 //bool(true)
    $redis->setnx('key', "val1");  // key设置失败 //bool(false)
    echo $redis->get('key');  // 没有被覆盖 //"val"

    SETEX

    将值value关联到key,并将key的生存时间设为seconds(以秒为单位)。如果key已经存在,SETEX命令将覆写旧值。设置成功时返回OK.

    <?php
    $redis->setex('key', 10, 'val'); //表示存储有效期为10秒
    举例:
    //①key不存在
    $redis->setex('key', 60,val);//bool(true)
    echo $redis->get('key');  ////"val"
    sleep(4);
    echo $redis->ttl('key');  //剩余生存时间 //int(56)
    
    //②key已经存在,key被覆写
    $redis->set('key', "val1"); //bool(true);
    $redis->setex('key', 3000,"val2"); //bool(true);
    echo $redis->get('key');    //"val2"

    SETRANGE

    用value参数覆写给定key所储存的字符串值,从偏移量offset开始。不存在的key当作空白字符串处理。
    SETRANGE命令会确保字符串足够长以便将value设置在指定的偏移量上,如果给定key原来储存的字符串长度比偏移量小(比如字符串只有5个字符长,但你设置的offset是10),那么原字符和偏移量之间的空白将用零比特(zerobytes,"x00")来填充。

    警告

    当生成一个很长的字符串时,Redis需要分配内存空间,该操作有时候可能会造成服务器阻塞(block)。在2010年的Macbook Pro上,设置偏移量为536870911(512MB内存分配),耗费约300毫秒, 设置偏移量为134217728(128MB内存分配),耗费约80毫秒,设置偏移量33554432(32MB内存分配),耗费约30毫秒,设置偏移量为8388608(8MB内存分配),耗费约8毫秒。 注意若首次内存分配成功之后,再对同一个key调用SETRANGE操作,无须再重新内存。

    <?php
    //
    ①对非空字符串进行SETRANGE $redis->SET('key', "hello world"); $redis->SETRANGE('key', 6, "Redis"); //int(11) $redis->GET('key');//"hello Redis" //②对空字符串/不存在的key进行SETRANGE $redis->EXISTS('empty_string');//bool(false) $redis->SETRANGE('empty_string', 5 ,"Redis!"); //对不存在的key使用SETRANGE //int(11) var_dump($redis->GET('empty_string')); //空白处被"x00"填充 #"x00x00x00x00x00Redis!" //return string(11) "Redis!"

    MSET

    同时设置一个或多个key-value对。当发现同名的key存在时,MSET会用新值覆盖旧值,如果你不希望覆盖同名key,请使用MSETNX命令。总是返回OK(因为MSET不可能失败)

    <?php
    $array_mset=['key1'=>'val1', 'key2'=>'val2'];
    $redis->MSET($array_mset); //bool(true)
    
    // MSET覆盖旧值的例子 但是经过测试覆盖不了
    var_dump($redis->SET('google', "google.cn"));   //bool(true)
    var_dump($redis->MSET('google',"google.hk")); //bool(false)
    echo $redis->GET('google'); //google.cn  与redis手册的示例结果不符

    MSETNX

    同时设置一个或多个key-value对,当且仅当key不存在。即使只有一个key已存在,MSETNX也会拒绝所有传入key的设置操作(原子性),当所有key都成功设置,返回1。如果所有key都设置失败(最少有一个key已经存在),那么返回0。

    <?php
    //①对不存在的key进行MSETNX
    $array_mset=array('rmdbs'=>'MySQL',
            'nosql'=>'MongoDB',
            'key-value-store'=>'redis'
            );
    $redis->MSETNX($array_mset);//bool(true)
    
    
    //②对已存在的key进行MSETNX
    $array_mset=array('rmdbs'=>'Sqlite',
            'language'=>'python'
            );
    var_dump($redis->MSETNX($array_mset));  // rmdbs键已经存在,操作失败 //bool(false)
    var_dump($redis->EXISTS('language'));  // 因为操作是原子性的,language没有被设置  bool(false)
    
    echo $redis->GET('rmdbs');  // rmdbs没有被修改 //"MySQL"
    
    $array_mset_keys=array( 'rmdbs', 'nosql', 'key-value-store');
    print_r($redis->MGET($array_mset_keys)); //Array ( [0] => MySQL [1] => MongoDB [2] => redis )

    APPEND

    连接到或者设定字符串。如果key已经存在并且是一个字符串,APPEND命令将value追加到key原来的值之后。如果key不存在,APPEND就简单地将给定key设为value,就像执行SET key value一样。

    <?php
    //①对不存在的key执行APPEND
    $redis->exists('key');  // 确保key不存在 //bool(false)
    $redis->append('key',"val");  // 对不存在的key进行APPEND,等同于SET key "val" //int(3) // 字符长度
    
    //②对字符串进行APPEND
    $redis->append('key', " append_val ");
    echo $redis->get('key');  // 查看整个字符串 //"val append_val"
    
    //strlen 获取字符串长度,当 key不存在时,返回0。
    $redis->set('key', "value");
    echo $redis->strlen('key'); //int(5)
    echo $redis->strlen('not_exists_key'); // 不存在的key长度视为0  //int(0)

    GET

    返回key所关联的字符串值。如果key不存在,返回nil。

    <?php
    var_dump($redis->GET('not_exists_key'));  //return bool(false)
    $redis->SET('exists_key', "val"); //return bool(true)
    var_dump($redis->GET('exists_key')); //return string(7) "val"

    MGET
    返回所有(一个或多个)给定key的值。如果某个指定key不存在,那么返回特殊值nil。因此,该命令永不失败。一个包含所有给定key的值的列表。

    <?php
    $redis_mget_key_array=array('exists_key','not_exists_key');
    var_dump($redis->MGET($redis_mget_key_array));  //当MGET中有不存在key的情况   //array(2) { [0]=> string(3) "val" [1]=> bool(false) }

    GETRANGE
    返回key中字符串值的子字符串,字符串的截取范围由start和end两个偏移量决定(包括start和end在内)。负数偏移量表示从字符串最后开始计数,-1表示最后一个字符,-2表示倒数第二个,以此类推。

    <?php
    $redis->SET('key', "hello, my friend"); echo $redis->GETRANGE('key', 0, 4); //返回索引0-4的字符,包括4。 //"hello" echo $redis->GETRANGE('key', -1 ,-5); //不支持回绕操作 //"" echo $redis->GETRANGE('key', -3 ,-1); //负数索引 //"end" echo $redis->GETRANGE('key', 0, -1); //从第一个到最后一个 //"hello, my friend" echo $redis->GETRANGE('key', 0, 1008611); //值域范围不超过实际字符串,超过部分自动被符略 //"hello, my friend"

    GETSET

    将给定key的值设为value,并返回key的旧值。当key没有旧值时,返回nil。

    <?php
    var_dump($redis->EXISTS('key'));//return bool(false);
    var_dump($redis->GETSET('key','old_val'));  //因为key之前不存在,没有旧值,返回nil   //bool(false)
    var_dump($redis->GETSET('key','new_val')); //key被更新,旧值被返回 //string(7) "old_val"

    STRLEN
    返回key所储存的字符串值的长度。当key储存的不是字符串值时,返回一个错误。字符串值的长度,当 key不存在时,返回0。

    <?php
    $redis->SET('key', "Hello world");
    echo $redis->STRLEN('key'); //int(11)
    echo $redis->STRLEN('not_exists_key'); //不存在的key长度视为int(0)

    INCR
    将key中储存的数字值增一。如果key不存在,以0为key的初始值,然后执行INCR操作。

    <?php
    $redis->SET('page_view', 20);
    var_dump($redis->INCR('page_view')); //int(21) 
    var_dump($redis->GET('page_view'));   // 数字值在Redis中以字符串的形式保存 //string(2) "21

    INCRBY
    将key所储存的值加上增量increment。如果key不存在,以0为key的初始值,然后执行INCRBY命令。

    <?php
    //①key存在且是数字值
    $redis->SET('num', 50);  //设置num为50
    $redis->INCRBY('num', 20);  //给num加上20
    var_dump($redis->GET('num')); //string(2) "70"
    
    //②key不存在
    $redis->INCRBY('not_exists_key',20);  //20
    var_dump($redis->GET('not_exists_key')); //string(20)
    
    //③key不是数字值
    $redis->SET('book', "long long ago...");
    var_dump($redis->INCRBY('book', 200)); // bool(false)

    DECR

    将key中储存的数字值减一。如果key不存在,以0为key的初始值,然后执行DECR操作。

    <?php
    //①对存在的数字值key进行DECR
    $redis->SET('num', 10);
    $redis->DECR('num'); //int(9)
    echo $redis->GET('num');  //string(1) "9"
    
    //②对不存在的key值进行DECR
    $redis->DECR('not_exists_key');  //int(-1) 
    echo $redis->GET('not_exists_key'); //string(2) "-1"

    DECRBY
    将key所储存的值减去减量decrement。如果key不存在,以0为key的初始值,然后执行DECRBY操作。

    <?php
    //①对存在的数值key进行DECRBY
    $redis->SET('num', 100);
    var_dump($redis->DECRBY('num', 20)); //int(80)
    var_dump($redis->GET('num'));  //string(2) "80"
    
    //②对不存在的key进行DECRBY
    var_dump($redis->DECRBY('not_exists', 10));  //int(-10)
    var_dump($redis->GET('not_exists')); //string(3) "-10"

     

  • 相关阅读:
    jass 函数收集
    struts2注解 no Action mapped for namespace and …
    重新安装服务,报指定的服务已标记为删除的错误
    使用Hexo+ Github 建站 时 使用 hexo d 命令异常:You should configure deployment settings in _config.yml first! Available deployer plugins: git For more help, you can check the online docs: https://hexo.io/
    打包dll发布到nuget服务器
    中国电信SIP账号在FreePBX 13中的中继设置
    配置EPON家庭网关接入中国电信电话交换IP网络
    Laravel迁移(Migration)
    阿里云企业邮箱的POP3、SMTP、IMAP地址是什么?
    Centos 8 x86_64 Nginx + PHP 安装步骤
  • 原文地址:https://www.cnblogs.com/wt645631686/p/8336499.html
Copyright © 2011-2022 走看看