五大基本类型

Key(键)

常用命令:

keys * 查看当前库中所有的 keys
exists key的名字,判断某个 key 是否存在。返回 1 表示存在,0 表示不存在。
move key(那个 Key) db(哪儿个库,如 下标为 1 的二号库),当前库就没有了,被移到其它库了。
expire key 秒钟:为给定的 key 设置过期时间。
ttl key 查看还有多少秒过期,-1 表示永不过期,-2 表示已过期。(Time To Leave)
使用该命令,key 过期后,内存中 key 将会被移除,keys * 、get key 都不能查找到这个过期的 key 。默认创建的 key 是永不过期的。

type key 查看你的 key 是什么类型。如 type mylist 。就返回 List 。type strKey。 就返回 string。类似于 JavaScript 的 type 关键字用法。

DEL key:该命令用于在 key 存在时,删除 Key。
DUMP key:序列化给定 key,并返回被序列化的值。
EXPIREAT key timestamp:EXPIREAT 的作用和 EXPIRE类似,都用于为 key 设置过期时间。不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)。
PEXPIRE key millseconds:设置 key 的过期时间以毫秒记时。
RANDOMKEY:从当前数据库中随机返回一个 key 。
RANAME key newkey:修改 key 的名称。
RENAMENX key newkey:仅当 newkey 不存在时,将 key 改名为 newkey。

Redis字符串【String】

单值单 vlaue

常用:

SET key value:设置指定 key 的值。
GET key:获取指定 key 的值。
DEL key:删除指定 key 的值。
GETRANGE key start end:返回 key 中字符串值的子字符。
GETSET key value:将给定 key 的值设为 value,并返回 key 的旧值(old value)。
GETBIT key offset:对 key 所存储的字符串值,获取指定偏移量上的位(bit)。
MGET key1[key2...]:获取多有(一个或多个)给定 key 的值。
SETBIT key offset value:对 key 所存储的字符串值,设置或清除指定偏移量上的位(bit)。
SETEX key seconds value(set with expire):将值 value 关联到 key,并将 key 的过期时间设置为 seconds(以秒为单位)。

将值 value 关联到 key ,并将 key 的生存时间设为 seconds (以秒为单位)。

如果 key 已经存在, SETEX 命令将覆写旧值。同理反过来也一样 set 也能覆盖 setex。

这个命令类似于以下两个命令:

SET key value
EXPIRE key seconds  # 设置生存时间
不同之处是, SETEX 是一个原子性(atomic)操作,关联值和设置生存时间两个动作会在同一时间内完成,该命令在 Redis 用作缓存时,非常实用。
SETNX key value(set if not exist):只有在 key 不存在时设置 key 的值。
SETRANGE key offset value:用 value 参数 覆写 给定 key 所存储的字符串值,从偏移量 offset 开始。
STRLEN key:返回 key 所存储的字符串值的长度。
MSET key value[key value...](more set):同时设置一个或多个 key-value对。
MSETNX key value[key value...]同时设置一个或多个 key-value 对,当且仅当所给定的 key 都 不存在。如果其中一个存在,那么该条语句执行失败,返回 0 。这一点很重要,区别下面 SET 的 SADD。【SADD set01 1 1 2 2 3 3】这是会执行成功的,成功插入到set01 里面有 三个值,分别是 1 2 3。

PSETEX key milliseconds value:这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不像 SETEX命令那样,以秒为单位。
INCR key:将 key 中存储的数字值增一。返回增加后的值。
INCRBY key increment:将 key 所存储的值加上给定的增量值(increment)。返回增加后的值。
INCRBYFLOAT key increment:将 key 所存储的值加上给定的浮点增量值(increment)。
DECR key:将 key 中存储的数字值减一。返回减去后的值。
DECRBY key decrement:key 所存储的值减去给定的减量值(decrement)。返回减去后的值。

如果加或减的值不是数字,那么就报错!!!

APPEND key value:如果 key 已经存在并且是一个字符串,APPEND 命令将 value 追加到 key 原来值的末尾。并返回字符串最终长度。如果 key 不存在就创建一个。

这里值得一提的是,Redis 如果执行成功一般返回 1 、大于 1 的数,执行失败 返回 0 、nil 、报错等。

Redis 列表(List)

单值多 value

BLPOP key1[key2] timeout:移出并获取列表的第一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
BRPOP key1[key2] timeout:移出并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
RPOPLPUSH source destination:移除列表的最后一个元素,并将该元素添加到另外一个列表头部并返回。
BRPOPLPUSH source destination timeout:从列表中弹出一个值,将弹出的元素插入到另外一个元素头部中并返回它;如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。该方法是 RPOPLPUSH 的阻塞版本。
LINDEX key index:通过索引获取列表中的元素。
LINSERT key BEFORE | AFTER pivot value:

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

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

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

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

