zoukankan      html  css  js  c++  java
  • Redis系列-存储篇string主要操作函数小结

    通过上两篇的介绍,我们的redis服务器基本跑起来。db都具有最基本的CRUD功能,我们沿着这个脉络,开始学习redis丰富的数据结构之旅,当然先从最简单且常用的string开始。

    1、新增

    a)set

    语法:set key value

    解释:把值value赋给key,如果key不存在,新增;否则,更新

    [plain] view plaincopy
     
    1. [root@xsf001 ~]# redis-cli   
    2. redis 127.0.0.1:6379> set user.1.name zhangsan #设置user.1.name 为zhangsan  
    3. OK  
    4. redis 127.0.0.1:6379> set user.name 45      #设置user.1.name 为45  
    5. OK  

                   b)setnx

    语法:setnx key value

    解释:只insert不update,即,仅仅key不存在时,则设置key的值为value,并返回1,否则返回0  。setnx 是set if not exists 的缩写

    [plain] view plaincopy
     
    1. redis 127.0.0.1:6379> setnx user.1.name zhangsan   #user.1.name已经存在,则返回0  
    2. (integer) 0  
    3. redis 127.0.0.1:6379> setnx user.2.name zhangsan  #user.2.name不存在,则设置  
    4. (integer) 1  

    c)setex

    语法: setex key seconds value

    解释:设置key的过期时间和值。过期时间seconds单位是秒。设置过期时间和值是原子操作,如果redis仅仅当做缓存,这个很命令很有用。

    [plain] view plaincopy
     
    1. redis 127.0.0.1:6379> setex user.2.age 2 14  #把user.2.age 的值设14 并且2秒后过期失效  
    2. OK  
    3. redis 127.0.0.1:6379> get user.2.age  #失效前  
    4. "14"  
    5. redis 127.0.0.1:6379> get user.2.age #失效后  
    6. (nil)  

    d)mset

    语法:mset key value [key value ...]

    解释:同时设置多个key-value

    [plain] view plaincopy
     
    1. redis 127.0.0.1:6379> mset user.4.name lisi user.4.age 34  #设置user.4.name=lisi,user.4.age=34  
    2. OK  
    3. redis 127.0.0.1:6379> get user.4.name  
    4. "lisi"  
    5. redis 127.0.0.1:6379> get user.4.age  
    6. "34"  


                 e)msetnx

    语法:msetnx key value [key value ...]

    解释:所有key都不存在才执行set操作

    [plain] view plaincopy
     
    1. redis 127.0.0.1:6379> msetnx user.4.name lisi user.4.age 34  #key 都设置过,无法再次set  
    2. (integer) 0  
    3. redis 127.0.0.1:6379> msetnx user.4.name lisi user.4.std 3   #key user.4.name 曾设置过,无法再次设置  
    4. (integer) 0  
    5. redis 127.0.0.1:6379> msetnx user.4.tech lisi user.4.std 3   #key都没有设置过,可以再次设  
    6. (integer) 1  


    2、查询

    a)get

    语法:get key

    解释:获取key所set的值

    [plain] view plaincopy
     
    1. redis 127.0.0.1:6379> get user.4.name  #获取user.4.name 的值  
    2. "lisi"  
    3. redis 127.0.0.1:6379> get user.4.age  
    4. "34"  
    5. redis 127.0.0.1:6379> get user.4.tech  
    6. "lisi"  
    7. redis 127.0.0.1:6379> get user.4.std  
    8. "3"  

    b)mget

    语法: get key [key]

    解释:批量获取key的值。程序一次获取多个值,可以减少网络连接损耗。

    [plain] view plaincopy
     
    1. redis 127.0.0.1:6379> mget user.4.name user.4.age user.4.std #批量获取存在key的值  
    2. 1) "lisi"   #user.4.name的值  
    3. 2) "34"     #user.4.age 的值  
    4. 3) "3"      #user.4.std 的值  
    5.   
    6. redis 127.0.0.1:6379> mget user.4.name user.4.age user.4.std user.4.fri  #key user.4.fri 不存在仍然可以返回  
    7. 1) "lisi"  
    8. 2) "34"  
    9. 3) "3"  
    10. 4) (nil) #user.4.fri 的值  

                c)getrange

    语法:getrange key star end

    解释:获取存储在key中value的字串。字符串的截取有star和end决定,字符串的第一个字符编号是0,第二个是1,一次类推;如果是负数,-1是最后一个字符,-2是倒数第二个字符,一次类推。

    [plain] view plaincopy
     
    1. redis 127.0.0.1:6379> get user.4.name  
    2. "lisi"  
    3. redis 127.0.0.1:6379> getrange user.4.name 0 3  # 0 表示开始  
    4. "lisi"  
    5. redis 127.0.0.1:6379> getrange user.4.name 1 2  
    6. "is"  
    7. redis 127.0.0.1:6379> getrange user.4.name 1 -2 #-2 表示倒数第二  
    8. "is"  
    9. redis 127.0.0.1:6379> getrange user.4.name -1 -2  # end 》 start  
    10. ""  
    11. redis 127.0.0.1:6379> getrange user.4.name 1 66  #end 》 值的长度  
    12. "isi"  

      3、修改

    a)getset

    语法:getset key value

    解释:设置key的值,并返回key的旧值。

    [plain] view plaincopy
     
    1. redis 127.0.0.1:6379> get user.4.name   #存在的key  
    2. "lisi"  
    3. redis 127.0.0.1:6379> getset user.4.name wangwu  #把存在的user.4.name设置为wagnwu  
    4. "lisi"  
    5. redis 127.0.0.1:6379> get user.4.name    
    6. "wangwu"  
    7. redis 127.0.0.1:6379> get user.5.name  #不存在的key  
    8. (nil)  
    9. redis 127.0.0.1:6379> getset user.5.name lisi  
    10. (nil)  
    11. redis 127.0.0.1:6379> get user.5.name  
    12. "lisi"  

     b) append

    语法:append key value

    解释:key存在,在旧值的后面追加value;key不存在,直接set

    [plain] view plaincopy
     
    1. redis 127.0.0.1:6379> get user.4.name #存在的key  
    2. "wangwu"  
    3. redis 127.0.0.1:6379> append user.4.name 01  
    4. (integer) 8  
    5. redis 127.0.0.1:6379> get user.4.name  
    6. "wangwu01"  
    [plain] view plaincopy
     
    1. redis 127.0.0.1:6379> get user.6.name #不能存在的key  
    2. (nil)  
    3. redis 127.0.0.1:6379> append user.6.name jim  
    4. (integer) 3  
    5. redis 127.0.0.1:6379> get user.6.name  
    6. "jim"  

    c)setrange

    语法:setrange key offset value

    解释:用value重写key值的一部分,偏移量由offset指定

    [plain] view plaincopy
     
    1. redis 127.0.0.1:6379> get user.4.name  #key存在  
    2. "wangwu01"  
    3. redis 127.0.0.1:6379> setrange user.4.name 0 lisi  
    4. (integer) 8  
    5. redis 127.0.0.1:6379> get user.4.name  
    6. "lisiwu01"  
    7. redis 127.0.0.1:6379> setrange user.4.name 9 lisi  # offset 》字符串长度  
    8. (integer) 13  
    9. redis 127.0.0.1:6379> get user.4.name  
    10. "lisiwu01x00lisi"  
    11. redis 127.0.0.1:6379> setrange user.4.name 8 lisi  
    12. (integer) 13  
    13. redis 127.0.0.1:6379> get user.4.name  
    14. "lisiwu01lisii"  
    15. redis 127.0.0.1:6379> get user.6.std #key 不存在  
    16. (nil)  
    17. redis 127.0.0.1:6379> setrange user.6.std 0 3  
    18. (integer) 1  
    19. redis 127.0.0.1:6379> get user.6.std  
    20. "3"  

    d)incr

    语法:incr key

    解释:key中如果存储的是数字,则可以通过incr递增key的值,返回递增后的值。如果key不能存在,视为初始值为0

    [plain] view plaincopy
     
    1. redis 127.0.0.1:6379> get user.7.age #key不存在 ,初始值视为0,  
    2. (nil)  
    3. redis 127.0.0.1:6379> incr user.7.age   
    4. (integer) 1  
    5. redis 127.0.0.1:6379> get user.7.age  
    6. "1"  
    7. redis 127.0.0.1:6379> incr user.7.age  
    8. (integer) 2  

    e)incrby

    语法:incrby key increment

    解释:用指定的步长增加key存储的数字。如果步长increment是负数,则减

    [plain] view plaincopy
     
    1. redis 127.0.0.1:6379> get user.7.age  
    2. "3"  
    3. redis 127.0.0.1:6379> incrby user.7.age 15  #增加15  
    4. (integer) 18  
    5. redis 127.0.0.1:6379> get user.7.age  
    6. "18"  
    7. redis 127.0.0.1:6379> incrby user.7.fri 18  #key不能存在,原值视为0  
    8. (integer) 18  
    9. redis 127.0.0.1:6379> get user.7.fri  
    10. "18"  
    11. redis 127.0.0.1:6379> incrby  user.7.age -1  #步长为负  
    12. (integer) 17  
    13. redis 127.0.0.1:6379> get user.7.age  
    14. "17"  


    f)decr

    语法:decr key

    解释:递减key保存的数字,如果key不存在,初始值视为0

    [plain] view plaincopy
     
    1. redis 127.0.0.1:6379> get user.7.age  
    2. "17"  
    3. redis 127.0.0.1:6379> decr user.7.age  
    4. (integer) 16  
    5. redis 127.0.0.1:6379> decr user.7.num #key 不存在,初始值视为0  
    6. (integer) -1  
    7. redis 127.0.0.1:6379> decr user.7.num  
    8. (integer) -2  

    g)decrby

    语法:decrby key decrement

    解释:用指定的步长递减key的值,如果步长decrment是负值,则递增

    [plain] view plaincopy
     
    1. redis 127.0.0.1:6379> decrby user.7.num 4  #递减  
    2. (integer) -6  
    3. redis 127.0.0.1:6379> decrby user.7.num -9 #负值,递增  
    4. (integer) 3  


    注意:递增递减系列的函数,只能对保存的是数字的key操作,不能是字符串

      4)删除

    语法:del key [key]

    解释:删除指定的key,返回删除key的个数

    [plain] view plaincopy
     
    1. redis 127.0.0.1:6379> del user.7.num  
    2. (integer) 1  
    3. redis 127.0.0.1:6379> get user.7.num  
    4. (nil)  
    5. redis 127.0.0.1:6379> del user.7.age user.7.fri #删除多个key  
    6. (integer) 2  
    7. redis 127.0.0.1:6379> mget user.7.age user.7.fri  
    8. 1) (nil)  
    9. 2) (nil)  

      5)其他

    语法:strlen key

    解释:获取key中所存储值的长度

    [plain] view plaincopy
     
    1. redis 127.0.0.1:6379> get user.1.name  
    2. "45"  
    3. redis 127.0.0.1:6379> strlen user.1.name  #user.1.name 长度  
    4. (integer) 2  
    5. redis 127.0.0.1:6379> strlen user.8.name #key不存在  
    6. (integer) 0  

    通过上面的大量demo,对string的操作基本总结完毕。今天就到这里吧!

    更多信息,请参考:http://redis.io/commands#string

  • 相关阅读:
    Linux系统
    Maven常用命令有哪些?
    .Maven的工程类型有哪些?
    什么是Maven?
    Shiro 的优点
    比较 SpringSecurity 和 Shiro
    Maven的工程类型有哪些?
    Maven仓库是什么
    什么是Maven?
    什么是 JavaConfig?
  • 原文地址:https://www.cnblogs.com/kingCpp/p/4648491.html
Copyright © 2011-2022 走看看