Redis的数据类型及其操作


        1  启动redis服务    redis客户端服务

    redis-server
再开一个terminal  
    redis-cli  
关闭服务redis-cli shutdown

      2  redis支持的数据类型

作为Key-value型数据库,Redis也提供了键(Key)和键值(Value)的映射关系。
但是,除了常规的数值或字符串,Redis的键值还可以是以下形式之一:  
    ●Lists (列表)
   ●Sets (集合)
  ●Sorted sets (有序集合)
  ●Hashes (哈希表)
  键值的数据类型决定了该键值支持的操作。Redis支持诸如列表、集合或有序集合的交集、并集、查集等高级原子操作;
  同时,如果键值的类型是普通数字,Redis则提供自增等原子操作。
  
a 字符串类型的增删改查

Redis的数据类型及其操作_第1张图片

    字符串中set的用法

    
    1, set
    
    设置key对应的值为string类型的value。例如我们添加一个username = heinrich的键值对,可以这样做:
    set username heinrich
    
    2, setnx 
     
    设置key对应的值为string类型的value。如果key已经存在,返回0,nx是not exist的意思。
  例如我们添加一个username= heinrich01的键值对,可以这样做:
  setnx username heinrich01
  如果username存在返回0 如果不存在创建,和value值无关
  
  3, setex
  
  设置key对应的值为string类型的value,并指定此键值对应的有效期。
  例如我们添加一个haircolor = red 的键值对,并指定它的有效期是100秒,可以这样做:
    使用场景比如说是在秒杀倒计时
    setex haircolor 100  red  
    100秒后自动失效

