Redis教程

Redis数据库之(二)数据类型

本文主要是介绍Redis数据库之(二)数据类型,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

二、数据类型

2.1 数据存储类型介绍

  • redis 自身是一个 Map,其中所有的数据都是采用 key : value 的形式存储;
  • 数据类型指的是存储的数据的类型,也就是 value部分的类型,key部分永远都是字符串。
    在这里插入图片描述

2.2 string

  • string 类型

    • 存储的数据:单个数据,最简单的数据存储类型,也是最常用的数据存储类型;
    • 存储数据的格式:一个存储空间保存一个数据;
    • 存储内容:通常使用字符串,如果字符串以整数的形式展示,可以作为数字操作使用。
      在这里插入图片描述
  • string 类型数据的基本操作

    • 添加/修改数据(添加/修改多个数据)
    #添加/修改数据
    set key value
    #添加/修改多个数据
    mset key1 value1 key2 value2 …
    
    • 获取数据(获取多个数据)
    #获取数据
    get key
    #获取多个数据
    mget key1 key2 …
    
    • 删除数据
    #删除数据
    del key
    
    • 获取数据字符个数(字符串长度)
    #获取数据字符个数(字符串长度)
    strlen key
    
    • 追加信息到原始信息后部(如果原始信息存在就追加,否则新建)
    #追加信息到原始信息后部(如果原始信息存在就追加,否则新建)
    append key value
    
  • string 类型数据的扩展操作

    • 设置数值数据增加指定范围的值
    incr key
    incrby key increment
    incrbyfloat key increment
    
    • 设置数值数据减少指定范围的值
    decr key
    decrby key increment
    
    • 设置数据具有指定的生命周期
    setex key seconds value
    psetex key milliseconds value
    
  • string在redis内部存储默认就是一个字符串,当遇到增减类操作incr,decr时会转成数值型进行计算;
  • redis所有的操作都是原子性的,采用单线程处理所有业务,命令是一个一个执行的,因此无需考虑并发
    带来的数据影响;
  • 注意:按数值进行操作的数据,如果原始数据不能转成数值,或超越了redis 数值上限范围,将报错。
    9223372036854775807(java中long型数据最大值,Long.MAX_VALUE);
  • redis用于控制数据库表主键id,为数据库表主键提供生成策略,保障数据库表的主键唯一性
  • 此方案适用于所有数据库,且支持数据库集群;
  • redis 控制数据的生命周期,通过数据是否失效控制业务行为,适用于所有具有时效性限定控制的操作;
  • redis应用于各种结构型和非结构型高热度数据访问加速。
  • string 类型数据操作的注意事项
    数据操作不成功的反馈与数据正常操作之间的差异。
    • string 类型数据操作的注意事项
      ① 表示运行结果是否成功
       (integer) 0 → false 失败
       (integer) 1 → true 成功
      ② 表示运行结果值
       (integer) 3 → 3 3个
       (integer) 1 → 1 1个
    • 数据未获取到
      (nil)等同于null
    • 数据最大存储量
       512MB
    • 数值计算最大范围(java中的long的最大值)
      9223372036854775807

2.3 hash

  • hash类型

    • 新的存储需求:对一系列存储的数据进行编组,方便管理,典型应用存储对象信息;
    • 需要的存储结构:一个存储空间保存多个键值对数据;
    • hash类型:底层使用哈希表结构实现数据存储。
      在这里插入图片描述
  • hash 类型数据的基本操作

    • 添加/修改数据(添加/修改多个数据)
    #添加/修改数据
    hset key field value
    #添加/修改多个数据
    hmset key field1 value1 field2 value2 … 
    
    • 获取数据(获取多个数据)
    #获取数据
    hget key field
    hgetall key
    #获取多个数据
    hmget key field1 field2 … 
    
    • 删除数据
    #删除数据
    hdel key field1 [field2]
    
    • 获取哈希表中字段的数量
    # 获取哈希表中字段的数量
    hlen key
    
    • 获取哈希表中是否存在指定的字段
    #获取哈希表中是否存在指定的字段
    hexists key field
    
    • hash 类型数据扩展操作
      • 获取哈希表中所有的字段名或字段值
      hkeys key
      hvals key
      
      • 设置指定字段的数值数据增加指定范围的值
      hincrby key field increment
      hincrbyfloat key field increment
      
    • hash 类型数据操作的注意事项
      • hash类型下的value只能存储字符串,不允许存储其他数据类型,不存在嵌套现象。如果数据未获取到,
        对应的值为(nil)
        hash 类型数据操作的注意事项
      • 每个 hash 可以存储 2
        32 - 1 个键值对
      • hash类型十分贴近对象的数据存储形式,并且可以灵活添加删除对象属性。但hash设计初衷不是为了存
        储大量对象而设计的,切记不可滥用,更不可以将hash作为对象列表使用
      • hgetall 操作可以获取全部属性,如果内部field过多,遍历整体数据效率就很会低,有可能成为数据访问
        瓶颈

