Redis存储数的五种数据结构对应操作

1. 字符串 String

      字符串(String)存储类型,键值对形式存储即 key-value,最基础的数据结构。

  • 操作指令 / 可做操作:

    设置值

     #设置值 
     set key value
     #设置秒过期时间
     setex key seconds value
     #键必须不存在才可以设置成功,用于添加
     setnx key value
     #键必须存在才可以设置成功,用于更新
     setxx key value
     #批量设置值
     mset key1 value key2 value  
     #值自增
     incr key
     #值自增几个数
     incrby key num
     #incrbyfloat 自增浮点数 decr自减 decrby自减指定数字
    

    setnx 由于单线程命令处理机制,同时执行setnx只会有一个客户端能成功,因此setnx可以作为分布式锁的一种实现方案。

    获取值

    #获取值
    get key
    #检查键是否存在
    exist key
    #批量获取值
    mget key1 key2 key3
    #获取原来的值,设置新的值
    getset key value
    #截取字符串
    getrange key start(0) end(1)
    
  • String存储的结构
    在这里插入图片描述

2. 哈希 hash

      hash的键值——本身又是一个键值对结构。
      如:key:{{field:value},{fieldN:value}}

  • 操作指令 / 可做操作:

    数据结构可视为:key是指一行数据,field是这行数据的各个column,value是column的值

    #设置值
    hset key field value
    #获取值
    hget key field
    #删除field
    hdel key field 
    #批量操作
    hmset key field1 value field2 value 
    hmget key field1 field2
    #判断field是否村子
    hexists key field
    #获取所有的field名字
    hkeys key
    #获取所有的值
    hvals key
    #field值自增,自减等操作/在string的命令前加上h
    hincrby key field
    
  • hash数据结构
    在这里插入图片描述

3. 列表 List

      用来存储多个有序的字符串,可以对列表两端插入和弹出,还可以指定范围获取元素,可以充当栈和队列的角色。

      结构类似 key: a,b,c,d,e

  • 操作指令 / 可做操作:

    #从右边插入元素
    rpush key value value2
    #从左侧插入元素
    lpush key value value2 
    #从左到右获取列表所有元素
    lrange key 0 -1
    #某元素前后插入数据 / 在 pivot 元素前后插入 value值
    linsert key before|after pivot value
    #获取指定范围内的元素列表
    lrange key start end
    #获取指定下标值
    lindex key index
    #从左侧弹出元素/删除
    lpop key
    #从右侧弹出元素
    rpop key
    #删除元素从列表中找到等于value的元素进行删除,根据count的不同分为三种情况
    #count>0,从左到右,删除最多count个元素。
    #count<0,从右到左,删除最多count绝对值个元素。
    #count=0,删除所有。
    lrem key count value	
    #修改指定下表的元素
    lset key index newValue
    
  • 使用场景
          简单的消息队列,redis+lpush+brpop实现阻塞队列。
          文章列表,文章列表是有序的,list也可顺序存储。

     lpush+lpop=Stack(栈)
     lpush+rpop=Queue(队列)
     lpsh+ltrim=Capped Collection(有限集合)
     lpush+brpop=Message Queue(消息队列)
    
  • 存储结构
    在这里插入图片描述

4. 集合 set

      集合类型也是用来保存多个字符串元素,但和列表类型不一样,集合中不允许有重复的元素,并且集合中的元素是无序的,不能通过下标获取元素。
      redis支持集合取交集,并集,差集

  • 操作指令 / 可做操作:

    #添加元素
    sadd key value1 value2 value3
    #删除元素
    srem key value1 value2 
    #计算元素个数
    scard key
    #判断元素是否在集合中
    sismember key value
    #随机返回N个元素
    srandmember key count
    #随机弹出一个元素
    spop myset
    #获取所有元素
    smembers key
    
  • 集合与集合间的操作

    #求集合交集
    sinter key1 ke2 
    #求集合并集
    sunion key1 key2 
    #返回所有给定 key 与第一个 key 的差集
    sdiff key1 key2 
    #将计算出的交集,并集,差集结果保存
    sinterstore destination key [key ...]
    suionstore destination key [key ...]
    sdiffstore destination key [key ...]
    
  • 存储结构
    在这里插入图片描述

5. 有序集合 zset

有序集合基于socre分数作为排序依据,有序集合中元素不能重复,但是socre排序依据可以重复。

数据结构是否元素重复是否有序排序实现方式
列表索引下标
集合
有序集合score分值排序
  • 操作指令 / 可做操作:

    #添加元素与相应分数 / 仅添加成员不添加分数会报错
    zadd key score member
    #计算某个成员的分数
    zscore key member
    #返回成员排名,0位开始
    zrank key member
    #删除成员
    zrem key member
    #增加成员分数 增加member成员num分数
    zincrby key num member
    
  • 存储示例
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值