Redis学习笔记:(三)Redis数据类型及常用命令

Redis常用五大数据类型简介

String(字符串)

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

Hash

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

List(列表)

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

Set(集合)

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

Zset(sorted set:有序集合)

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

Redis常用命令

只记录常用命令的简单用法,详细用法请参考Redis API 文档

数据库命令

  1. 检查给定 key 是否存在。

    EXISTS key
    
  2. 返回 key 所储存的值的类型。

    TYPE key
    
  3. key 改名为 newkey

    #当且仅当 `newkey` 存在时,将覆盖旧值 
    RENAME key newkey
    #当且仅当 `newkey` 不存在时,将 `key` 改名为 `newkey` 
    RENAMENX key newkey
    
  4. 将当前数据库的 key 移动到给定的数据库 db 当中。

    MOVE key db
    
  5. 返回当前数据库的 key 的数量。

    DBSIZE
    
  6. 查找所有符合给定模式 patternkey, 比如说:(KEYS *或者KEYS h?llo

    KEYS pattern
    
  7. 清空数据库中的所有 key

    #清空当前数据库中的key
    FLUSHDB  
    #清空所有数据库中的key 
    FLUSHALL   
    
  8. 切换到指定的数据库,数据库索引号 index用数字值指定,以 0 作为起始索引值。默认使用 0 号数据库。(Redis默认有16个数据库,可以在配置文件中设置)

    SELECT
    
  9. 删除给定的一个或多个 key 。不存在的 key 会被忽略。

    DEL key [key …]
    
  10. 为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除。

    # 以秒为单位给key设置生存时间
    EXPIRE key seconds
    # 以秒为单位设置 key 的过期 unix 时间戳
    EXPIREAT key timestamp
    # 以毫秒为单位给key设置生存时间
    PEXPIRE key milliseconds
    # 以毫秒为单位设置 key 的过期 unix 时间戳
    PEXPIREAT key milliseconds-timestamp
    
  11. 返回给定 key 的剩余生存时间(TTL, time to live)。

    # 以秒为单位返回 key 的剩余生存时间
    TTL key
    # 以毫秒为单位返回 key 的剩余生存时间
    PTTL key
    
  12. 移除给定 key 的生存时间,将这个 key 从“易失的”(带生存时间 key )转换成“持久的”(一个不带生存时间、永不过期的 key )。

    PERSIST key
    

字符串命令

  1. 设置指定 key 的值

    SET key value [EX seconds] [PX milliseconds] [NX|XX]
    # key不存在时设置key的值,相当于 SET key value NX
    SETNX key	
    # 将键 key 的值设置为 value , 并将键 key 的生存时间设置为 seconds 秒钟,SET key value EX seconds。
    SETEX key seconds value
    # 这个命令和 SETEX 命令相似, 但它以毫秒为单位设置 key 的生存时间,相当于 SET key value PX milliseconds 。
    PSETEX key milliseconds value
    

    从 Redis 2.6.12 版本开始, SET 命令的行为可以通过一系列参数来修改:

    • EX seconds : 将键的过期时间设置为 seconds 秒。 执行 SET key value EX seconds 的效果等同于执行 SETEX key seconds value 。

    • PX milliseconds : 将键的过期时间设置为 milliseconds 毫秒。 执行 SET key value PX milliseconds 的效果等同于执行 PSETEX key milliseconds value 。

    • NX : 只在键不存在时, 才对键进行设置操作。 执行 SET key value NX 的效果等同于执行 SETNX key value 。

    • XX : 只在键已经存在时, 才对键进行设置操作。

  2. 获取指定 key 的值。

    GET key	
    
  3. 将键 key 的值设为 value , 并返回键 key 在被设置之前的旧值(旧值不存在时返回nil)。

    GETSET key value
    
  4. 将键 key 的值设为 value , 并返回键 key 在被设置之前的旧值(旧值不存在时返回nil)。

    STRLEN key
    
  5. 如果键 key 已经存在并且它的值是一个字符串, APPEND 命令将把 value追加到键 key 现有值的末尾。

    APPEND key value
    

    如果 key 不存在, APPEND 就简单地将键 key 的值设为value , 就像执行 SET key value 一样。

  6. 获取存储在 key上的值的子字符

    GETRANGE key start end
    

    负数偏移量表示从字符串的末尾开始计数, -1 表示最后一个字符, -2 表示倒数第二个字符, 以此类推。

  7. 从偏移量 offset 开始, 用 value 参数覆写(overwrite)键 key 储存的字符串值。(不存在的键 key 当作空白字符串处理。)

    SETRANGE key offset value
    
  8. 为键 key 储存的数字值加上某个值。

    # 为键 key 储存的数字值加上1
    INCR key  
    # 为键 key 储存的数字值加上增量 increment
    INCRBY key increment
    # 为键 key 储存的值加上浮点数增量 increment 。
    INCRBYFLOAT key increment
    

    如果键key不存在, 那么它的值会先被初始化为 0 , 然后再执行 INCR 命令。

    如果键key 储存的值不能被解释为数字, 那么 INCR 命令将返回一个错误。

  9. 为键 key 储存的数字值减去某个值。

    # 为键 key 储存的数字值加上1
    DECR key  
    # 为键 key 储存的数字值加上增量 increment
    DECRBY key increment
    
  10. 同时为多个键设置值。

    MSET key value [key value …]
    # 当且仅当所有给定键都不存在时, 为所有给定键设置值。
    MSETNX key value [key value …]
    

    MSET 是一个原子性(atomic)操作, 所有给定键都会在同一时间内被设置, 不会出现某些键被设置了但是另一些键没有被设置的情况。

  11. 返回给定的一个或多个字符串键的值。

    MGET key [key …]
    

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

哈希命令

  1. 将哈希表 hash 中域 field 的值设置为 value 。

    # 如果给定的哈希表并不存在, 那么一个新的哈希表将被创建并执行 HSET 操作。
    HSET hash field value
    # 当且仅当域 field 尚未存在于哈希表的情况下, 将它的值设置为 value
    HSETNX hash field value
    

    如果域 field已经存在于哈希表中, 那么它的旧值将被新值 value覆盖。

  2. 返回哈希表中给定域的值。

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

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

    HDEL key field [field …]
    
  5. 获取哈希表 key 中域的数量。

    HLEN key
    
  6. 返回哈希表 key 中, 与给定域 field 相关联的值的字符串长度(string length)。

    HSTRLEN key field
    
  7. 为哈希表 key 中的域 field 的值加上增量 increment 。

    HINCRBY key field increment
    # 为哈希表 key 中的域 field 加上浮点数增量 increment
    HINCRBYFLOAT key field increment
    

    增量也可以为负数,相当于对给定域进行减法操作。

    如果 key 不存在,一个新的哈希表被创建并执行命令。

    如果域 field不存在,那么在执行命令前,域的值被初始化为 0 。

    对一个储存字符串值的域 field执行命令将造成一个错误。

    本操作的值被限制在 64 位(bit)有符号数字表示之内。

  8. 同时将多个 field-value (域-值)对设置到哈希表 key 中。

    HMSET key field value [field value …]
    

    此命令会覆盖哈希表中已存在的域。

    如果key 不存在,一个空哈希表被创建并执行 HMSET 操作。

  9. 返回哈希表 key 中,一个或多个给定域的值。

    HMGET key field [field …]
    
  10. 返回哈希表 key 中的所有域。

    HKEYS key
    
  11. 返回哈希表 key 中所有域的值。

    HVALS key
    
  12. 返回哈希表 key 中,所有的域和值。

    HGETALL key
    
  13. 迭代哈希表中的键值对。

    HSCAN key cursor [MATCH pattern] [COUNT count]
    

列表命令

  1. 将一个或多个值 value 插入到列表 key 中。

    # 将一个或多个值 value 插入到列表 key 的表头
    LPUSH key value [value …]
    # 将值 value 插入到列表 key 的表头,当且仅当 key 存在并且是一个列表。
    LPUSHX key value
    # 将一个或多个值 value 插入到列表 key 的表尾(最右边)。
    RPUSH key value [value …]
    # 将值 value 插入到列表 key 的表尾,当且仅当 key 存在并且是一个列表。
    RPUSHX key value
    
  2. 移除并返回列表 key 的元素。

    # 移除并返回列表 key 的头元素
    LPOP key
    # 移除并返回列表 key 的尾元素。
    RPOP key
    
  3. 将列表 list1中的最后一个元素(尾元素)弹出,并返回给客户端。将 list1弹出的元素插入到列表 list2,作为 list2列表的的头元素。

    RPOPLPUSH list1 list2
    
  4. 根据参数 count 的值,移除列表中与参数 value 相等的元素。

    LREM key count value
    

    count的值可以是以下几种:

    count > 0 : 从表头开始向表尾搜索,移除与value相等的元素,数量为 count

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

    count= 0 : 移除表中所有与 value相等的值。

  5. 返回列表 key 的长度。

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

    LINDEX key index
    

    index可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

  7. 将值 value 插入到列表 key 当中,位于值 pivot 之前或之后。

    LINSERT key BEFORE|AFTER pivot value
    

    当 pivot 不存在于列表 key 时,不执行任何操作。

    当 key 不存在时, key 被视为空列表,不执行任何操作。

    如果 key 不是列表类型,返回一个错误。

  8. 将列表 key 下标为 index 的元素的值设置为 value 。

    LSET key index value
    

    当 index 参数超出范围,或对一个空列表( key 不存在)进行 LSET 时,返回一个错误。

  9. 返回列表 key 中指定区间内的元素,区间以偏移量 start 和 stop 指定。

    LRANGE key start stop
    

    stop也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

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

    LTRIM key start stop
    
  11. 阻塞式(blocking)弹出命令。

    # LPOP命令的阻塞版本,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
    BLPOP key [key …] timeout
    # RPOP命令的阻塞版本,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
    BRPOP key [key …] timeout
    # RPOPLPUSH命令的阻塞版本,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
    BRPOPLPUSH source destination timeout
    

集合命令

  1. 将一个或多个 member 元素加入到集合 key 当中。

    SADD key member [member …]
    

    已经存在于集合的 member 元素将被忽略。

    假如 key 不存在,则创建一个只包含 member 元素作成员的集合。

    key 不是集合类型时,返回一个错误。

  2. 判断 member 元素是否集合 key 的成员。

    SISMEMBER key member
    
  3. 返回集合中的随机元素。

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

    SREM key member [member …]
    
  5. member元素从set1 集合移动到 set2集合。

    SMOVE set1 set2 member
    

    SMOVE 是原子性操作。

    如果 set1 集合不存在或不包含指定的 member 元素,则 SMOVE 命令不执行任何操作,仅返回 0 。

    set2集合已经包含 member 元素时, SMOVE 命令只是简单地将 set1集合中的 member 元素删除。

    set1set2不是集合类型时,返回一个错误。

  6. 返回集合中元素的数量。

    SCARD key
    
  7. 返回集合 key 中的所有成员。

    SMEMBERS key
    
  8. 返回给定集合的成员。

    # 返回是所有给定集合的交集。
    SINTER key [key …]
    # 类似于 SINTER key [key …],但它将结果保存到 destination 集合,而不是简单地返回。
    SINTERSTORE destination key [key …]
    # 返回是所有给定集合的并集。
    SUNION key [key …]
    # 类似于 SUNION key [key …],但它将结果保存到 destination 集合,而不是简单地返回。
    SUNIONSTORE destination key [key …]
    # 返回是所有给定集合的差集。
    SDIFF key [key …]
    # 类似于 SDIFF key [key …],但它将结果保存到 destination 集合,而不是简单地返回。
    SDIFFSTORE destination key [key …]
    
    
  9. 迭代集合中的值。

    SSCAN key cursor [MATCH pattern] [COUNT count]
    

有序集合命令

  1. 将一个或多个 member 元素及其 score 值加入到有序集 key 当中。

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

    如果某个 member 已经是有序集的成员,那么更新这个 memberscore 值,并通过重新插入这个 member 元素,来保证该 member 在正确的位置上。

    score 值可以是整数值或双精度浮点数。

    如果key 不存在,则创建一个空的有序集并执行 ZADD 操作。

    key 存在但不是有序集类型时,返回一个错误。

  2. 返回有序集 key 中,成员 member 的 score 值。

    ZSCORE key member
    
  3. 为有序集 key 的成员 member 的 score 值加上增量 increment 。

    ZINCRBY key increment member
    

    可以通过传递一个负数值 increment,让 score 减去相应的值,比如 ZINCRBY key -5 member

    key不存在,或member 不是 key 的成员时,ZINCRBY key increment member等同于 ZADD key increment member

  4. 返回有序集 key 元素的数量。

    ZCARD key
    
  5. 返回有序集 key 中,指定索引区间内的成员。

    # 其中成员的位置按 score 值递增(从小到大)来排序。
    ZRANGE key start stop [WITHSCORES]
    # 成员的位置按 score 值递减(从大到小)来排列。
    ZREVRANGE key start stop [WITHSCORES]
    

    下标参数 startstop 都以 0 为底,也就是说,以 0表示有序集第一个成员,以 1表示有序集第二个成员,以此类推。 你也可以使用负数下标,以-1 表示最后一个成员, -2 表示倒数第二个成员,以此类推。

    具有相同score 值的成员按字典序(lexicographical order )来排列。

    超出范围的下标并不会引起错误。 比如说,当 start的值比有序集的最大下标还要大,或是start > stop 时, ZRANGE 命令只是简单地返回一个空列表。 另一方面,假如 stop参数的值比有序集的最大下标还要大,那么 Redis 将 stop 当作最大下标来处理。

    可以通过使用 WITHSCORES 选项,来让成员和它的 score 值一并返回,返回列表以 value1,score1, ..., valueN,scoreN 的格式表示。 客户端库可能会返回一些更复杂的数据类型,比如数组、元组等。

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

    ZCOUNT key min max
    

    minmax 可以是 -inf+inf ,这样一来,你就可以在不知道有序集的最低和最高 score值的情况下,使用 ZRANGEBYSCORE这类命令。

    默认情况下,区间的取值使用闭区间 (小于等于或大于等于),你也可以通过给参数前增加 (符号来使用可选的开区间 (小于或大于)。

  7. 返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。

    # 其中成员的位置按 score 值递增(从小到大)来排序。
    ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
    # 其中成员的位置按 score 值递增(从大到小)来排序。
    ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]
    

    可选的 LIMIT 参数指定返回结果的数量及区间(就像SQL中的 SELECT LIMIT offset, count ),注意当 offset 很大时,定位 offset 的操作可能需要遍历整个有序集,此过程最坏复杂度为 O(N) 时间。

  8. 返回有序集 key 中成员 member 的排名。

    # 按 score 值递增(从小到大)顺序排列。
    ZRANK key member
    # 按 score 值递增(从大到小)顺序排列。
    ZREVRANK key member
    

    排名以0为底,也就是说,score值最小的成员排名为0

  9. 移除有序集 key 中的一个或多个成员,不存在的成员将被忽略。

    # 移除指定的 member
    ZREM key member [member …]
    # 移除指定排名(rank)介于start和stop区间内的所有成员。
    ZREMRANGEBYRANK key start stop
    # 移除score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。
    ZREMRANGEBYSCORE key min max
    
  10. 当有序集合的所有成员都具有相同的分值时, 有序集合的元素会根据成员的字典序(lexicographical ordering)来进行排序, 而这个命令则可以返回给定的有序集合键 key 中, 值介于 min 和 max 之间的成员。

    ZRANGEBYLEX key min max [LIMIT offset count]
    

    合法的 min 和 max 参数必须包含 ( 或者 [ , 其中 ( 表示开区间(指定的值不会被包含在范围之内), 而 [ 则表示闭区间(指定的值会被包含在范围之内)。

    特殊值+-min参数以及 max 参数中具有特殊的意义, 其中+表示正无限, 而 -表示负无限。 因此, 向一个所有成员的分值都相同的有序集合发送命令 ZRANGEBYLEX <zset> - + , 命令将返回有序集合中的所有元素。
    示类代码:

    redis> ZADD myzset 0 a 0 b 0 c 0 d 0 e 0 f 0 g
    (integer) 7
    
    redis> ZRANGEBYLEX myzset - [c
    1) "a"
    2) "b"
    3) "c"
    
    redis> ZRANGEBYLEX myzset - (c
    1) "a"
    2) "b"
    
    redis> ZRANGEBYLEX myzset [aaa (g
    1) "b"
    2) "c"
    3) "d"
    4) "e"
    5) "f"
    
  11. 对于一个所有成员的分值都相同的有序集合键 key 来说, 这个命令会返回该集合中, 成员介于 min 和 max 范围内的元素数量。

    ZLEXCOUNT key min max
    
  12. 对于一个所有成员的分值都相同的有序集合键 key 来说, 这个命令会移除该集合中, 成员介于 min 和 max 范围内的所有元素。

    ZREMRANGEBYLEX key min max
    
  13. 计算给定的一个或多个有序集的结果集,并将该结果集储存到 destination 。

    # 计算给定的一个或多个有序集的并集,并将该并集(结果集)储存到 destination 。
    ZUNIONSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGGREGATE SUM|MIN|MAX]
    # 计算给定的一个或多个有序集的交集,并将该交集(结果集)储存到 destination 。
    ZINTERSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGGREGATE SUM|MIN|MAX]
    

    其中给定 key 的数量必须以 numkeys 参数指定。

    使用 WEIGHTS 选项,你可以为 每个 给定有序集 分别 指定一个乘法因子(multiplication factor),每个给定有序集的所有成员的 score 值在传递给聚合函数(aggregation function)之前都要先乘以该有序集的因子。如果没有指定 WEIGHTS 选项,乘法因子默认设置为 1 。

    使用 AGGREGATE 选项,你可以指定并集的结果集的聚合方式。默认使用的参数 SUM ,可以将所有集合中某个成员的score值之 和 作为结果集中该成员的 score值;使用参数 MIN ,可以将所有集合中某个成员的 最小 score 值作为结果集中该成员的 score 值;而参数MAX则是将所有集合中某个成员的 最大score 值作为结果集中该成员的score 值。

  14. 迭代有序集合中的元素(包括元素成员和元素分值)

    ZSCAN key cursor [MATCH pattern] [COUNT count]
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值