2.4 list

  • list 类型

    • 数据存储需求:存储多个数据,并对数据进入存储空间的顺序进行区分;
    • 需要的存储结构:一个存储空间保存多个数据,且通过数据可以体现进入顺序;
    • list类型:保存多个数据,底层使用双向链表存储结构实现。
      在这里插入图片描述
      在这里插入图片描述
  • list 类型数据基本操作

    • 添加/修改数据
    lpush key value1 [value2] ……
    rpush key value1 [value2] ……
    
    • 获取数据
    lrange key start stop
    lindex key index
    llen key 
    
    • 获取并移除数据
    lpop key
    rpop key
    
  • list 类型数据扩展操作

    • 规定时间内获取并移除数据
    blpop key1 [key2] timeout
    brpop key1 [key2] timeout
    brpoplpush source destination timeout
    
    • 移除指定数据
    lrem key count value
    

小贴士:
redis 应用于具有操作先后顺序的数据控制。

  • list 类型数据操作注意事项
    • list中保存的数据都是string类型的,数据总容量是有限的,最多2;
      32- 1 个元素 (4294967295)。
    • list具有索引的概念,但是操作数据时通常以队列的形式进行入队出队操作,或以栈的形式进行入栈出栈操作;
    • 获取全部数据操作结束索引设置为-1;
    • list可以对数据进行分页操作,通常第一页的信息来自于list,第2页及更多的信息通过数据库的形式加载。

2.5 set

  • set 类型

    • 新的存储需求:存储大量的数据,在查询方面提供更高的效率;
    • 需要的存储结构:能够保存大量的数据,高效的内部存储机制,便于查询;
    • set类型:与hash存储结构完全相同,仅存储键,不存储值(nil),并且值是不允许重复的。
      在这里插入图片描述
  • set 类型数据的基本操作

    • 添加数据
    sadd key member1 [member2]
    
    • 获取全部数据
    smembers key 
    
    • 删除数据
    srem key member1 [member2]
    
    • 获取集合数据总量
    scard key
    
    • 判断集合中是否包含指定数据
    sismember key member
    
  • set 类型数据的扩展操作

    • 随机获取集合中指定数量的数据
    srandmember key [count]
    
    • 随机获取集合中的某个数据并将该数据移出集合
    spop key [count]
    
    • 求两个集合的交、并、差集
    sinter key1 [key2]
    sunion key1 [key2]
    sdiff key1 [key2]
    
    • 求两个集合的交、并、差集并存储到指定集合中
    sinterstore destination key1 [key2]
    sunionstore destination key1 [key2]
    sdiffstore destination key1 [key2] 
    
    • 将指定数据从原始集合中移动到目标集合中
    smove source destination member 
    

    在这里插入图片描述

  • set 类型数据操作的注意事项

    • set 类型不允许数据重复,如果添加的数据在 set 中已经存在,将只保留一份;
    • set 虽然与hash的存储结构相同,但是无法启用hash中存储值的空间。

2.6 sorted_set

  • sorted_set 类型

    • 新的存储需求:数据排序有利于数据的有效展示,需要提供一种可以根据自身特征进行排序的方式;
    • 需要的存储结构:新的存储模型,可以保存可排序的数据;
    • sorted_set类型:在set的存储结构基础上添加可排序字段。
      在这里插入图片描述
  • sorted_set 类型数据的基本操作

    • 添加数据
    zadd key score1 member1 [score2 member2]
    
    • 获取全部数据
    zrange key start stop [WITHSCORES]
    zrevrange key start stop [WITHSCORES]
    
    • 删除数据
    zrem key member [member ...]
    
    • 按条件获取数据
    zrangebyscore key min max [WITHSCORES] [LIMIT]
    zrevrangebyscore key max min [WITHSCORES]
    
    • 条件删除数据
    zremrangebyrank key start stop
    zremrangebyscore key min max
    
    • 获取集合数据总量
    zcard key
    zcount key min max
    
    • 集合交、并操作
    zinterstore destination numkeys key [key ...]
    zunionstore destination numkeys key [key ...]
    

小贴士:
 min与max用于限定搜索查询的条件;
 start与stop用于限定查询范围,作用于索引,表示开始和结束索引;
 offset与count用于限定查询范围,作用于查询结果,表示开始位置和数据总量。

  • sorted_set 类型数据的扩展操作
    • 获取数据对应的索引(排名)
    zrank key member
    zrevrank key member
    
    • score值获取与修改
    zscore key member
    zincrby key increment member
    

redis 应用于计数器组合排序功能对应的排名。

  • sorted_set 类型数据操作的注意事项
    • score保存的数据存储空间是64位,如果是整数范围是-9007199254740992~9007199254740992;
    • score保存的数据也可以是一个双精度的double值,基于双精度浮点数的特征,可能会丢失精度,使用时
      候要慎重;
    • sorted_set 底层存储还是基于set结构的,因此数据不能重复,如果重复添加相同的数据,score值将被反
      复覆盖,保留最后一次修改的结果。
这篇关于Redis数据库之(二)数据类型的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!