Redis String类型详解(二)

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
8、APPEND
1、语法
QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空