redis五大数据类型以及常用操作命令
Redis的五大数据类型
- String(字符串)
string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M
- Hash(哈希,类似java里的Map)
Redis hash 是一个键值对集合。KV模式不变,但V是一个键值对。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常见数据类型操作命令: http://redisdoc.com/
Key(键)常用命令
命令 | 用法 | 描述 | 示例 |
DEL | DEL key [key ...] | 删除给定的一个或多个 key。 不存在的 key 会被忽略 | |
DUMP | DUMP key | 序列化给定 key ,并返回被序列化的值,使用 RESTORE 命令可以将这个值反序列化为 Redis 键 | |
EXISTS | EXISTS key | 检查给定 key 是否存在 | |
EXPIRE | EXPIRE key seconds | 为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除 | |
PERSIST | PERSIST key | 移除 key 的过期时间,key 将持久保持。 | |
EXPIREAT | EXPIREAT key timestamp | EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置生存时间。 不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp) | EXPIREAT cache 1355292000 # 这个 key 将在 2012.12.12 过期 |
KEYS | KEYS pattern | 查找所有符合给定模式 pattern 的 key | KEYS * # 匹配数据库内所有 key |
MOVE | MOVE key db | 将当前数据库的 key 移动到给定的数据库 db 当中 如果当前数据库(源数据库)和给定数据库(目标数据库)有相同名字的给定 key ,或者 key 不存在于当前数据库,那么 MOVE 没有任何效果。 因此,也可以利用这一特性,将 MOVE 当作锁(locking)原语(primitive) |
MOVE song 1 # 将 song 移动到数据库 1 |
TTL | TTL key | 以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live) 当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,以秒为单位,返回 key 的剩余生存时间 |
|
PTTL | PTTL key | 以毫秒为单位返回 key 的剩余的过期时间。 | |
TYPE | TYPE key | 返回 key 所储存的值的类型 | |
RENAME | RENAME key newkey | 将 key 改名为 newkey 。 当 key 和 newkey 相同,或者 key 不存在时,返回一个错误。 当 newkey 已经存在时, RENAME 命令将覆盖旧值 |
String (字符串)常用命令
命令 | 用法 | 描述 | 示例 |
SET | SET key value [EX seconds] [PX milliseconds] [NX|XX] | 将字符串值 value 关联到 key 。 如果 key 已经持有其他值, SET 就覆写旧值,无视类型 |
SET key "value" |
MSET | MSET key value [key value ...] | 同时设置一个或多个 key-value 对。 如果某个给定 key 已经存在,那么 MSET 会用新值覆盖原来的旧值,如果这不是你所希望的效果,请考虑使用 MSETNX 命令:它只会在所有给定 key 都不存在的情况下进行设置操作 |
MSET date "2012.3.30" time "11:00 a.m." weather "sunny" |
SETNX | SETNX key value | 将 key 的值设为 value ,当且仅当 key 不存在。 若给定的 key 已经存在,则 SETNX 不做任何动作 SETNX 是『SET if Not eXists』(如果不存在,则 SET)的简写 |
|
MSETNX | MSETNX key value [key value ...] | 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。 即使只有一个给定 key 已存在, MSETNX 也会拒绝执行所有给定 key 的设置操作 |
|
SETRANGE | SETRANGE key offset value | 用 value 参数覆写(overwrite)给定 key 所储存的字符串值,从偏移量 offset 开始。 不存在的 key 当作空白字符串处理 |
|
SETBIT | SETBIT key offset value | 对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit) | GETBIT bit 100 # bit 默认被初始化为 0 |
SETEX | SETEX key seconds value | 将值 value 关联到 key ,并将 key 的生存时间设为 seconds (以秒为单位)。 如果 key 已经存在, SETEX 命令将覆写旧值。 |
|
PSETEX | PSETEX key milliseconds value | 这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位 | |
STRLEN | STRLEN key | 返回 key 所储存的字符串值的长度。 当 key 储存的不是字符串值时,返回一个错误 |
|
GET | GET key | 返回 key 所关联的字符串值。 如果 key 不存在那么返回特殊值 nil |
|
MGET | MGET key [key ...] | 返回所有(一个或多个)给定 key 的值。 如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 。因此,该命令永不失败 |
|
GETRANGE | GETRANGE key start end | 返回 key 中字符串值的子字符串,字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)。 负数偏移量表示从字符串最后开始计数, -1 表示最后一个字符, -2 表示倒数第二个,以此类推。 |
GETRANGE greeting 0 4 |
GETSET | GETSET key value | 将给定 key 的值设为 value ,并返回 key 的旧值(old value)。 当 key 存在但不是字符串类型时,返回一个错误。 |
|
GETBIT | GETBIT key offset | 对 key 所储存的字符串值,获取指定偏移量上的位(bit)。 当 offset 比字符串值的长度大,或者 key 不存在时,返回 0 |
|
APPEND | APPEND key value | 如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。 如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value 一样 |
|
DECR | DECR key | 将 key 中储存的数字值减一。 如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECR 操作 |
redis> SET failure_times 10 OK redis> DECR failure_times (integer) 9 |
DECRBY | DECRBY key decrement | 将 key 所储存的值减去减量 decrement | |
INCR | INCR key | 将 key 中储存的数字值增一。 如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作 |
|
INCRBY | INCRBY key increment | 将 key 所储存的值加上增量 increment | |
INCRBYFLOAT | INCRBYFLOAT key increment | 为 key 中所储存的值加上浮点数增量 increment | INCRBYFLOAT mykey 0.1 |
BITCOUNT | BITCOUNT key [start] [end] | 计算给定字符串中,被设置为 1 的比特位的数量 | |
BITOP | BITOP operation destkey key [key ...] | 对一个或多个保存二进制位的字符串 key 进行位元操作,并将结果保存到 destkey 上。 |
List(列表)常用命令
命令 | 用法 | 描述 | 示例 |
LPUSH | LPUSH key value [value ...] | 将一个或多个值 value 插入到列表 key 的表头 如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表头 |
正着进反着出 |
LPUSHX | LPUSHX key value | 将值 value 插入到列表 key 的表头,当且仅当 key 存在并且是一个列表。 和 LPUSH 命令相反,当 key 不存在时, LPUSHX 命令什么也不做 |
|
RPUSH | RPUSH key value [value ...] | 将一个或多个值 value 插入到列表 key 的表尾(最右边) | 怎么进怎么出 |
RPUSHX | RPUSHX key value | 将值 value 插入到列表 key 的表尾,当且仅当 key 存在并且是一个列表。 和 RPUSH 命令相反,当 key 不存在时, RPUSHX 命令什么也不做。 |
|
LPOP | LPOP key | 移除并返回列表 key 的头元素。 | |
BLPOP | BLPOP key [key ...] timeout | 移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止 | |
RPOP | RPOP key | 移除并返回列表 key 的尾元素。 | |
BRPOP | BRPOP key [key ...] timeout | 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 | |
BRPOPLPUSH | BRPOPLPUSH source destination timeout | 从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 | |
RPOPLPUSH | RPOPLPUSH source destination | 命令 RPOPLPUSH 在一个原子时间内,执行以下两个动作:将列表 source 中的最后一个元素(尾元素)弹出,并返回给客户端。 将 source 弹出的元素插入到列表 destination ,作为 destination 列表的的头元素 |
RPOPLPUSH list01 list02 |
LSET | LSET key index value | 将列表 key 下标为 index 的元素的值设置为 value | |
LLEN | LLEN key | 返回列表 key 的长度。 如果 key 不存在,则 key 被解释为一个空列表,返回 0 . 如果 key 不是列表类型,返回一个错误 |
|
LINDEX | LINDEX key index | 返回列表 key 中,下标为 index 的元素。 下标(index)参数 start 和 stop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。 |
|
LRANGE | LRANGE key start stop | 返回列表 key 中指定区间内的元素,区间以偏移量 start 和 stop 指定 | |
LREM | LREM key count value | 根据参数 count 的值,移除列表中与参数 value 相等的元素 | |
LTRIM | LTRIM key start stop | 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除 | |
LINSERT | LINSERT key BEFORE|AFTER pivot value | 将值 value 插入到列表 key 当中,位于值 pivot 之前或之后。 当 pivot 不存在于列表 key 时,不执行任何操作。 当 key 不存在时, key 被视为空列表,不执行任何操作。 如果 key 不是列表类型,返回一个错误。 |
LINSERT list01 before c++ c#(在c++之前加上C#) |
Hash(哈希表)常用命令
命令 | 用法 | 描述 | 示例 |
HSET | HSET key field value | 将哈希表 key 中的域 field 的值设为 value 。 如果 key 不存在,一个新的哈希表被创建并进行 HSET 操作。 如果域 field 已经存在于哈希表中,旧值将被覆盖。 |
|
HMSET | HMSET key field value [field value ...] | 同时将多个 field-value (域-值)对设置到哈希表 key 中。 此命令会覆盖哈希表中已存在的域。 |
|
HSETNX | HSETNX key field value | 将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在。 若域 field 已经存在,该操作无效 |
|
HGET | HGET key field | 返回哈希表 key 中给定域 field 的值 | |
HMGET | HMGET key field [field ...] | 返回哈希表 key 中,一个或多个给定域的值。 | |
HGETALL | HGETALL key | 返回哈希表 key 中,所有的域和值。 在返回值里,紧跟每个域名(field name)之后是域的值(value),所以返回值的长度是哈希表大小的两倍 |
|
HDEL | HDEL key field [field ...] | 删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略 | |
HEXISTS | HEXISTS key field | 查看哈希表 key 中,给定域 field 是否存在 | |
HLEN | HLEN key | 返回哈希表 key 中域的数量 | |
HKEYS | HKEYS key | 返回哈希表 key 中的所有域 | |
HVALS | HVALS key | 返回哈希表 key 中所有域的值 | |
HSTRLEN | HSTRLEN key field | 返回哈希表 key 中, 与给定域 field 相关联的值的字符串长度(string length)。 如果给定的键或者域不存在, 那么命令返回 0 |
|
HINCRBY | HINCRBY key field increment | 为哈希表 key 中的域 field 的值加上增量 increment | |
HINCRBYFLOAT | HINCRBYFLOAT key field increment | 为哈希表 key 中的域 field 加上浮点数增量 increment | |
HSCAN | HSCAN key cursor [MATCH pattern] [COUNT count] | 迭代哈希表中的键值对。 |
Set(集合)常用命令
命令 | 用法 | 描述 | 示例 |
SADD | SADD key member [member ...] | 将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。 假如 key 不存在,则创建一个只包含 member 元素作成员的集合。 当 key 不是集合类型时,返回一个错误 |
|
SCARD | SCARD key | 返回集合 key 的基数(集合中元素的数量)。 | |
SDIFF | SDIFF key [key ...] | 返回一个集合的全部成员,该集合是所有给定集合之间的差集。 不存在的 key 被视为空集。 |
差集 |
SDIFFSTORE | SDIFFSTORE destination key [key ...] | 这个命令的作用和 SDIFF 类似,但它将结果保存到 destination 集合,而不是简单地返回结果集。 如果 destination 集合已经存在,则将其覆盖。 destination 可以是 key 本身。 |
|
SINTER | SINTER key [key ...] | 返回一个集合的全部成员,该集合是所有给定集合的交集。 不存在的 key 被视为空集。 当给定集合当中有一个空集时,结果也为空集(根据集合运算定律) |
交集 |
SINTERSTORE | SINTERSTORE destination key [key ...] | 这个命令类似于 SINTER 命令,但它将结果保存到 destination 集合,而不是简单地返回结果集。 如果 destination 集合已经存在,则将其覆盖。 destination 可以是 key 本身 |
|
SUNION | SUNION key [key ...] | 返回一个集合的全部成员,该集合是所有给定集合的并集。 不存在的 key 被视为空集 |
并集 |
SUNIONSTORE | SUNIONSTORE destination key [key ...] | 这个命令类似于 SUNION 命令,但它将结果保存到 destination 集合,而不是简单地返回结果集。 如果 destination 已经存在,则将其覆盖。 destination 可以是 key 本身 |
|
SMEMBERS | SMEMBERS key | 返回集合 key 中的所有成员。 不存在的 key 被视为空集合 |
|
SRANDMEMBER | SRANDMEMBER key [count] | 如果命令执行时,只提供了 key 参数,那么返回集合中的一个随机元素 | |
SISMEMBER | SISMEMBER key member | 判断 member 元素是否集合 key 的成员 | |
SMOVE | SMOVE source destination member | 将 member 元素从 source 集合移动到 destination 集合。 | |
SPOP | SPOP key | 移除并返回集合中的一个随机元素。 如果只想获取一个随机元素,但不想该元素从集合中被移除的话,可以使用 SRANDMEMBER 命令。 |
|
SREM | SREM key member [member ...] | 移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略。 当 key 不是集合类型,返回一个错误 |
|
SSCAN | SSCAN key cursor [MATCH pattern] [COUNT count] | 迭代集合中的元素 |
SortedSet(有序集合)常用命令
命令 | 用法 | 描述 | 示例 |
ZADD | ZADD key score1 member1 [score2 member2] | 向有序集合添加一个或多个成员,或者更新已存在成员的分数 | |
ZCARD | ZCARD key | 返回有序集 key 的基数。 | |
ZCOUNT | ZCOUNT key min max | 返回有序集 key 中, score 值在 min 和 max 之间(默认包括 score 值等于 min 或 max )的成员的数量。 关于参数 min 和 max 的详细使用方法,请参考 ZRANGEBYSCORE 命令。 |
|
ZRANGE | ZRANGE key start stop [WITHSCORES] | 返回有序集 key 中,指定区间内的成员。 其中成员的位置按 score 值递增(从小到大)来排序 |
|
ZREVRANGE | ZREVRANGE key start stop [WITHSCORES] | 返回有序集 key 中,指定区间内的成员。其中成员的位置按 score 值递减(从大到小)来排列。 具有相同 score 值的成员按字典序的逆序(reverse lexicographical order)排列。除了成员按 score 值递减的次序排列这一点外, ZREVRANGE 命令的其他方面和 ZRANGE 命令一样。 |
|
ZREVRANGEBYSCORE | ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count] | 返回有序集 key 中, score 值介于 max 和 min 之间(默认包括等于 max 或 min )的所有的成员。有序集成员按 score 值递减(从大到小)的次序排列。 | |
ZREVRANK | ZREVRANK key member | 返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递减(从大到小)排序。 排名以 0 为底,也就是说, score 值最大的成员排名为 0 。 使用 ZRANK 命令可以获得成员按 score 值递增(从小到大)排列的排名。 |
|
ZSCORE | ZSCORE key member | 返回有序集 key 中,成员 member 的 score 值。 如果 member 元素不是有序集 key 的成员,或 key 不存在,返回 nil 。 |
|
ZRANGEBYSCORE | ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] | 返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score 值递增(从小到大)次序排列。 | |
ZRANK | ZRANK key member | 返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递增(从小到大)顺序排列。 | |
ZINCRBY | ZINCRBY key increment member | 为有序集 key 的成员 member 的 score 值加上增量 increment | |
ZREM | ZREM key member [member ...] | 移除有序集 key 中的一个或多个成员,不存在的成员将被忽略。 当 key 存在但不是有序集类型时,返回一个错误。 |
|
ZREMRANGEBYRANK | ZREMRANGEBYRANK key start stop | 移除有序集 key 中,指定排名(rank)区间内的所有成员 | |
ZREMRANGEBYSCORE | ZREMRANGEBYSCORE key min max | 移除有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。 | |
ZUNIONSTORE | ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX] | 计算给定的一个或多个有序集的并集,其中给定 key 的数量必须以 numkeys 参数指定,并将该并集(结果集)储存到 destination 。 默认情况下,结果集中某个成员的 score 值是所有给定集下该成员 score 值之 和 。 |
|
ZINTERSTORE | ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX] | 计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)储存到 destination 。 默认情况下,结果集中某个成员的 score 值是所有给定集下该成员 score 值之和. |
|
ZSCAN | ZSCAN key cursor [MATCH pattern] [COUNT count] | 迭代有序集合中的元素(包括元素成员和元素分值) | |
ZRANGEBYLEX | ZRANGEBYLEX key min max [LIMIT offset count] | 当有序集合的所有成员都具有相同的分值时, 有序集合的元素会根据成员的字典序(lexicographical ordering)来进行排序, 而这个命令则可以返回给定的有序集合键 key 中, 值介于 min 和 max 之间的成员。 |
|
ZLEXCOUNT | ZLEXCOUNT key min max | 对于一个所有成员的分值都相同的有序集合键 key 来说, 这个命令会返回该集合中, 成员介于 min 和 max 范围内的元素数量。 这个命令的 min 参数和 max 参数的意义和 ZRANGEBYLEX 命令的 min 参数和 max 参数的意义一样 |
|
ZREMRANGEBYLEX | ZREMRANGEBYLEX key min max | 对于一个所有成员的分值都相同的有序集合键 key 来说, 这个命令会移除该集合中, 成员介于 min 和 max 范围内的所有元素。 这个命令的 min 参数和 max 参数的意义和 ZRANGEBYLEX 命令的 min 参数和 max 参数的意义一样 |
|