LLEN key:获取列表长度。
LPOP key:移出并获取列表的第一个元素。
RPOP key:移除并获取列表最后一个元素。
RPUSH key value1[value2]:在列表尾部中添加一个或多个值。
RPUSHX key value:

将一个或多个值 value 插入到列表 key 的表尾,当且仅当 key 存在并且是一个列表。

和 RPUSH 命令相反,当 key 不存在时, RPUSHX 命令什么也不做。

LPUSH key value1[value2]:将一个或多个值插入到列表头部。
LPUSHX key value:将一个或多个值插入到已存在的列表头部。
LRANGE key start stop:

获取列表指定范围内的元素。
返回列表 key 中指定区间内的元素,区间以偏移量 start 和 stop 指定。

下标(index)参数 start 和 stop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。

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

LREM key count value:

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

count 的值可以是以下几种:

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

LSET key index value:通过索引设置列表元素的值。
LTRIM key start stop:对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。

List 性能总结:

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

Redis 集合(Set)

SADD key member1[member2]:向集合添加一个或多个成员。
SCARD key:获取集合的成员数。
SMEMBERS key:返回集合中的所有成员。
SDIFF key1[key2...]:返回给定所有集合的差集。在第一个 set 里面而不在后面任何一个 set 里面的所有项。
SDIFFSTORE destination key1[key2]:返回给定所有集合的差集并存储在 destination 中。
SINTER key1[key2]:返回给定所有集合的交集。
SINTERSTORE destination key1[key2]:返回给定所有集合的交集并存储在 destination 中。
SISMEMBER key member:判断 member 元素是否是集合 key 的成员。
SMOVE source destination member:将 member 元素从 source 集合移动到 destination 集合。
SPOP key:移除并返回集合中的一个随机元素。
SRANDMEMBER key [count]:返回集合中一个或多个随机数。
SREM key member1[member2]:移除集合中一个或多个成员。
SUNION key1[key2]:返回所有给定集合的并集。自动去重。
SUNIONSTORE destination key1[key2]:所有给定集合的并集存储在 destination 集合中。
SSCAN key cursor[MATCH pattern][COUNT count]:迭代集合中的元素。

具体 SSCAN 用法看官网文档:http://redisdoc.com/key/scan.html

Redis 哈希(Hash)

HDEL key field1[field2...]:删除哈希表 key 中的一个或多个指定Hash字段,不存在的字段将被忽略。
HEXISTS key field:查看哈希表 key 中,指定的字段是否存在。
HGET key field:获取存储在哈希表中指定字段的值。
HGETALL key:获取在哈希表中指定 key 的所有字段和值。
HINCRBY key field increment:为哈希表 key 中的指定字段的整数值加上增量 increment。
HINCRBYFLOAT key field increment:为哈希表 key 中的指定字段的浮点数值加上增量 increment。
HKEYS key:获取所有哈希表中的字段。
HLEN key:获取哈希表中字段的数量。
HMGET key field1[field2...]:获取所有给定字段的值。
HMSET key field1 value1 [field2 value2...]:同时将多个 field-value (域-值)对设置到哈希表 key 中。
HSET key field value:将哈希表 key 中的字段 field 的值设为 value。
HSETNX key field vlaue:只有在字段 field 不存在时,设置哈希表字段的值。
HVALS key:获取哈希表中的所有值。
HSCAN key cursor [MATCH pattern] [COUNT count]:迭代哈希表中的键值对。
HSTRLEN key field:

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

如果给定的键或者域不存在, 那么命令返回 0 。

Redis 有序集合【Zset (sorted set)】

在 set 基础上,加一个 score 值。
之前 set 是 k1 v1 v2 v3,
现在 Zset 是 k1 score1 v1 score2 v2

ZADD key score1 member1 [score2 member2...]:向有序集合添加一个或多个成员,或者更新已存在的成员分数。
ZCARD key:获取有序集合的成员数。
ZCOUNT key min max:计算在有序集合中指定区间分数的成员数。
ZINCRBY key increment member:有序集合中对指定成员的分数加上增量 increment。
ZINTERSTORE destination numkeys key[key...]:
计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)储存到 destination 。

默认情况下,结果集中某个成员的 score 值是所有给定集下该成员 score 值之和.

