Redis (二) 常用类型及命令

238 阅读3分钟

字符串类型

  • set key value [ex 秒] [px 毫秒] [nx] | [xx]

    如:set a 1 ex 10,  10秒有效
        set a 1 px 9000, 9秒有效
    注: ex/px 不要同时使用,否则以后面的有效期为准
    nx: 表示key不存在时,执行操作
    xx: 表示key存在时,执行操作
    
  • mset (multi set) 一次性设置多个键值

    mset key1 v1 key2 v2 ...
    
  • 获取key的

    get key    
    
  • 获取多个key的值

    mget key1 key1 ...keyn 
    
  • 把字符串的offset偏移字节,改成value

    setrange key offset value
    
    例:
        set great hello
        setrange great 2 x
        get great   得到 hexlo
    
    注意:
        如果偏移量大于字符长度,该字符自动补0x00(\x00)
        hello\x00\x00!!!!
    
  • 把value追加到key的原值上

    append key value
    
  • 获取字符串中[start,stop]范围的值,包括start和stop

    getrange key start stop
    
    备注:
        对于字符串的下标:左数从0开始,右数从-1开始
    注意:
        1.start >= length 返回 “”
        2.stop >= length 截取字符串结尾
        3.如果start所处位置在stop右边,返回空字符串
    
  • 获取旧值并设置新值

    getset key newvalue
    
  • 自增和自减

    incr key                自增 + 1
    decr key                递减 - 1
    incrby key number       增加多少
    decrby key number       减少多少
    incrbyfloat key floatnumber 增加浮点数
    
  • 设置offset对应二进制位上的值

    setbit key offset value
    返回:该位上的旧值
    注意:
        1.如果offset过大,则回你在中间填充0
        2.offset 最大2^32-1可推出最大的字符串为512M
    
  • 对key1,key2,keyN作operation,并将结果保存到destkey上

    bitop operation destkey key1 [key2...]
    
    备注:operation可以是:
        ANDORNOTXOR
    注意:对于NOT操作,key不能多个
    
    例:
        setbit lower 7 0
        setbit lower 2 1
        set char Q
        bitop or char char lower
        get char  变为了小写
    

list类型

  • 向列表中添加数据

    lpush key value : 向左添加
    rpush key value : 向右添加
    
  • 返回链表中[start,stop]中的元素

    lrange key start stop 
    
    规律:左数从0开始,右数从-1开始
    
  • 返回并删除链表元素

    lpop key : 返回并删除头部元素
    rpop key : 返回并删除尾部元素
    
  • 从key链表中删除value值

    lrem key count value
    
    注:
        1.删除count的绝对值个value后即诶书
        2.count>0 从表头删除
        3.count<0 从表尾结束
    
  • 剪切key对应的连接,切[start,stop]一段,并把该段重新赋给key

    ltrim key start stop
    
    注:包含start,stop
    
  • 返回index索引上的值

    lindex key index 
    
  • 计算链接表的元素个数

    llen key
    
  • 在key链表中寻中‘search’,并在search值之前|之后插入value

    linsert key after|before search value
    
    注:一旦找到一呃search后,命令就结束了,因此不会插入多个value
    
  • 把source的尾部拿出来放在dest的头部,并返回该元素值

    rpoplpush source destt
    
    场景:
        task + bak 双链表完成安全队列,进行任务的分发
    
    业务逻辑:
        1.rpoplpush task bak
        2.接收返回值,并做业务处理
        3.如果成功,rpop bak清除任务,如果不成功,下次从bak表里取任务
    
  • 等待弹出key的尾/头元素

    brpop | blpop  key timeout
    
    备注:
        timeout为等待时间
        如果timeout为0 ,则一直等待
    
    场景:长轮询ajax,在线聊天时,能够用到
    

