数据库
PythonJava前端运维
Redis
Redis
  • Redis 简介
  • 安装和连接
  • Redis 键(key)
  • Redis 数据类型
    • 基本数据类型
      • String
      • Lists
      • Sets
      • zset
      • Hashs
    • 特殊类型
      • Bitmaps
      • HyperLogLog
      • Geospatial
    • Sorted sets
    • Streams
    • Geospatial
    • Bitfields
  • Redis 配置
  • Redis CLI
  • Redis 持久化
  • Redis 事务
  • Redis 管道
  • Redis 发布订阅
  • Redis 脚本
  • Redis 数据备份与恢复
  • Redis 缓存问题
  • Redis 运维监控
由 GitBook 提供支持
在本页
  • 介绍
  • 常用命令
  • SET
  • GET
  • GETSET
  • SETRLEN
  • APPEND
  • INCR
  • INCRBY
  • INCRBYFLOAT
  • DECR
  • MSETNX
  • MGET

这有帮助吗?

  1. Redis 数据类型
  2. 基本数据类型

String

上一页基本数据类型下一页Lists

最后更新于9个月前

这有帮助吗?

介绍

String 类型是 Redis 中最基础的数据结构,其它几种数据结构都是在字符串类型的基础上构建的。String 类型是二进制安全的,意思是 Redis 的 String 可以包含任何数据。如数字,字符串,jpg图片或者序列化的对象。

使用场景

  • 缓存:经典使用场景,把常用数据,比如用户信息,保存在 Redis 中,Redis 作为缓存层,MySQL 作为持久层,降低 MySQL 的读写压力。

  • 计数器:Redis 是单线程模型,一个命令执行完才会执行下一个命令。

  • session:常见方案是使用用户 id 作为 key,session 作为 value,实现 session 的共享。

常用命令

SET

将字符串值value关联到key。如果key已经有其它值,set就会覆盖掉旧值,无视类型。

可选参数

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

  • EX seconds:将键的过期时间设置为seconds秒。

  • PX milliseconds:将键的过期时间设置为millisecond毫秒。

  • NX:当键不存在时设置值。

  • XX:当键存在时设置值。

注意

因为SET命令可以通过参数来实现SEINX、SETES、PSETES命令相同的效果,所以Redis将来的版本可能会移除并废弃SETNX、SETEX、PSETEX命令。

返回值

  • 在 Redis2.6.12 版本以前,SET命令总是返回OK。

  • 从 Redis2.6.12 版本开始,SET命令只在操作成功是返回OK。如果命令使用NX或者XX选项,但因为条件没有达到而造成操作为执行,将返回空批量回复(NULL Bulk Reply)

代码示例

set name zhangsan        # 无过期期间
set name zhangsan EX 10  # 设置过期时间
set name zhangsan NX     # 如果键存在,则设置失败
set name lisi get        # 先返回旧值,然后设置新值
set name lisi keepttl    # 

GET

说明

返回与键相关联的字符串值。

返回值

如果key不存在,反追特殊值nil;否则返回对应的值。

如果key的值并非字符串类型,那么返回一个错误,因为GET命令只能用于字符串值。

代码示例

  1. 对不存在的键key或者是字符串类型的键执行GET命令:

redis> GET db
(nil)

redis> SET db redis
ok

redis> GET db
"redis"
  1. 对不是字符串类型的键执行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

GETSET

GETSET key value

将key的值设置为value,并返回key在设置之前的旧值。

返回值

返回给定键的旧值。如果没有旧值,则返回nil。当键存在但不是字符串类型时,返回一个错误。

redis> GETSET db mongodb    # 没有旧值,返回 nil
(nil)

redis> GET db
"mongodb"

redis> GETSET db redis      # 返回旧值 mongodb
"mongodb"

redis> GET db
"redis"

SETRLEN

返回键存储的字符串值的长度

返回值

STRLEN命令返回字符串值的长度。当键不存在时,返回0。当键存储的不是字符串值时,返回一个错误。

示例代码

redis> SET name "lzw"
ok

redis> SETRLEN name
(integer) 3

redis> SETRLEN myname
(integer) 0

APPEND

如果键已经存在并且它的值是一个字符串,APPEND命令将把value追加到键现有值的末尾。

如果键不存在,APPEND就将键的值设置为value。

返回值

返回追加值之后的长度。

示例

  1. 对不存在的key执行APPEND

redis> EXISTS myname
(integer) 0

redis> APPEND myname "lzw"
(integer) 3
  1. 对已经存在的字符串进行APPEND

redis> APPEND myname "180"
(integer) 6

redis> GET myname
"lzw180"

INCR

说明

为key存储的数字值加上一。