详细用法请看 redisdoc.com的说明。
ZLEXCOUNT key min max:
对于一个所有成员的分值都相同的有序集合键 key 来说, 这个命令会返回该集合中, 成员介于 min 和 max 范围内的元素数量。

这个命令的 min 参数和 max 参数的意义和 ZRANGEBYLEX 命令的 min 参数和 max 参数的意义一样。
ZRANGE key start stop [WITHSCORES]:

通过 索引 区间返回有序集合指定区间内的成员。
返回有序集 key 中,指定区间内的成员。

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

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

如果你需要成员按 score 值递减(从大到小)来排列,请使用 ZREVRANGE 命令。

下标参数 start 和 stop 都以 0 为底,也就是说,以 0 表示有序集第一个成员,以 1 表示有序集第二个成员,以此类推。
你也可以使用负数下标,以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推。
超出范围的下标并不会引起错误。
比如说,当 start 的值比有序集的最大下标还要大,或是 start > stop 时, ZRANGE 命令只是简单地返回一个空列表。
另一方面,假如 stop 参数的值比有序集的最大下标还要大,那么 Redis 将 stop 当作最大下标来处理。
可以通过使用 WITHSCORES 选项,来让成员和它的 score 值一并返回,返回列表以 value1,score1, ..., valueN,scoreN 的格式表示。
客户端库可能会返回一些更复杂的数据类型,比如数组、元组等。

ZRANGEBYLEX key min max [LIMIT offset count]:

当有序集合的所有成员都具有相同的分值时, 有序集合的元素会根据成员的字典序(lexicographical ordering)来进行排序, 而这个命令则可以返回给定的有序集合键 key 中, 值介于 min 和 max 之间的成员。

如果有序集合里面的成员带有不同的分值, 那么命令返回的结果是未指定的(unspecified)。

命令会使用 C 语言的 memcmp() 函数, 对集合中的每个成员进行逐个字节的对比(byte-by-byte compare), 并按照从低到高的顺序, 返回排序后的集合成员。 如果两个字符串有一部分内容是相同的话, 那么命令会认为较长的字符串比较短的字符串要大。

可选的 LIMIT offset count 参数用于获取指定范围内的匹配元素 (就像 SQL 中的 SELECT LIMIT offset count 语句)。 需要注意的一点是, 如果 offset 参数的值非常大的话, 那么命令在返回结果之前, 需要先遍历至 offset 所指定的位置, 这个操作会为命令加上最多 O(N) 复杂度。

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

特殊值 + 和 - 在 min 参数以及 max 参数中具有特殊的意义, 其中 + 表示正无限, 而 - 表示负无限。 因此, 向一个所有成员的分值都相同的有序集合发送命令 ZRANGEBYLEX <zset> - + , 命令将返回有序集合中的所有元素。
ZRANGEBYSOCRE key min max [WITHSCORES][LIMIT]:通过分数返回有序集合指定区间的成员。
ZRANK key member:返回有序集合中指定成员的索引。
ZREM key member[member...]:移除有序集合中的一个或多个成员。
ZREMRANGEBYLEX key min max:移除有序集合中给定的字典区间的所有成员。
ZREMRANGEBYRANK key start stop:移除有序集合中给定的排名区间的所有成员。
ZREMRANGEBYSCORE key min max:移除有序集合中给定的分数区间的所有成员。
ZREVRANGE key start stop [WITHSCORES]:返回有序集合中指定区间内的成员,通过索引,分数从高到低。
ZREVRANGEBYSCORE key max min[WITHSCORES]:返回有序集合中指定分数区间内的成员,分数从高到低排序。
ZREVRANK key member:返回有序集合中指定成员的排名,有序集合成员按分数值递减(从大到小)排序。
ZSCORE key member:返回有序集合中,成员的分数值。
ZUNIONSTORE destination numkeys key[key...]:计算给定的一个或多个有序集的并集,并存储在新的 key 中。
ZSCAN key cursor [MATCH pattern][COUNT count]:迭代有序集合中的元素(包括元素成员和元素分值)。

看了上面你要知道下面几个是什么意思:

zadd/zrange
zrangebyscore key 开始score 结束score [WITHSCORES][LIMIT]
同时【开始score】和【结束socre】有一个包含于非包含的用法。
ZRANGEBYSCORE xxxZset 3 (6:这就是返回 >=3 && <6 的子集。
具体用法请见官网。
zrem key 某 score 下对应的 value 值,作用是删除元素。
zcard/zcount key score区间/zrank key values值,作用是获取下标值/zscore key 对应值value,获取分数。
zrevrank key values值,作用是逆序获取下标值。
zrevrange:逆序获取全部。
zrevrangebyscore key maxScore minScore