0
点赞
收藏
分享

微信扫一扫

Redis常用操作-----字符串

1.APPEND key value

如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key

如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value

可用版本:

>= 2.0.0

时间复杂度:

平摊O(1)

返回值:

追加 value 之后, key

2.DECR key

将 key

如果 key 不存在,那么 key 的值会先被初始化为 0

如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。

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

关于递增(increment) / 递减(decrement)操作的更多信息,请参见 INCR 命令。

可用版本:

>= 1.0.0

时间复杂度:

O(1)

返回值:

执行 DECR 命令之后 key

3.DECRBY key decrement

将 key 所储存的值减去减量 decrement

如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 ​​DECRBY​​ 操作。

如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。

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

关于更多递增(increment) / 递减(decrement)操作的更多信息,请参见 ​​INCR​​ 命令。

可用版本:

>= 1.0.0

时间复杂度:

O(1)

返回值:

减去 decrement 之后, key

127.0.0.1:6379> incrby 1 gender   // 注意顺序
(error) ERR value is not an integer or out of range
127.0.0.1:6379> decrby gender 10
(integer) -14
127.0.0.1:6379> decr name
(error) ERR value is not an integer or out of range
127.0.0.1:6379> incrby gender 100
(integer) 86

 

 

4.GET key

返回 key

如果 key 不存在那么返回特殊值 nil

假如 key

可用版本:

>= 1.0.0

时间复杂度:

O(1)

返回值:

当 key 不存在时,返回 nil ,否则,返回 key

如果 key

127.0.0.1:6379> hmset user name zdx
OK
127.0.0.1:6379> hmget user name
1) "zdx"
127.0.0.1:6379> get user
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> get email
(nil)

 

5.GETRANGE key start end

返回 key 中字符串值的子字符串,字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end

负数偏移量表示从字符串最后开始计数, -1 表示最后一个字符, -2

GETRANGE 通过保证子字符串的值域(range)不超过实际字符串的值域来处理超出范围的值域请求。

在 <= 2.0 的版本里,GETRANGE 被叫作 SUBSTR。

可用版本:

>= 2.4.0

时间复杂度:

O(N), N

复杂度最终由字符串的返回值长度决定,但因为从已有字符串中取出子字符串的操作非常廉价(cheap),所以对于长度不大的字符串,该操作的复杂度也可看作O(1)。

返回值:

截取得出的子字符串。

6.GETSET key value

将给定 key 的值设为 value ,并返回 key

当 key

可用版本:

>= 1.0.0

时间复杂度:

O(1)

返回值:

返回给定 key

当 key 没有旧值时,也即是, key 不存在时,返回 nil

7.INCR key

将 key

如果 key 不存在,那么 key 的值会先被初始化为 0

如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。

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

这是一个针对字符串的操作,因为 Redis 没有专用的整数类型,所以 key 内储存的字符串被解释为十进制 64 位有符号整数来执行 INCR 操作。

可用版本:

>= 1.0.0

时间复杂度:

O(1)

返回值:

执行 INCR 命令之后 key

8.INCRBY key increment

将 key 所储存的值加上增量 increment

如果 key 不存在,那么 key 的值会先被初始化为 0

如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。

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

关于递增(increment) / 递减(decrement)操作的更多信息,参见 INCR 命令。

可用版本:

>= 1.0.0

时间复杂度:

O(1)

返回值:

加上 increment 之后, key

9.INCRBYFLOAT key increment

为 key 中所储存的值加上浮点数增量 increment

如果 key 不存在,那么 INCRBYFLOAT 会先将 key 的值设为 0

如果命令执行成功,那么 key

无论是 key 的值,还是增量 increment ,都可以使用像 2.0e7 、 3e5 、 90e-2 那样的指数符号(exponential notation)来表示,但是,执行 INCRBYFLOAT 命令之后的值总是以同样的形式储存,也即是,它们总是由一个数字,一个(可选的)小数点和一个任意位的小数部分组成(比如 3.14 、 69.768 ,诸如此类),小数部分尾随的 0 会被移除,如果有需要的话,还会将浮点数改为整数(比如 3.0 会被保存成 3

除此之外,无论加法计算所得的浮点数的实际精度有多长, INCRBYFLOAT 的计算结果也最多只能表示小数点的后十七位。

当以下任意一个条件发生时,返回一个错误:

  • key
  • key 当前的值或者给定的增量 increment

可用版本:

>= 2.6.0

时间复杂度:

O(1)

返回值:

执行命令之后 key

 

10.MGET key [key ...]

返回所有(一个或多个)给定 key

如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil

可用版本:

>= 1.0.0

时间复杂度:

O(N) , N 为给定 key

返回值:

一个包含所有给定 key

 

redis> SET redis redis.com
OK

redis> SET mongodb mongodb.org
OK

redis> MGET redis mongodb
1) "redis.com"
2) "mongodb.org"

