Redis 学习笔记
数据库
Radis 的数据类型
* 检测键的数据类型
TYPE key_name
功能:Redis Type 命令用于返回 key 所储存的值的类型。
返回值:
- none (key不存在)
- string (字符串)
- list (列表)
- set (集合)
- zset (有序集)
- hash (哈希表)
1. 类型-字符串(string)
SET zhangsan "this is zhangsan"
2. 类型-哈希(hash)
Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。
Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。
HMSET zhangsan name "zhangsan" age 20 address '南宁市 西乡塘' sex 1
3. 类型-列表(list)
Redis列表是简单的字符串列表,
按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)
一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。
LPUSH runoobkey redis
4. 类型-集合(set)
Redis的Set是string类型的无序集合。
集合成员是唯一的,这就意味着集合中不能出现重复的数据。
Redis 中 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
SADD runoobkey redis
5. 类型-有序集合
Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
ZADD runoobkey 1 redis
命令-字符串(string)
1. SET key value
功能:设置指定 key 的值
2. GET key
功能:获取指定 key 的值。
- 如果 key 不存在,返回 nil 。
- 如果key 储存的值不是字符串类型,返回一个错误。
3. GETRANGE key start end
功能:返回 key 中字符串值的子字符
- 字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)。
- 返回值: 截取得到的子字符串。
4. GETSET key value
功能:将给定 key 的值设为 value ,并返回 key 的旧值(old value)。
- 返回给定 key 的旧值。
- 当 key 没有旧值时,即 key 不存在时,返回 nil 。
- 当 key 存在但不是字符串类型时,返回一个错误。
5. GETBIT key offset
功能:对 key 所储存的字符串值,获取指定偏移量上的位(bit)。
- 返回字符串值指定偏移量上的位(bit)。
- 当偏移量 OFFSET 比字符串值的长度大,或者 key 不存在时,返回 0 。
6. MGET key1 [key2..]
功能:获取所有(一个或多个)给定 key 的值。
- 返回值:一个包含所有给定 key 的值的列表。
- 如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 。
7. SETBIT key offset value
功能:对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。
8. SETEX key seconds value
功能:将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。
- 如果 key 已经存在, SETEX 命令将会替换旧的值。
- 设置成功时返回 OK
9. SETNX key value
功能:只有在 key 不存在时设置 key 的值。
10. SETRANGE key offset value
功能:用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。
11. STRLEN key
功能:返回 key 所储存的字符串值的长度。
- 当 key 储存的不是字符串值时,返回一个错误。
- 返回值:字符串值的长度。 当 key 不存在时,返回 0。
12. MSET key value [key value ...]
功能:同时设置一个或多个 key-value 对。
13. MSETNX key value [key value ...]
功能:同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。
- 当所有 key 都成功设置,返回 1 。 如果所有给定 key 都设置失败(至少有一个 key 已经存在),那么返回 0 。
14. PSETEX key milliseconds value
功能:这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位。
15. INCR key
功能:将 key 中储存的数字值增一。
- 如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。
- 如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
- 本操作的值限制在 64 位(bit)有符号数字表示之内。
- 返回值: 执行 INCR 命令之后 key 的值。
16. INCRBY key increment
功能:将 key 所储存的值加上给定的增量值(increment) 。
- 如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。
- 如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
- 本操作的值限制在 64 位(bit)有符号数字表示之内。
- 返回值: 执行 INCR 命令之后 key 的值。
17. INCRBYFLOAT key increment
功能:将 key 所储存的值加上给定的浮点增量值(increment) 。
- 如果 key 不存在,那么 INCRBYFLOAT 会先将 key 的值设为 0 ,再执行加法操作。
18. DECR key
功能:将 key 中储存的数字值减一。
- 如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECR 操作。
- 如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
- 本操作的值限制在 64 位(bit)有符号数字表示之内。
- 返回值: 执行 INCR 命令之后 key 的值。
19. DECRBY key decrement
功能:key 所储存的值减去给定的减量值(decrement) 。
- 如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECRBY 操作。
- 如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
- 本操作的值限制在 64 位(bit)有符号数字表示之内。
- 返回值: 执行 INCR 命令之后 key 的值。
20. APPEND key value
功能:如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。
- 如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。
- 如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value 一样。
- 返回值: 返回值追加指定值之后, key 中字符串的长度。
命令-HASH
1. HDEL key field1 [field2...]
功能:删除一个或多个hash字段, 不存在的字段将被忽略。
返回值:被成功删除字段的数量,不包括被忽略的字段。
2. HEXISTS key field
功能:查看哈希表的指定字段是否存在。
- 如果哈希表含有给定字段,返回 1 。
- 如果哈希表不含有给定字段,或 key 不存在,返回 0 。
3. HGET key field
功能:返回哈希表中指定字段的值。
- 返回给定字段的值。如果给定的字段或 key 不存在时,返回 nil
4. HGETALL key
功能:用于返回哈希表中,所有的字段和值。
- 在返回值里,紧跟每个字段名(field name)之后是字段的值(value),所以返回值的长度是哈希表大小的两倍。
- 以列表形式返回哈希表的字段及字段值。 若 key 不存在,返回空列表。
5. HINCRBY key field increment
功能:为哈希表 key 中的指定字段的整数值加上增量 increment
- 增量也可以为负数,相当于对指定字段进行减法操作。
- 如果哈希表的 key 不存在,一个新的哈希表被创建并执行 HINCRBY 命令。
- 如果指定的字段不存在,那么在执行命令前,字段的值被初始化为 0 。
- 对一个储存字符串值的字段执行 HINCRBY 命令将造成一个错误。
- 本操作的值被限制在 64 位(bit)有符号数字表示之内。
- 执行 HINCRBY 命令之后,哈希表中字段的值。
6. HINCRBYFLOAT key field increment
功能:为哈希表 key 中的指定字段的浮点数值加上增量 increment
- 如果指定的字段不存在,那么在执行命令前,字段的值被初始化为 0 。
- 返回值: 执行 Hincrbyfloat 命令之后,哈希表中字段的值。
7. HKEYS key
功能:获取hash表中的字段
- 返回值:包含哈希表中所有字段的列表。 当 key 不存在时,返回一个空列表。
8. HLEN key
功能:获取hash表中字段的数量
9. HMGET key field [field1 ...]
功能:获取所有给定字段的值
- 如果指定的字段不存在于哈希表,那么返回一个 nil 值。
- 一个包含多个给定字段关联值的表,表值的排列顺序和指定字段的请求顺序一样
10. HMSET key field1 value1 [field2 value2]
功能:Redis Hmset 命令用于同时将多个 field-value (字段-值)对设置到哈希表中。
- 此命令会覆盖哈希表中已存在的字段。
- 如果哈希表不存在,会创建一个空哈希表,并执行 HMSET 操作。
11. HSET key field value
功能:Hset 命令用于为哈希表中的字段赋值 。
- 如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。
- 如果字段已经存在于哈希表中,旧值将被覆盖。
12. HSETNX key field value
功能:只有在字段 field 不存在时,设置哈希表字段的值。
- 如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。
- 如果字段已经存在于哈希表中,操作无效。
- 如果 key 不存在,一个新哈希表被创建并执行 HSETNX 命令。
13. HVALS key
功能:获取哈希表中所有值
列表 list
LPUSH key value
1 BLPOP key1 [key2 ] timeout
功能:移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
2 BRPOP key1 [key2 ] timeout
功能:移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
3 BRPOPLPUSH source destination timeout
功能:从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
4 LINDEX key index
功能:通过索引获取列表中的元素
- 你也可以使用负数下标,
- -1 表示列表的最后一个元素,
- -2 表示列表的倒数第二个元素,以此类推。
5 LINSERT key BEFORE|AFTER pivot value
功能:在列表的元素前或者后插入元素
- 当指定元素不存在于列表中时,不执行任何操作。
- 当列表不存在时,被视为空列表,不执行任何操作。
- 如果 key 不是列表类型,返回一个错误。
6 LLEN key
功能:获取列表长度
- 如果列表 key 不存在,则 key 被解释为一个空列表,返回 0 。
- 如果 key 不是列表类型,返回一个错误。
7 LPOP key
功能:移出并获取列表的第一个元素
- 返回值:列表的第一个元素。 当列表 key 不存在时,返回 nil 。
8 LPUSH key value1 [value2]
功能:将一个或多个值插入到列表头部
- 如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。
- 当 key 存在但不是列表类型时,返回一个错误。
9 LPUSHX key value
功能:将一个或多个值插入到已存在的列表头部, 列表不存在时操作无效。
- 返回值: LPUSHX 命令执行之后,列表的长度。
10 LRANGE key start stop
功能:获取列表指定范围内的元素, 区间以偏移量 START 和 END 指定
- 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。
- 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
11 LREM key count value
功能:根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素。
- count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。
- count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。
- count = 0 : 移除表中所有与 VALUE 相等的值。
返回值: 被移除元素的数量。 列表不存在时返回 0 。
12 LSET key index value
功能:通过索引设置列表元素的值
- 当索引参数超出范围,或对一个空列表进行 LSET 时,返回一个错误。
- 返回值: 操作成功返回 ok ,否则返回错误信息。
13 LTRIM key start stop
功能:对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
- 下标 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。
- 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
- 返回值: 命令执行成功时,返回 ok 。
14 RPOP key
功能:移除并获取列表最后一个元素
- 返回值: 列表的最后一个元素。 当列表不存在时,返回 nil 。
15 RPOPLPUSH source destination
功能:移除列表的最后一个元素,并将该元素添加到另一个列表并返回
16 RPUSH key value1 [value2]
功能:将一个或多个值插入到列表的尾部(最右边)
- 如果列表不存在,一个空列表会被创建并执行 RPUSH 操作。
- 当列表存在但不是列表类型时,返回一个错误。
- 返回值: 执行 RPUSH 操作后,列表的长度。
17 RPUSHX key value
功能:将一个或多个值插入到已存在的列表尾部(最右边)。如果列表不存在,操作无效。
- 返回值: 执行 Rpushx 操作后,列表的长度。
命令-集合
1 SADD key member1 [member2]
功能:向集合添加一个或多个成员
- 已经存在于集合的成员元素将被忽略。
- 假如集合 key 不存在,则创建一个只包含添加的元素作成员的集合。
- 当集合 key 不是集合类型时,返回一个错误。
- 返回值: 被添加到集合中的新元素的数量,不包括被忽略的元素。
2. SCARD key
功能:获取集合的成员数
- 返回值: 集合的数量。 当集合 key 不存在时,返回 0 。
3. SDIFF key1 [key2]
功能:返回给定集合之间的差集。不存在的集合 key 将视为空集。
返回值: 包含差集成员的列表。
4. SDIFFSTORE destination key1 [key2]
功能:将给定集合之间的差集存储在指定的集合中。
- 如果指定的集合 key 已存在,则会被覆盖
- 返回值: 结果集中的元素数量。
5. SINTER key1 [key2]
功能:返回给定所有集合的交集
- 不存在的集合 key 被视为空集。
- 当给定集合当中有一个空集时,结果也为空集(根据集合运算定律)。
- 返回值: 交集成员的列表。
6. SINTERSTORE destination key1 [key2]
功能:返回给定所有集合的交集并存储在 destination 中
- 如果指定的集合已经存在,则将其覆盖。
- 返回值: 交集成员的列表
7. SISMEMBER key member
功能:判断 member 元素是否是集合 key 的成员
- 如果成员元素是集合的成员,返回 1 。
- 如果成员元素不是集合的成员,或 key 不存在,返回 0 。
8. SMEMBERS key
功能:返回集合中的所有成员, 不存在的集合 key 被视为空集合。
9. SMOVE source destination member
功能:将 member 元素从 source 集合移动到 destination 集合
- SMOVE 是原子性操作。
- 如果 source 集合不存在或不包含指定的 member 元素,则 SMOVE 命令不执行任何操作,仅返回 0 。否则, member 元素从 source 集合中被移除,并添加到 destination 集合中去。
- 当 destination 集合已经包含 member 元素时, SMOVE 命令只是简单地将 source 集合中的 member 元素删除。
- 当 source 或 destination 不是集合类型时,返回一个错误。
- 如果成员元素被成功移除,返回 1 。
- 如果成员元素不是 source 集合的成员,并且没有任何操作对 destination 集合执行,那么返回 0 。
10. SPOP key
功能:移除并返回集合中的一个随机元素
- 返回值: 被移除的随机元素。 当集合不存在或是空集时,返回 nil 。
11. SRANDMEMBER key [count]
该操作和 SPOP 相似,但 SPOP 将随机元素从集合中移除并返回,而 Srandmember 则仅仅返回随机元素,而不对集合进行任何改动。
功能:返回集合中一个或多个随机数
- 如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。
- 如果 count 大于等于集合基数,那么返回整个集合。
- 如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值。
- 只提供集合 key 参数时,返回一个元素;如果集合为空,返回 nil 。
- 如果提供了 count 参数,那么返回一个数组;如果集合为空,返回空数组。
12. SREM key member1 [member2]
功能:移除集合中一个或多个成员,不存在的成员元素会被忽略。
- 当 key 不是集合类型,返回一个错误。
- 返回值: 被成功移除的元素的数量,不包括被忽略的元素。
13. SUNION key1 [key2]
功能:返回所有给定集合的并集, 不存在的集合 key 被视为空集。
14. SUNIONSTORE destination key1 [key2]
功能:所有给定集合的并集存储在 destination 集合中, 如果 destination 已经存在,则将其覆盖。
15. SSCAN key cursor [MATCH pattern] [COUNT count]
功能:迭代集合中的元素