你见过不长毛的羊吗

Redis(三)-五大数据类型+操作命令

2019.07.27

常用五大数据类型

  • string、list、hash、set、sorted set

五大数据类型-String

  • sting 是redis最基本的类型
  • 是二进制安全的,即redis的string可以包含任何数据。如图片或者序列化的对象。
  • 单个string类型的value大小限制为512M
  • 常用操作
    • set key val:redis的insert操作。key存在时,值会被覆盖
    • get key:redis的select操作
    • del key:redis的删除操作
    • append key abc:将abc追加到原字符串后面,形成新的字符串。key不存在时会执行insert操作
    • strlen key:查看当前key字符串长度。一个汉字占3个字符
    • incr key:值加一。(要求字符串为数字)
    • decr key:值减一。(要求字符串为数字)
    • incrby key 3:值加3
    • decrby key 3:值减3
    • getrange key 0 3:得到字符串的前4个字符。(注意redis中是前后都取)
    • setrange key 0 abc:字符串部分替换。本例:从下标0开始,使用abc替换原字符串中对应位置的字符串。如果原字符串为123456,执行后为,abc456
    • setex key 10 val:设置一个生命周期为10秒的kv对
    • setnx key val:如果key不存在,执行insert操作。否则,不执行任何操作
    • mset k1 v1 k2 v2 k3 v3:同时设置多个kv对。 (key已存在,值会被覆盖)
    • mget k1 k2 k3:同时获取多个值
    • msetnx k1 v1 k2 v2 k3 v3:当k1,k2,k3都不存在时才执行insert操作。否则,不执行任何操作

五大数据类型-hash(重要)

  • 是一个键值对集合,类似java里的Map
  • 是一个string类型的key和value的映射表。即,value是一个键值对,其key为String类型
  • 适合存储对象。类似java中Map<String, Object>
  • 常用操作
    • hset user id 123 name ysl:新建一个hash,key:user,value包含id、name,值分别为123、ysl
    • hget user id:获取user中id的值
    • hmset user id 123 name ysl age 23:新建一个hash,key:user,value包含id、name、age,值分别为123、ysl、23
    • hmget user id name age:批量获取值
    • hgetall user:获取user中所有的k-v对
    • hdel user age:删除user中age键值对
    • hlen user:user中包含的k-v对的个数
    • hexists user email:user中是否包含email这个key
    • hkeys user:user中所有的key。(id、name、age)
    • hvals user:user中所有的value。(123、ysl、23)
    • hincrby user age 2:user中age对应的值+2
    • hincrbyfloat user score 1.5:user中score对应的值+1.5
    • hsetnx user age 3:user中不存在age时,执行插入操作

五大数据类型-list

  • 一个字符串列表,按照插入顺序排序,可以在列表首尾添加元素
  • 底层是一个链表。(操作链表首位效率高,中间低)
  • 值全部移除,对应的列表也就没有了
  • 常用操作
    • lpush list01 1 2 3 4 5:创建list01,并插入值。(正进反出)
    • lrange list01 0 -1:从0(起始)到-1(结束位置),查看列表中元素。结果为:5 4 3 2 1
    • rpush list02 1 2 3 4 5:创建list01,并插入值。(正进正出)。此时lrange list02 0 -1, 结果为:1 2 3 4 5
    • lpop list01 :取列表顶部第一个元素。(list01得到5,list02得到1)
    • rpop list01:取列表底部第一个元素。(list01得到1,list02得到5)
    • lindex list01 2:取列表下标为2的元素
    • llen list01:列表长度
    • lrem list01 N val:删除N个Value
    • ltrim list01 start end:截取下标从start到end的值,重新赋值给list01
    • rpoplpush list01 list02:将list01的底部元素移动到list02的顶部。(只移动一个)
    • lset list01 idx value:修改列表指定下标的值为value
    • linsert list01 before/after val1 val2:在值为val1之前/之后插入val2

五大数据类型-set

  • set是string类型的元素集合,无序无重复,通过HashTable实现
  • 常用操作
    • sadd set01 1 1 2 2 3 3:向集合set01(没有会创建)中添加1 2 3
    • smembers set01:查看集合中的元素
    • sismember set01 1:值1是否在集合set01中
    • scard set01:获取集合中元素个数
    • srem set01 val1:删除集合中指定元素
    • srandmember key N:从集合中,随机取N个元素
    • spop set01:随机取一个元素
    • smove set01 set02 val1:将set01中的val1移动到set02中
    • sdiff set01 set02 set03:求集合的差集。得到的数据是:在第一个set中,不在后面任何一个set中的元素项
    • sinter set01 set02 set03:求集合交集。得到的数据:所有集合中都有的元素项
    • sunion set01 set02:求集合并集。得到的数据:所有集中元素项去重后的结果

五大数据类型-sorted set (zset)

  • 与set一样是string类型元素集合,有序无重复

  • 每个元素都关联一个double类型的分数(score),redis正是通过分数来为集合中的成员进行从小到大的排序, set的 成员是唯一的,但分数却可以重复

    可以理解为,key与set中一样,只不过 value 变成了 score与数据值

  • 常用操作

    • zadd zset01 60 val1 70 val2 80 val3:新建一个zset。key:zset01,value:60 val1、70 val2...
    • zrange zset01 0 -1:获取zset01中所有的值
    • zrange zset01 0 -1 withscores:获取zset01中所有值,及其对应的分数
    • zrangebyscore zset01 60 (80:获取score从60到80之间的数据(包含60不包含80),并按照score排序
    • zrangebyscore zset01 60 80 limit 2 3:获取score从60到80之间数据,并按照score排序。再取结果中下标为2到5(2+3)的数据项作为最终的结果
    • zrem zset01 val1:删除zset01下值为val1的项
    • zcard zset01:统计zset01中元素个数
    • zcount zset01 60 80:统计score从60到80之间的元素个数
    • zrank zset01 val1:获取val1对应的下标
    • zscore zset01 val1:获取val1对应的score
    • zrevrank key val1:逆序获取val1的下标
    • zrevrange zset01 0 -1:逆序获取集合
    • zrevrangebyscore zset01 80 60:获取zset01中结束score到开始score的元素项

说明:redis5.x新增了Stream流数据类型