美文网首页
redis常用数据类型

redis常用数据类型

作者: 极客_Ls | 来源:发表于2020-01-25 21:44 被阅读0次

    1. String

    如果value为纯数字可以当number用

    2. List

    3. Hash

    4. Set

    5. sorted-set

    1. 添加信息

    set key value
    

    一次存取多个:

    mset key1 val1 key2 val2 key3 val3 ...
    

    2. 信息查询

    get key
    

    一次存取多个:

    mget key1 key2  key3  ...
    

    3. 清屏

    clear
    

    4. 查看帮助

    help  <comment>
    help @<group>  // 输入help后接一个空格,使用tab生成group名
    

    5. 退出

    1.  quit
    2.  exit
    3.  <esc> // 慎用
    

    6. 删除

    del key
    

    String 操作

    2.1 查看String值的长度

    strlen key
    

    2.2 追加内容

    append key val
    
    // 当该值不存在时会新建一给内容
    

    2.3 数字类型的扩展操作

    // 1. 增加
    incr key // 相当于自增 key ++
    // 给key增加给定的值
    incrby key  increment   // 如:incrby num 3
    // 给可以指定增加浮点型数据
    incrbyfloat key increment  // 如:incrbyfloat num 10.5
    
    // 2. 减小
    //自减
    decr key //相当于 key --
    // 给定减小的值
    decrby key increment  // 如:decrby num 3 
    // 减指定的浮点型数据
    decrbyfloat key increment
    

    2.4 给数据设置指定的生命周期

    // 给数据指定秒为单位的生命时间
    setex key second value
    // 给数据指定毫秒为单位的生命时间
    psetex millonSecond value
    

    2.5 String命名解决方案

    // 例如微博大V的博客数量
    1.  user:id:idCount:blog:num
        age: set user:id:1571785241:blog 100
    2. 存储json字符串
        age:  set user:id:1571785241 {name:ljb,tel:15717085241}
    

    2.6 key的设置约定

    key置常用以下方式设置

    // 表名:主键名:主键值:属性名
    age: order:orderiid:123582845844:price
    

    hash 数据类型

    hash 可类似看作为java中的hashmap
    也可以看作redis中的小redis

    • 新的存储需求:对一系列的数据进行编组,方便管理,典型应用存储对象信息
    • 需求的存储结构:一个存储空间保存多个键值对数据
    • hash 类型:底层使用hash表结构实现数据保存

    当filed数量较少时:存储结构优化为类数组结构、数据较多时使用hashmap

    3.1 hash数据的添加修改

    // 单个设置或修改
    hset key filed value
    // 多个修改或设置
    hmset key filed1 value filed2 values...
    
    

    3.2 hash数据的获取

    // 获取单个属性的值
    hget key filed
    //获取多个属性的值
    hmget key filed1 filed2 ...
    // 获取所有属性的值
    hgetall key
    

    3.3 删除数据

    hdel key filed1 [filed2] ...
    

    3.4 获取字段表中字段的数量

    hlen key
    

    3.5 获取哈希表中是否存在指定的值

    hexists key field
    

    3.6 获取hash中的所有键和值

    // 获取所有key
    hkeys key
    // 获取所有values
    hvals key
    

    3.7 hash数据中数字型的增长

    // 指定整型数据
    hincrby key field increment
    // 指定浮点型数据
    hincrbyflaot key field increment
    // hash不提供减小操作,当要减小时使用
    hincrby key field -increment
    
    

    注:

    1. hash 类型下的value只能存字符串,,不允许存储其他数据类型,不存在嵌套现象、如果数据未获取到,对应的值为 nil
    2. 每个hash可以存储 232 - 1 个键值对
    3. hash类型十分贴近对象的数据存储形式,并且可以灵活添加删除对象属性。但hash设计初衷不是为了存在大量对象而设计的,不可滥用hash,更不可将hash作为对象列表使用
    4. hgetall 操作可以获取全部属性,如果内部field过多,遍历整体数据效率就会很低,有可能成为数据访问的瓶颈
    1. 8 hash 的应用场景
      电商网站的购物车的实现
    在购物车中:
        将用户作为key
        // cart:id:0000
        将商品id作为field
        // 商品编号
        以商品对应的数量为value
    
    

    3.9 判断后设置

    // 先判断是否有该key,是否有该field,如果有返回0,否则返回1
    hsetnx key filed value
    

    List 数据结构

    4.1 添加、修改数据

    // 向链表左边添加数据
    lpush key value1 [value2] ... 
    // 向链表右边添加数据
    rpush key value1 [value2]...
    

    4.2 获取数据

    // 获取范围内的数据
    lrange key start stop // 当不知道list的集合时可使用 -1 代替最大值
    age:lrange list01 0 -1
    // 获取索引指向的数据
    lindex key index
    

    4.3 获取并移除数据

    lpop key // 获取并移除左边第一个数据
    
    rpop key // 获取并移除右边第一个数据
    

    4.4 规定时间内获取并移除数据

    在规定时间内如果有则获取并移除,如果没有则不做处理

    blpop key1 [key2] timeout
    
    brpop key1 [key2] timeout
    

    4.5 获取并移除指定的元素

    lrem key count value
    

    • list 中保存的是String类型的数据,数据总容量是有限的,最多 232 - 1 个元素
    • list 具有索引的概念,但是操作数据时通常以队列的形式进行入队出队操作,或以栈的形式进行入栈出栈的操作
    • 获取全部数据操作时的结束索引为 -1
    • list 可以对数据进行分页操作,通常第一页的数据来自于 redis 的list中 ,而第二页及更多来自于数据库

    set 类型

    set 类型的基本操作

    5.1 向set 添加数据

    sadd key member1 [member2] ...
    

    5.2 获取set 里的全部数据

    smembers key
    

    5.3 删除数据

    srem key member1 [member2] ...
    

    5.4 获取集合内的数据总数

    scard key
    

    5.6 判断集合内是否有指定的元素

    sismember key member
    

    5.7 随机获取集合中指定数量的数据

    srandmenber key [count]
    

    5.8 随机获取并移除集合中的数据

    spop key
    

    5.9 set 数据交并差集

    // 两个集合的交集
     sinter key1 [key2]
    // 两个集合的并集
    sunion key1 [key2]
    // 两个集合的差集
    sidff key1 [key2] 
    

    将交并差集存储到指定集合中

    // 保存两个集合的交集
     sinterstore destination key1 [key2]
    // 保存两个集合的并集
    sunionstore destination key1 [key2]
    // 保存两个集合的差集
    sidff store destination key1 [key2] 
    

    将指定数据从原始集合中移动到目标集合中

    smove source destination member
    

    注:

    1. set 不允许数据重复,如果添加的数据在 set 中已经存在,将只保留一份,之后添加的结果都是false
    2. set 虽然与hash的存储结构类似,但是无法启用hash中存储值的空间

    sorted_set

    • 新的存储需求:数据排序有利于数据的有效展示,需要提供一种可以根据自身特征进行排序的方式
    • 需要的存储结构:新的存储模型,可以保存可排序的数据
    • sorted_set类型:在set 的存储结构基础上添加可排序字段

    6.1 添加数据到sorted_set中

    zadd key scores1 member1 [scores2 member2]
    

    6.2 获取数据

    [winthscores] 带排序值

    // 获取全部数据,数据由小到大
    zrange key start storp [withscores]
    // 获取全部数据,数据由大到小
    zrevrange key start stop [winthscores]
    // 按条件获取数据,数据由小到大
    zrangebyscore  key min max [WITHSCORES] [LIMIT]
    // 按条件获取数据,数据由大到小
    zreverangebyscore key max min [WITHSCORES]
    

    6.3 删除数据

    // 删除指定数据
    zrem key member [member ... ]
    // 删除符合条件的数据
    zremrangebyrank key start stop 
    // 删除 min - max 的数据
    zremrangebyscore key min max
    

    6.4 获取集合内数据总量

    // 数据总量
    zcard key
    // 范围内数据量
    zcount key min max
    

    6.5 集合交、并集操作

    // 交集
    zinterstore destination numkeys key [key ...]
    // 并集
    zunionstore destination numkeys key [key ...]
    

    6.6 获取数据排名

    // 正向获取,有小到大额
    zrank key member
    // 反向排序
    zrevrank key member
    

    score值获取与修改

    // 获取score
    zscore key member
    // 增加score
    zincrby key increment member
    

    注:

    • score 保存的数据存储空间是 64 位
    • score 保存的数据可以是 double值,因计算机double描述问题,可能会失精度,慎用
    • 数据不能重复,如果重复添加相同的数据,score会被反骨覆盖。保留最后一次天添加的值

    相关文章

      网友评论

          本文标题:redis常用数据类型

          本文链接:https://www.haomeiwen.com/subject/ngorthtx.html