1、String 介绍
- string是redis最基本的类型,一个key对应一个value。一个键最大能存储 512MB。
命令 | 描述 |
---|---|
SET key value | 设置指定 key 的值 |
GET 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 | 将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。 |
SETNX key value | 只有在 key 不存在时设置 key 的值。 |
SETRANGE key offset value | 用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。 |
STRLEN key | 返回 key 所储存的字符串值的长度。 |
MSET key value [key value ...] | 同时设置一个或多个 key-value 对。 |
MSETNX key value [key value ...] | 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。 |
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 decrementkey | 所储存的值减去给定的减量值(decrement) 。 |
APPEND key value | 如果 key 已经存在并且是一个字符串, APPEND 命令将 指定value 追加到改 key 原来的值(value)的末尾。 |
2、String 应用场景
- 常规计数:微博数,粉丝数等。
3、String 操作介绍
1、SET
1、语法
SET key value [EX seconds] [PX milliseconds] [NX|XX]
将字符串值 value 关联到 key 。
如果 key 已经持有其他值, SET 就覆写旧值, 无视类型。
当 SET 命令对一个带有生存时间(TTL)的键进行设置之后, 该键原有的 TTL 将被清除。
2、可选参数
- 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 : 只在键已经存在时, 才对键进行设置操作。
- 因为 SET 命令可以通过参数来实现 SETNX 、 SETEX 以及 PSETEX 命令的效果, 所以 Redis 将来的版本可能会移除并废弃 SETNX 、 SETEX 和 PSETEX 这三个命令。
3、返回值
-
SET
命令只在设置操作成功完成时才返回OK
; 如果命令使用了NX
或者XX
选项, 但是因为条件没达到而造成设置操作未执行, 那么命令将返回空批量回复(NULL Bulk Reply)。
4、代码示例
- 对不存在的键进行设置:
redis> SET key "value"
OK
redis> GET key
"value"
- 对已存在的键进行设置:
redis> SET key "new-value"
OK
redis> GET key
"new-value"
- 使用
EX
选项:
redis> SET key-with-expire-time "hello" EX 10086
OK
redis> GET key-with-expire-time
"hello"
redis> TTL key-with-expire-time
(integer) 10069
- 使用
PX
选项:
redis> SET key-with-pexpire-time "moto" PX 123321
OK
redis> GET key-with-pexpire-time
"moto"
redis> PTTL key-with-pexpire-time
(integer) 111939
- 使用
NX
选项:
redis> SET not-exists-key "value" NX
OK # 键不存在,设置成功
redis> GET not-exists-key
"value"
redis> SET not-exists-key "new-value" NX
(nil) # 键已经存在,设置失败
redis> GEt not-exists-key
"value" # 维持原值不变
- 使用
XX
选项:
redis> EXISTS exists-key
(integer) 0
redis> SET exists-key "value" XX
(nil) # 因为键不存在,设置失败
redis> SET exists-key "value"
OK # 先给键设置一个值
redis> SET exists-key "new-value" XX
OK # 设置新值成功
redis> GET exists-key
"new-value"
2、SETNX
1、语法
SETNX key value
只在键
key
不存在的情况下, 将键key
的值设置为value
。若键
key
已经存在, 则SETNX
命令不做任何动作。SETNX
是『SET if Not eXists』(如果不存在,则 SET)的简写。
2、返回值
- 命令在设置成功时返回
1
, 设置失败时返回0
。
3、代码示例
redis> EXISTS job # job 不存在
(integer) 0
redis> SETNX job "programmer" # job 设置成功
(integer) 1
redis> SETNX job "code-farmer" # 尝试覆盖 job ,失败
(integer) 0
redis> GET job # 没有被覆盖
"programmer"
3、SETEX
1、语法
SETEX key seconds value
将键
key
的值设置为value
, 并将键key
的生存时间设置为seconds
秒钟。如果键
key
已经存在, 那么SETEX
命令将覆盖已有的值。SETEX
命令的效果和以下两个命令的效果类似:
SET key value
EXPIRE key seconds # 设置生存时间
-
SETEX
和这两个命令的不同之处在于SETEX
是一个原子(atomic)操作, 它可以在同一时间内完成设置值和设置过期时间这两个操作, 因此SETEX
命令在储存缓存的时候非常实用。
2、返回值
- 命令在设置成功时返回
OK
。 当seconds
参数不合法时, 命令将返回一个错误。
3、代码示例
- 在键
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
4、PSETEX
1、语法
PSETEX key milliseconds value
- 这个命令和
SETEX
命令相似, 但它以毫秒为单位设置key
的生存时间, 而不是像SETEX
命令那样以秒为单位进行设置。
2、返回值
- 命令在设置成功时返回
OK
。
3、代码示例
redis> PSETEX mykey 1000 "Hello"
OK
redis> PTTL mykey
(integer) 999
redis> GET mykey
"Hello"
5、GET
1、语法
GET key
- 返回与键
key
相关联的字符串值。
2、返回值
如果键
key
不存在, 那么返回特殊值nil
; 否则, 返回键key
的值。如果键
key
的值并非字符串类型, 那么返回一个错误, 因为GET
命令只能用于字符串值。
3、代码示例
- 对不存在的键
key
或是字符串类型的键key
执行GET
命令:
redis> GET db
(nil)
redis> SET db redis
OK
redis> GET db
"redis"
- 对不是字符串类型的键
key
执行GET
命令:
redis> DEL db
(integer) 1
redis> LPUSH db redis mongodb mysql
(integer) 3
redis> GET db
(error) ERR Operation against a key holding the wrong kind of value
6、GETSET
1、语法
GETSET key value
- 将键
key
的值设为value
, 并返回键key
在被设置之前的旧值。
2、返回值
- 返回给定键
key
的旧值。 - 如果键
key
没有旧值, 也即是说, 键key
在被设置之前并不存在, 那么命令返回nil
。 - 当键
key
存在但不是字符串类型时, 命令返回一个错误。
3、代码示例
redis> GETSET db mongodb # 没有旧值,返回 nil
(nil)
redis> GET db
"mongodb"
redis> GETSET db redis # 返回旧值 mongodb
"mongodb"
redis> GET db
"redis"
7、STRLEN
1、语法
STRLEN key
- 返回键
key
储存的字符串值的长度。
2、返回值
-
STRLEN
命令返回字符串值的长度。 - 当键
key
不存在时, 命令返回0
。 - 当
key
储存的不是字符串值时, 返回一个错误。
3、代码示例
- 获取字符串值的长度:
redis> SET mykey "Hello world"
OK
redis> STRLEN mykey
(integer) 11
- 不存在的键的长度为
0
:
redis> STRLEN nonexisting
(integer) 0