redis> MGET redis mongodb mysql # 不存在的 mysql 返回 nil
1) "redis.com"
2) "mongodb.org"
3) (nil)

 

 

11.MSET key value [key value ...]

同时设置一个或多个 key-value

如果某个给定 key 已经存在,那么 MSET 会用新值覆盖原来的旧值,如果这不是你所希望的效果,请考虑使用 MSETNX 命令:它只会在所有给定 key

MSET 是一个原子性(atomic)操作,所有给定 key 都会在同一时间内被设置,某些给定 key 被更新而另一些给定 key

可用版本:

>= 1.0.1

时间复杂度:

O(N), N 为要设置的 key

返回值:

总是返回 OK (因为 MSET

 

12.MSETNX key value [key value ...]

同时设置一个或多个 key-value 对,当且仅当所有给定 key

即使只有一个给定 key 已存在, MSETNX 也会拒绝执行所有给定 key

MSETNX 是原子性的,因此它可以用作设置多个不同 key

可用版本:

>= 1.0.1

时间复杂度:

O(N), N 为要设置的 key

返回值:

当所有 key 都成功设置,返回 1

如果所有给定 key 都设置失败(至少有一个 key 已经存在),那么返回 0

 

13.PSETEX key milliseconds value

这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key

可用版本:

>= 2.6.0

时间复杂度:

O(1)

返回值:

设置成功时返回 OK

redis> PSETEX mykey 1000 "Hello"
OK

redis> PTTL mykey
(integer) 999

redis> GET mykey
"Hello"

 

14.SET key value [EX seconds] [PX milliseconds] [NX|XX]

将字符串值 value 关联到 key

如果 key

对于某个原本带有生存时间(TTL)的键来说, 当 SET 命令成功在这个键上执行时, 这个键原有的 TTL 将被清除。

可选参数

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

  • EX second :设置键的过期时间为 second 秒。 SET key value EX second 效果等同于 SETEX key second value
  • PX millisecond :设置键的过期时间为 millisecond 毫秒。 SET key value PX millisecond 效果等同于 PSETEX keymillisecond value
  • NX :只在键不存在时,才对键进行设置操作。 SET key value NX 效果等同于 SETNX key value
  • XX

因为 SET 命令可以通过参数来实现和 SETNX 、 SETEX 和 PSETEX 三个命令的效果,所以将来的 Redis 版本可能会废弃并最终移除 SETNX 、 SETEX 和 PSETEX 这三个命令。

可用版本:

>= 1.0.0

时间复杂度:

O(1)

返回值:

在 Redis 2.6.12 版本以前, SET 命令总是返回 OK

从 Redis 2.6.12 版本开始, SET 在设置操作成功完成时,才返回 OK

如果设置了 NX 或者 XX

 

# 对不存在的键进行设置

redis 127.0.0.1:6379> SET key "value"
OK

redis 127.0.0.1:6379> GET key
"value"


# 对已存在的键进行设置

redis 127.0.0.1:6379> SET key "new-value"
OK

redis 127.0.0.1:6379> GET key
"new-value"


# 使用 EX 选项

redis 127.0.0.1:6379> SET key-with-expire-time "hello" EX 10086
OK

redis 127.0.0.1:6379> GET key-with-expire-time
"hello"

redis 127.0.0.1:6379> TTL key-with-expire-time
(integer) 10069


# 使用 PX 选项

redis 127.0.0.1:6379> SET key-with-pexpire-time "moto" PX 123321
OK

redis 127.0.0.1:6379> GET key-with-pexpire-time
"moto"

redis 127.0.0.1:6379> PTTL key-with-pexpire-time
(integer) 111939


# 使用 NX 选项

redis 127.0.0.1:6379> SET not-exists-key "value" NX
OK # 键不存在,设置成功

redis 127.0.0.1:6379> GET not-exists-key
"value"

redis 127.0.0.1:6379> SET not-exists-key "new-value" NX
(nil) # 键已经存在,设置失败

redis 127.0.0.1:6379> GEt not-exists-key
"value" # 维持原值不变


# 使用 XX 选项

redis 127.0.0.1:6379> EXISTS exists-key
(integer) 0

redis 127.0.0.1:6379> SET exists-key "value" XX
(nil) # 因为键不存在,设置失败

redis 127.0.0.1:6379> SET exists-key "value"
OK # 先给键设置一个值

redis 127.0.0.1:6379> SET exists-key "new-value" XX
OK # 设置新值成功

redis 127.0.0.1:6379> GET exists-key
"new-value"


# NX 或 XX 可以和 EX 或者 PX 组合使用

redis 127.0.0.1:6379> SET key-with-expire-and-NX "hello" EX 10086 NX
OK

redis 127.0.0.1:6379> GET key-with-expire-and-NX
"hello"

redis 127.0.0.1:6379> TTL key-with-expire-and-NX
(integer) 10063

redis 127.0.0.1:6379> SET key-with-pexpire-and-XX "old value"
OK

redis 127.0.0.1:6379> SET key-with-pexpire-and-XX "new value" PX 123321
OK

redis 127.0.0.1:6379> GET key-with-pexpire-and-XX
"new value"

redis 127.0.0.1:6379> PTTL key-with-pexpire-and-XX
(integer) 112999


# EX 和 PX 可以同时出现,但后面给出的选项会覆盖前面给出的选项

redis 127.0.0.1:6379> SET key "value" EX 1000 PX 5000000
OK

redis 127.0.0.1:6379> TTL key
(integer) 4993 # 这是 PX 参数设置的值

redis 127.0.0.1:6379> SET another-key "value" PX 5000000 EX 1000
OK

redis 127.0.0.1:6379> TTL another-key
(integer) 997

 

15.SETEX key seconds value

将值 value 关联到 key ,并将 key 的生存时间设为 seconds

如果 key

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

SET key value
EXPIRE key seconds # 设置生存时间

不同之处是, SETEX 是一个原子性(atomic)操作,关联值和设置生存时间两个动作会在同一时间内完成,该命令在 Redis 用作缓存时,非常实用。

可用版本:

>= 2.0.0

时间复杂度:

O(1)

返回值:

设置成功时返回 OK

当 seconds

# 在 key 不存在时进行 SETEX

redis> SETEX cache_user_id 60 10086
OK

redis> GET cache_user_id # 值
"10086"

redis> TTL cache_user_id # 剩余生存时间
(integer) 49


# key 已经存在时,SETEX 覆盖旧值

redis> SET cd "timeless"
OK

redis> SETEX cd 3000 "goodbye my love"
OK

redis> GET cd
"goodbye my love"

redis> TTL cd
(integer) 2997

 

16.SETNX key value

将 key 的值设为 value ,当且仅当 key

若给定的 key

SETNX 是『SET if Not eXists』(如果不存在,则 SET)的简写。

可用版本:

>= 1.0.0

时间复杂度:

O(1)

返回值:

设置成功,返回 1

设置失败,返回 0

17.SETRANGE key offset value

用 value 参数覆写(overwrite)给定 key 所储存的字符串值,从偏移量 offset

不存在的 key

SETRANGE 命令会确保字符串足够长以便将 value 设置在指定的偏移量上,如果给定 key 原来储存的字符串长度比偏移量小(比如字符串只有 5 个字符长,但你设置的 offset 是 10 ),那么原字符和偏移量之间的空白将用零字节(zerobytes, "\x00"

注意你能使用的最大偏移量是 2^29-1(536870911) ,因为 Redis 字符串的大小被限制在 512 兆(megabytes)以内。如果你需要使用比这更大的空间,你可以使用多个 key

当生成一个很长的字符串时,Redis 需要分配内存空间,该操作有时候可能会造成服务器阻塞(block)。在2010年的Macbook Pro上,设置偏移量为 536870911(512MB 内存分配),耗费约 300 毫秒, 设置偏移量为 134217728(128MB 内存分配),耗费约 80 毫秒,设置偏移量 33554432(32MB 内存分配),耗费约 30 毫秒,设置偏移量为 8388608(8MB 内存分配),耗费约 8 毫秒。 注意若首次内存分配成功之后,再对同一个 key

可用版本:

>= 2.2.0

时间复杂度:

对小(small)的字符串,平摊复杂度O(1)。(关于什么字符串是”小”的,请参考 APPEND 命令)

否则为O(M), M 为 value

返回值:

被 SETRANGE 修改之后,字符串的长度。

 

18.STRLEN key

返回 key

当 key

可用版本:

>= 2.2.0

复杂度:

O(1)

返回值:

字符串值的长度。

当 key 不存在时,返回 0




 



举报

相关推荐

0 条评论