Redis的数据类型及其操作_第2张图片

    

    4, setrange
    
  修改指定key的value值的子字符串部分值。
  例如我们希望将[email protected]邮箱替换为gmail邮箱,毕竟qq邮箱屌丝多,那么我们可以这样做:
  
   127.0.0.1:6379> get mail
    "[email protected]"
    127.0.0.1:6379> setrange mail 8 @gmail.com
    (integer) 18
    127.0.0.1:6379> get mail
    "[email protected]"
    其中的8是指从下标为8(包含8)的字符开始替换,也就是第九位
    
    5, mset 
     
    一次设置多个key的值,成功返回ok表示所有的值都设置了,失败返回0表示没有任何值被设置。
    127.0.0.1:6379> mset user1 "gee" user2 "gale"
    OK
    127.0.0.1:6379> get user1
    "gee"
    127.0.0.1:6379> get user2
    "gale"
    127.0.0.1:6379> 
    
    6, msetnx 
     
    一次设置多个key的值,成功返回ok表示所有的值都设置了,
    失败返回0表示没有任何值被设置,但是不会覆盖已经存在的key。
   基于上面mset的例子 
    127.0.0.1:6379> msetnx user1 "gate" user2 "jay" user3 "hallen"
    (integer) 0
    127.0.0.1:6379> get user3
    (nil)
    127.0.0.1:6379> get user1
    "gee"
    127.0.0.1:6379> get user2
    "gale"
    127.0.0.1:6379> 
    也就是说只要没有成功,只要返回0 那么所有操作都失败

    字符串中get的用法

        

   1,  get
   
  获取key对应的string值,如果key不存在返回nil。
  例如我们获取一个库中存在的键name,可以很快得到它对应的value 
  127.0.0.1:6379> set phone apple
    OK
    127.0.0.1:6379> get phone
    "apple"
    当我想要获取moblie这个字段的时候,没有所以返回nil
    127.0.0.1:6379> get moblie
    (nil)
    127.0.0.1:6379> 
    
    2, getset 
     
    设置key的值,并返回key的旧值。
    127.0.0.1:6379> set phone apple
    OK
    127.0.0.1:6379> getset phone huawei
    "apple"
    127.0.0.1:6379> 
    给phone设置一个新的值,并返回原来的那个值
    如果phone不存在,我们看看会出现什么情况
    127.0.0.1:6379> set phone apple
    OK
    127.0.0.1:6379> get phone
    "apple"
    127.0.0.1:6379> del phone
    (integer) 1
    127.0.0.1:6379> getset phone huawei
    (nil)
    127.0.0.1:6379> get phone
    "huawei"
    127.0.0.1:6379> 
    发现了不存在直接返回nil但是依然赋值给phone
    
   3, getrange  
   
   获取指定key的value值的子字符串。
  具体样例如下: 
    
    127.0.0.1:6379> get mail
    "[email protected]"
    127.0.0.1:6379> getrange mail 0 6
    "heinric"
    127.0.0.1:6379> 
    和setrange一样,他们都是成双成对的出现的,老外和我们一样,都喜欢好事成双
    如果要获取后面的怎么办.当然是有办法的
    127.0.0.1:6379> getrange mail -10 -1
    "@gmail.com"
    127.0.0.1:6379> 
    -10 代表的是从倒数第十位开始,  -1 代表的是最后一位包含在内
    当下标超出字符串长度时,将默认为是同方向的最大下标
    127.0.0.1:6379> getrange mail -100 -1
    "[email protected]"
    127.0.0.1:6379>
     
   4,  mget 
   
    一次获取多个key的值,如果对应key不存在,则对应返回nil。
    127.0.0.1:6379> mset book1 android book2 java book3 redis
    OK
    127.0.0.1:6379> mget book1 book2 book3 book4
    1) "android"
    2) "java"
    3) "redis"
    4) (nil)
    127.0.0.1:6379> 
    如果不存在返回nil
    
    5, incr 
    
  对key的值做加加操作,并返回新的值。注意incr一个不是int的value会返回错误,
    incr一个不存在的key,则设置key为1
    
    127.0.0.1:6379> set num 20
    OK
    127.0.0.1:6379> get num
    "20"
    127.0.0.1:6379> incr age
    (integer) 1
    127.0.0.1:6379> get age
    "1"
    127.0.0.1:6379>  incr num
    (integer) 21
    127.0.0.1:6379> 
    如果之不存在默认是0
    
    
    6,  incrby
    
    同incr类似,加指定值 ,key不存在时候会设置key,并认为原来的value是 0
    
    127.0.0.1:6379> incrby num 10
    (integer) 31
    127.0.0.1:6379> incrby money 10
    (integer) 10
    127.0.0.1:6379> 
    
    有加法肯定有减法
    
   7,  decr
   
    对key的值做的是减减操作,decr一个不存在key,则设置key为-1
    
    127.0.0.1:6379> get age
    "1"
    127.0.0.1:6379> decr age
    (integer) 0
    127.0.0.1:6379> get num
    "31"
    127.0.0.1:6379> decr num
    (integer) 30
    127.0.0.1:6379> 
    
   8,decrby
   
    都说了成双出现当然有decrby了
    同incr类似,减指定值 ,key不存在时候会设置key,并认为原来的value是 0

    127.0.0.1:6379> get num
    "30"
    127.0.0.1:6379> decrby num 9
    (integer) 21
    127.0.0.1:6379> decrby pack 20
    (integer) -20
    127.0.0.1:6379> 
    
    decrby完全是为了可读性,我们完全可以通过incrby一个负值来实现同样效果,反之一样。 
    127.0.0.1:6379> decrby pack 20
    (integer) -20
    127.0.0.1:6379> decrby pack -25
    (integer) 5
    127.0.0.1:6379> 
    
    9, append 
    
     给指定key的字符串值追加value,返回新字符串值的长度。
    例如我们向name的值追加一个@gmail.com字符串,那么可以这样做: 
    
    127.0.0.1:6379> set name heinrich
    OK
    127.0.0.1:6379> get name
    "heinrich"
    127.0.0.1:6379> append name "@gmail.com"
    (integer) 18
    127.0.0.1:6379> get name
    "[email protected]"
    127.0.0.1:6379>
    
    10, strlen
    
    取指定key的value值的长度
    127.0.0.1:6379> get name
    "[email protected]"
    127.0.0.1:6379> strlen name
    (integer) 18
    127.0.0.1:6379>


你可能感兴趣的:(Redis的数据类型及其操作)