set集合结构及命令

  • set集合的特点:

    1. 无序性 2. 唯一性 3. 确定性

    注意: 在string和link(list)的命令中,可以通过range来访问string中的某几个字符 或某几个元素,但是,因为集合的无序性,无法通过下表或者范围来访问部分 元素。因此,想要查看元素,要么随机选一个,要么全选

  • 在集合中增加元素

    sadd key value [value ...]
    
  • 查看集合元素

    smembers key
    
  • 删除集合中的元素

    srem key value value1 value2 ...
    返回值:删掉的个数,忽略不存在的元素
    
  • 返回并删除集合中的随机一个元素

    spop key
    
  • 随机获得集合中的一个元素

    srandmember key
    
  • 判断某个元素是否在key集合中

    sismember key value
    
    返回: 1/0
    
  • 返回集合中元素的个数

    scard key
    
  • 把source中的value删除,并添加到dest集合中

    smove source dest value
    
  • 求出key1,key2,key3三个集合中的交集,并返回

    sinter key1 key2 key3
    
  • 求出交集并保存到result集合中

    sinterstore result key1 key2 key3
    
  • 求出key1 key2 key3三个集合的并集,并返回

    sunion key1 key2 key3
    
  • 求多个集合的差集

    sdiff key1 key2 key3 
    key1与key2 key3的差集(减去他们公共的部分,key1集合中剩下的元素)
    

有序集合的结构及命令

  • 添加元素

    zadd key score value1 score value2
    
    说明:
        有序集合会根据score来进行排序
    
  • 查询集合中member的排名(升序 0 开始)

    zrank key member
    
  • 查询member的排名(降序 0 开始)

    zrevrank key memeber
    
  • 查询集合中,[start,stop]的元素,默认是升序排列

    zrange key start stop [withscores] 从start 到 stop之间的
    
    备注:withscores是把score打印出来
    
  • 把集合降序排列,取名字[start,stop]之间的元素

    zrevrange key start stop
    
  • 取score在[min,max]内的元素

    zrangebyscore key min max [withscores] limit offset N
    
    说明:跳过offset个,取N个
    
  • 返回元素的个数

    zcard key
    
  • 返回[min,max]区间内元素的数量

    zcount key min max
    
  • 根据score来删除元素,删除score在[min,max]之间的

    zremrangebyscore key min max
    
  • 根据排名删除元素,删除名次在[start,end]之间的

    zremrangebyrank key start end
    
  • 指定名字删除元素

    zrem key value
    
  • 求集合的交集等操作

        zinterstore destination numkeys key1 [key2 ...] 
    [weights weight [weight ...}] [aggregate sum | min | max]
    
    说明:
        1.聚合方法用:sum | min | max
        2.聚合的结果:保存在destination中
    问:
        如果有交集,交集元素又有score,那么,score怎么处理?
    答:
        aggregate sum : score 想加
        aggregate min : score 求最小
        aggregate max : score 求最大
    
    另:
        可以通过weight设置不同key的权重,交集时,score * weights
    
  • 求集合的并集等操作

    用法同上 ⬆️
    zunionstore
    

hash结构及命令

  • 结构

    相当于一个关联数组
    field => value
    name     yang
    age      18
    height   180
    
  • 把key中field域的值设为value

    hset key field value
    
    注:
        如果没有field域,直接添加,
        如果有,则覆盖原field上的值
    
  • 设置多个field->value值到key中

    hmset key field1 value1 [field2 value2 ...]
    
    备注:
        对应php理解为:
        $key = array(field1 => value1,field2 => valuew ...fieldN => valueN)
    
  • 返回key中的field域对应的值

    hget key field
    
  • 查询多个key中field对应的值

    hmget key field1 field2...fieldN
    
  • 返回key中所有field 和 value

    hgetall key
    
  • 删除key中的field

    hdel key field
    
  • 返回key中元素的数量

    hlen key
    
  • 判断key中有没有field域

    hexists key field
    
  • 把key中的field域的值增长整数型value

    hinrby key field value   
    
  • 把key中的field域的值增长浮点值value

    hinrby float key field value  
    
  • 返回key中所有的field

    hkeys key
    
  • 返回key中所有value

    hvals key
    

本文为作者原创,允许转载,同步于骚杨's Blog,转载请说明文章出处,欢迎关注

注:如果本篇博客有任何错误或建议,欢迎留言,我会及时跟进并更正内容!感谢大家~