美文网首页JavaJava 杂谈Java学习之路
Redis中的数据类型及常用命令备忘录

Redis中的数据类型及常用命令备忘录

作者: 椰子奶糖 | 来源:发表于2019-08-10 15:08 被阅读5次

    带目录版:Redis中的数据类型及常用命令备忘录
    Redis安装及启停:Redis安装

    Redis 键(key)

    keys *

    查询该数据库所有的键

    exist key的名字

    判断该键是否存在

    示例:


    image.png

    我们知道Redis中默认右16个库,当前是第0库中的关键词,当exists能找到key时返回1,不能则返回0

    move key db

    移动数据,key时关键词,db指哪个数据库,指把这个数据移到指定的数据库中去

    image.png
    • 执行一下,我们发现在数据库0中已经没有k1 ,理论上被移到了数据库1中去了
    image.png
    • 再开一个,转到数据库1,第一次时没有移动之前的,第二次时移动之后的,我们发现k1已经到数据库1中了

    expire key 秒钟

    为给定的key设置过期时间

    ttl key

    查看还有多少秒过期,-1表示永不过期,-2表示已过期

    image.png

    这组测试先存了一组 k1 hello,接下来查看状态,-1 表示存在,接下来设置过期时间为20秒,不停ttl查看发现时间一直在减少,期间hello是可以查到的,20秒过后,ttl发现变为-2,表示过期,则用get key 就查不到hello了

    type key

    查看你的key是什么类型

    image.png
    • 可以看到type命令可以查出不同类型,当然当key不存在的时候返回none

    Redis的五大数据类型

    string(字符串)

    String(字符串)
    string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。

    string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。
    string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M

    常用命令

    • set/get/del/append/strlen
    • Incr/decr/incrby/decrby
    • getrange/setrange
    • setex(set with expire)键秒值/setnx(set if not exist)
    • mset/mget/msetnx
    • getset(先get再set)
    image.png
    • append key value :如果键 key 已经存在并且它的值是一个字符串, APPEND 命令将把 value 追加到键 key 现有值的末尾,返回value的长度
    • strlen key :返回value的长度
    image.png image.png

    Incr key

    为键 key 储存的数字值加上一。如果键 key 不存在, 那么它的值会先被初始化为 0 , 然后再执行 INCR 命令。如果键 key 储存的值不能被解释为数字, 那么 INCR 命令将返回一个错误。

    image.png

    INCRBY key increment

    为键 key 储存的数字值加上增量 increment 。如果键 key 不存在, 那么键 key 的值会先被初始化为 0 , 然后再执行 INCRBY 命令。如果键 key 储存的值不能被解释为数字, 那么 INCRBY 命令将返回一个错误。

    image.png

    decr/decrby的效果类似,相当于Java中的 i = i-value;

    GETRANGE key start end

    返回键 key 储存的字符串值的指定部分, 字符串的截取范围由 start 和 end 两个偏移量决定 (包括 start 和 end 在内)。负数偏移量表示从字符串的末尾开始计数, -1 表示最后一个字符, -2 表示倒数第二个字符, 以此类推。GETRANGE 通过保证子字符串的值域(range)不超过实际字符串的值域来处理超出范围的值域请求。

    SETRANGE key offset value

    从偏移量 offset 开始, 用 value 参数覆写(overwrite)键 key 储存的字符串值。不存在的键 key 当作空白字符串处理。SETRANGE 命令会确保字符串足够长以便将 value 设置到指定的偏移量上, 如果键 key 原来储存的字符串长度比偏移量小(比如字符串只有 5 个字符长,但你设置的 offset 是 10 ), 那么原字符和偏移量之间的空白将用零字节(zerobytes, "\x00" )进行填充。

    image.png image.png

    SETEX key seconds value

    将键 key 的值设置为 value , 并将键 key 的生存时间设置为 seconds 秒钟。如果键 key 已经存在, 那么 SETEX 命令将覆盖已有的值。

    SETNX key value

    只在键 key 不存在的情况下, 将键 key 的值设置为 value 。若键 key 已经存在, 则 SETNX 命令不做任何动作。SETNX 是『SET if Not eXists』(如果不存在,则 SET)的简写。

    image.png image.png

    MSET key value [key value …]

    同时为多个键设置值。如果某个给定键已经存在, 那么 MSET 将使用新值去覆盖旧值, 如果这不是你所希望的效果, 请考虑使用 MSETNX 命令, 这个命令只会在所有给定键都不存在的情况下进行设置。MSET 是一个原子性(atomic)操作, 所有给定键都会在同一时间内被设置, 不会出现某些键被设置了但是另一些键没有被设置的情况。

    MGET key [key …]

    返回给定的一个或多个字符串键的值。如果给定的字符串键里面, 有某个键不存在, 那么这个键的值将以特殊值 nil 表示。

    MSETNX key value [key value …]

    当且仅当所有给定键都不存在时, 为所有给定键设置值。即使只有一个给定键已经存在, MSETNX 命令也会拒绝执行对所有键的设置操作。MSETNX 是一个原子性(atomic)操作, 所有给定键要么就全部都被设置, 要么就全部都不设置, 不可能出现第三种状态。

    image.png image.png
    • 也就是说MSETNX只有当所有key都不存在的时候才会将所有value插入,否则一个都不插入

    hash(哈希,类似java里的Map)

    Hash(哈希)Redis hash 是一个键值对集合。Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。类似Java里面的Map<String,Object>

    常用命令

    • hset/hget/hmset/hmget/hgetall/hdel
    • hlen
    • hexists key 在key里面的某个值的key
    • hkeys/hvals
    • hincrby/hincrbyfloat
    • hincrby/hincrbyfloat
    • hsetnx

    HSET hash field value

    • 将哈希表 hash 中域 field 的值设置为 value 。
    • 如果给定的哈希表并不存在, 那么一个新的哈希表将被创建并执行 HSET 操作。
    • 如果域 field 已经存在于哈希表中, 那么它的旧值将被新值 value 覆盖。

    HGET hash field

    • HGET 命令在默认情况下返回给定域的值。
    • 如果给定域不存在于哈希表中, 又或者给定的哈希表并不存在, 那么命令返回 nil
    image.png

    HMSET key field value [field value …]

    • 同时将多个 field-value (域-值)对设置到哈希表 key 中。
    • 此命令会覆盖哈希表中已存在的域。
    • 如果 key 不存在,一个空哈希表被创建并执行 HMSET 操作。

    HMGET key field [field …]

    • 返回哈希表 key 中,一个或多个给定域的值。
    • 如果给定的域不存在于哈希表,那么返回一个 nil 值。
    • 因为不存在的 key 被当作一个空哈希表来处理,所以对一个不存在的 key 进行 HMGET 操作将返回一个只带有 nil 值的表。
    image.png

    HGETALL key

    • 返回哈希表 key 中,所有的域和值。在返回值里,紧跟每个域名(field name)之后是域的值(value),所以返回值的长度是哈希表大小的两倍。

    HDEL key field [field …]

    • 删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略。

    HLEN key

    • 返回哈希表 key 中域的数量。
    image.png

    HEXISTS hash field

    • 检查给定域 field 是否存在于哈希表 hash 当中。

    HKEYS key

    • 返回哈希表 key 中的所有域。

    HVALS key

    • 返回哈希表 key 中所有域的值。
    image.png

    HINCRBY key field increment

    • 为哈希表 key 中的域 field 的值加上增量 increment 。
    • 增量也可以为负数,相当于对给定域进行减法操作。
    • 如果 key 不存在,一个新的哈希表被创建并执行 HINCRBY 命令。
    • 如果域 field 不存在,那么在执行命令前,域的值被初始化为 0 。
    • 对一个储存字符串值的域 field 执行 HINCRBY 命令将造成一个错误。
    image.png image.png image.png

    HSETNX hash field value

    • 当且仅当域 field 尚未存在于哈希表的情况下, 将它的值设置为 value 。
    • 如果给定域已经存在于哈希表当中, 那么命令将放弃执行设置操作。
    • 如果哈希表 hash 不存在, 那么一个新的哈希表将被创建并执行 HSETNX 命令。
    image.png

    list(列表)

    List(列表)Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)。它的底层实际是个链表

    常用命令

    lpush/rpush/lrange
    lpop/rpop
    lindex,按照索引下标获得元素(从上到下)
    llen
    lrem key 删N个value
    ltrim key 开始index 结束index,截取指定范围的值后再赋值给key
    rpoplpush 源列表 目的列表
    lset key index value
    linsert key before/after 值1 值2

    LPUSH key value [value …]

    • 将一个或多个值 value 插入到列表 key 的表头
    • 如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表头: 比如说,对空列表 mylist 执行命令 LPUSH mylist a b c ,列表的值将是 c b a ,这等同于原子性地执行 LPUSH mylist a 、 LPUSH mylist b 和 LPUSH mylist c 三个命令。
    • 如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。
    • 当 key 存在但不是列表类型时,返回一个错误。

    RPUSH key value [value …]

    • 将一个或多个值 value 插入到列表 key 的表尾(最右边)。
    • 如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表尾:比如对一个空列表 mylist 执行 RPUSH mylist a b c ,得出的结果列表为 a b c ,等同于执行命令 RPUSH mylist a 、 RPUSH mylist b 、 RPUSH mylist c 。
    • 如果 key 不存在,一个空列表会被创建并执行 RPUSH 操作。
    • 当 key 存在但不是列表类型时,返回一个错误。

    LRANGE key start stop

    • 返回列表 key 中指定区间内的元素,区间以偏移量 start 和 stop 指定。下标(index)参数 start 和 stop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1表示列表的第二个元素,以此类推。你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
    • 超出范围的下标超出范围的下标值不会引起错误。如果 start 下标比列表的最大下标 end ( LLEN list 减去 1 )还要大,那么 LRANGE 返回一个空列表。如果 stop 下标比 end 下标还要大,Redis将 stop 的值设置为 end 。
    • start 和stop是闭区间的
    image.png image.png

    LPOP key

    移除并返回列表 key 的头元素。

    RPOP key

    移除并返回列表 key 的尾元素。

    image.png

    LINDEX key index

    返回列表 key 中,下标为 index 的元素。

    LLEN key

    返回列表 key 的长度。

    image.png

    LREM key count value

    根据参数 count 的值,移除列表中与参数 value 相等的元素。
    count 的值可以是以下几种:

    count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。
    count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。
    count = 0 : 移除表中所有与 value 相等的值。

    image.png image.png image.png

    LTRIM key start stop

    • 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
    image.png

    RPOPLPUSH source destination

    命令 RPOPLPUSH 在一个原子时间内,执行以下两个动作:

    • 将列表 source 中的最后一个元素(尾元素)弹出,并返回给客户端。
      将 source 弹出的元素插入到列表 destination ,作为 destination 列表的的头元素。
    • 如果 source 不存在,值 nil 被返回,并且不执行其他动作。
    • 如果 source 和 destination 相同,则列表中的表尾元素被移动到表头,并返回该元素,可以把这种特殊情况视作列表的旋转(rotation)操作。
    image.png

    LSET key index value

    • 将列表 key 下标为 index 的元素的值设置为 value 。当 index 参数超出范围,或对一个空列表( key 不存在)进行 LSET 时,返回一个错误。
    image.png

    LINSERT key BEFORE|AFTER pivot value

    • 将值 value 插入到列表 key 当中,位于值 pivot 之前或之后。
    • 当 pivot 不存在于列表 key 时,不执行任何操作。
    • 当 key 不存在时, key 被视为空列表,不执行任何操作。
    • 如果 key 不是列表类型,返回一个错误。
    image.png

    性能总结

    它是一个字符串链表,left、right都可以插入添加;如果键不存在,创建新的链表;如果键已存在,新增内容;如果值全移除,对应的键也就消失了。链表的操作无论是头和尾效率都极高,但假如是对中间元素进行操作,效率就很惨淡了。

    set(集合)

    Set(集合)Redis的Set是string类型的无序集合。它是通过HashTable实现实现的

    常用命令

    SADD key member [member …]

    • 将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。
    • 假如 key 不存在,则创建一个只包含 member 元素作成员的集合。
    • 当 key 不是集合类型时,返回一个错误。

    SMEMBERS key

    • 返回集合 key 中的所有成员。不存在的 key 被视为空集合

    SISMEMBER key member

    • 判断 member 元素是否集合 key 的成员。
    image.png

    SRANDMEMBER key [count]

    • 如果命令执行时,只提供了 key 参数,那么返回集合中的一个随机元素。
    • 如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。
    • 如果 count 大于等于集合基数,那么返回整个集合。
    • 如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值。
    image.png

    SPOP key

    • 移除并返回集合中的一个随机元素。
    image.png

    SMOVE source destination member

    • 将 member 元素从 source 集合移动到 destination 集合。
    • SMOVE 是原子性操作。
    • 如果 source 集合不存在或不包含指定的 member 元素,则 SMOVE 命令不执行任何操作,仅返回 0 。
    • 否则, member 元素从 source 集合中被移除,并添加到 destination 集合中去。
    • 当 destination 集合已经包含 member 元素时, SMOVE 命令只是简单地将 source 集合中的 member 元素删除。
    • 如果 member 元素被成功移除,返回 1 。 如果 member 元素不是 source 集合的成员,并且没有任何操作对 destination 集合执行,那么返回 0 。
    image.png

    SDIFF key [key …]

    • 返回一个集合的全部成员,该集合是所有给定集合之间的差集。
    • 不存在的 key 被视为空集。

    SINTER key [key …]

    • 返回一个集合的全部成员,该集合是所有给定集合的交集。

    SUNION key [key …]

    -返回一个集合的全部成员,该集合是所有给定集合的并集

    image.png

    zset(sorted set:有序集合)

    zset(sorted set:有序集合)Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。

    常用命令

    • zadd/zrange
    • zrangebyscore key 开始score 结束score
    • zrem

    ZADD key score member [[score member] [score member] …]

    • 将一个或多个 member 元素及其 score 值加入到有序集 key 当中。
    • 如果某个 member 已经是有序集的成员,那么更新这个 member 的 score 值,并通过重新插入这个 member 元素,来保证该 member 在正确的位置上。
    • score 值可以是整数值或双精度浮点数。
    • 如果 key 不存在,则创建一个空的有序集并执行 ZADD 操作。
    • 当 key 存在但不是有序集类型时,返回一个错误。

    ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

    • 返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score 值递增(从小到大)次序排列。
    • 具有相同 score 值的成员按字典序(lexicographical order)来排列(该属性是有序集提供的,不需要额外的计算)。
    • 可选的 LIMIT 参数指定返回结果的数量及区间(就像SQL中的 SELECT LIMIT offset, count )
    • 可选的 WITHSCORES 可以将有序集成员及其 score 值一起返回。

    ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]

    • 返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score 值递增(从小到大)次序排列。
    image.png image.png

    ZREM key member [member …]

    • 移除有序集 key 中的一个或多个成员,不存在的成员将被忽略。当 key 存在但不是有序集类型时,返回一个错误。
    image.png

    ZCARD key

    • 返回有序集 key 的基数。

    ZCOUNT key min max

    • 返回有序集 key 中, score 值在 min 和 max 之间(默认包括 score 值等于 min 或 max )的成员的数量。

    ZRANK key member

    • 返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递增(从小到大)顺序排列。排名以 0 为底,也就是说, score 值最小的成员排名为 0 。

    ZREVRANK key member

    返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递减(从大到小)排序。

    ZSCORE key member

    • 返回有序集 key 中,成员 member 的 score 值。如果 member 元素不是有序集 key 的成员,或 key 不存在,返回 nil 。
    image.png image.png

    ZRANGE key start stop [WITHSCORES]

    • 返回有序集 key 中,指定区间内的成员。
    • 其中成员的位置按 score 值递增(从小到大)来排序。
    • 具有相同 score 值的成员按字典序(lexicographical order )来排列。
    • 如果你需要成员按 score 值递减(从大到小)来排列,请使用 ZREVRANGE key start stop [WITHSCORES] 命令。
    • 可以通过使用 WITHSCORES 选项,来让成员和它的 score 值一并返回

    ZREVRANGE key start stop [WITHSCORES]

    • 其中成员的位置按 score 值递增(从大到小)来排序。
    image.png

    相关文章

      网友评论

        本文标题:Redis中的数据类型及常用命令备忘录

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