如果key不存在,那么它的值将先被初始化为0,然后执行INCR命令。

如果key存储的值不能被解释为数字,那么INCR将返回一个错误。

注意:

INCR命令是一个针对字符串的操作,因为Redis没有专门的整数类型,所以key存储的值在执行INCR命令时会被解释为十进制64位有符号整数。

返回值

INCR命令返回key在执行加一操作之后的值。

代码示例

redis> SET view_number 20
OK

redis> INCR view_number
(integer) 21

redis> GET view_number
"21"    # 数值在Redis中以字符串的形式保存

INCRBY

为键存储的数字值加上增量increment。

如果key不存在,那么key的值先被初始化为0,然后再执行INCRBY命令。

如果key存储的值不能被解释为数字,那么INCRBY命令将返回一个错误。

返回值

返回加上增量increment之后的值。

代码示例

  1. 键存在,并且值为数字

redis> SET num 50
OK

redis> INCRBY num 20
(integer) 70

redis> GET num
"70"
  1. 键不存在

redis> EXISTS counter
(integer) 0

redis> INCRBY counter 30
(integer) 30

redis> GET counter
"30"
  1. 键存在,但值无法被解释为数字:

redis> SET book "long long ago..."
OK

redis> INCRBY book 200
(error) ERR value is not an integer or out of range

INCRBYFLOAT

为key存储的值加上浮点数。

如果key不存在,那么INCRBYFLOAT会先将key的值初始化为0,然后在执行增量操作。

如果命令执行成功,那么key的值会被更新为执行加法计算后的新值,并且新值会以字符串的形式返回给调用者。

无论是key的值还是增了,都可以用2.0e7、3e5这样的指数符号来表示,但是,执行INCRBYFLOAT命令之后的值总是以同样的形式来存储总是由一个数字、一个小数点和一个任意长度的小数部分组成(比如:43.1)。小数部分尾随的0会被移除。如果可能的话,还会将浮点数转换为整数(比如3.0会被保存为3)

此外,无论加法计算所得的浮点数的实际精度有多长,INCRBYFLOAT命令的计算结果最多只保留小数位后十七位。

当以下任意一个条件发生时,命令会返回一个错误。

  • key的值不是字符串类型。

  • key的当前值或者给定的增量不能被解释为双精度浮点数。

返回值

返回增加之后的新值。

代码示例

redis> GET decimal
"3.0"

redis> INCRBYFLOAT decimal 2.56
"5.56"

redis> GET decimal
"5.56"

DECR

为key存储的值减去一

redis> SET failure_times 10
OK

redis> DECR failure_times
(integer) 9

redis> EXISTS count
(integer) 0

redis> DECR count
(integer) -1

MSET

同时为多个键设置值。

如果某个给定的键已经存在,那么MSET将使用新值覆盖旧值。

MSET 是一个原子性(atomic)操作, 所有给定键都会在同一时间内被设置, 不会出现某些键被设置了但是另一些键没有被设置的情况。

返回值

MSET 命令总是返回OK。

代码示例

redis> MSET date "2012.3.30" time "11:00 a.m." weather "sunny"
OK

redis> MGET date time weather
1) "2012.3.30"
2) "11:00 a.m."
3) "sunny"

MSETNX

当且仅当所有给定键不存在时,为所有给定键设置值。

即使只有一个给定键已经存在,MSETNX命令也会拒绝执行对所有键的设置操作。

MSETNX 是一个原子性(atomic)操作, 所有给定键要么就全部都被设置, 要么就全部都不设置, 不可能出现第三种状态。

返回值

当所有给定键都设置成功时, 命令返回 1 ; 如果因为某个给定键已经存在而导致设置未能成功执行, 那么命令返回 0 。

代码实例

  1. 对不存在的键执行MSETNX命令

redis> MSETNX rmdbs "MySQL" nosql "MongoDB" key-value-store "redis"
(integer) 1

redis> MGET rmdbs nosql key-value-store
1) "MySQL"
2) "MongoDB"
3) "redis"
  1. 对某个已经存在的键进行设置

redis> MSETNX rmdbs "Sqlite" language "python"  # rmdbs 键已经存在,操作失败
(integer) 0

redis> EXISTS language                          # 因为 MSETNX 命令没有成功执行
(integer) 0                                     # 所以 language 键没有被设置

redis> GET rmdbs                                # rmdbs 键也没有被修改
"MySQL"

MGET

返回给定的一个或多个字符串键的值。

如果给定的字符串键里面, 有某个键不存在, 那么这个键的值将以特殊值 nil 表示。

返回值

MGET 命令将返回一个列表, 列表中包含了所有给定键的值。

代码示例

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)

图例
Drawing