redis数据类型strings的详细介绍

99次阅读
没有评论

共计 7182 个字符,预计需要花费 18 分钟才能阅读完成。

本篇内容主要讲解“redis 数据类型 strings 的详细介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让丸趣 TV 小编来带大家学习“redis 数据类型 strings 的详细介绍”吧!

1.  String(字符串)

string 是最简单的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value,其上支持的操作与 Memcached 的操作类似。但它的功能更丰富。

redis 采用结构 sdshdr 和 sds 封装了字符串,字符串相关的操作实现在源文件 sds.h/sds.c 中。在 Redis 中字符串类型的 Value 最多可以容纳的数据长度是 512M

在 Redis 中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如 JPEG 图像数据或 Json 对象描述信息等

数据结构定义如下:

typedefchar*sds;

structsdshdr{

  longlen;

  longfree;

  charbuf[];

};

1.1.  SET

Set key value [EX seconds] [PXmilliseconds] [NX|XX]

将字符串值 value 关联到 key。如果 key 已经持有其他值,SET 就覆写旧值,无视类型。对于某个原本带有生存时间(TTL)的键来说,当 SET 命令成功在这个键上执行时,这个键原有的 TTL 将被清除。

可选参数

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

EXsecond:设置键的过期时间为 second 秒。SET key value EX second 效果等同于 SETEXkey second value。

PXmillisecond:设置键的过期时间为 millisecond 毫秒。SET key value PX millisecond 效果等同于 PSETEXkey millisecond value。

NX:只在键不存在时,才对键进行设置操作。SETkey value NX 效果等同于 SETNX key value。

XX:只在键已经存在时,才对键进行设置操作。

#赋值与取值

127.0.0.1:6379 set dbredis

OK

127.0.0.1:6379 get db

redis

#使用 ex 选项

127.0.0.1:6379 set dbredis ex 20

OK

127.0.0.1:6379 ttl db

(integer) 16

127.0.0.1:6379 get db

redis

127.0.0.1:6379 ttl db

(integer) 5

127.0.0.1:6379 get db

redis

127.0.0.1:6379 get db

redis

127.0.0.1:6379 get db

(nil)

# 使用 PX 选项

127.0.0.1:6379 set db redis px 20000

OK

127.0.0.1:6379 PTTL db

(integer)15674

127.0.0.1:6379 PTTL db

(integer)8974

127.0.0.1:6379 PTTL db

(integer)8045

127.0.0.1:6379 get db

redis

127.0.0.1:6379 PTTL db

(integer)2482

127.0.0.1:6379 get db

redis

127.0.0.1:6379 get db

(nil)

# 使用 NX 选项

127.0.0.1:6379 set db oracle NX

OK

127.0.0.1:6379 get db

oracle

127.0.0.1:6379 set db redis NX  — 键存在,失败

(nil)

127.0.0.1:6379 get db

oracle

# 使用 XX 选项

127.0.0.1:6379 exists name

(integer)0

127.0.0.1:6379 get name

(nil)

127.0.0.1:6379 set name hunt1574 XX  — 键不存在,失败

(nil)

127.0.0.1:6379 set name redis

OK

127.0.0.1:6379 set name hunt1574 XX

OK

127.0.0.1:6379 get name

hunt1574

1.2.  SETEX

Setex key seconds value

将值 value 关联到 key,并将 key 的生存时间设为 seconds (以秒为单位)。

如果 key 已经存在,SETEX 命令将覆写旧值。

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

SETkey value

EXPIREkey seconds  # 设置生存时间

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

#key 不存在赋值

127.0.0.1:6379 EXISTS user

(integer)0

127.0.0.1:6379 setex user 30 root

OK

127.0.0.1:6379 get user

root

127.0.0.1:6379 ttl user

(integer)15

127.0.0.1:6379 get user

(nil)

#key 存在赋值

127.0.0.1:6379 setex user 20 admin

OK

127.0.0.1:6379 get user

admin

127.0.0.1:6379 ttl user

(integer)14

127.0.0.1:6379 get user

(nil)

1.3.  SETNX

SETNX key value

将 key 的值设为 value,当且仅当 key 不存在。

若给定的 key 已经存在,则 SETNX 不做任何动作。

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

# 赋值与取值

127.0.0.1:6379 EXISTS www

(integer)0

127.0.0.1:6379 setnx www code.google.com

(integer)1

127.0.0.1:6379 setnx www redis.io

(integer)0

127.0.0.1:6379 get www

code.google.com

127.0.0.1:6379

1.4.  SETRANGE

SETRANGE key offset value

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

127.0.0.1:6379 set www code.google.com

OK

127.0.0.1:6379 get www

code.google.com

127.0.0.1:6379 SETRANGE www 0 mail

(integer)15

127.0.0.1:6379 get www

mail.google.com

127.0.0.1:6379 SETRANGE www 0 gmail

(integer)15

127.0.0.1:6379 get www

gmailgoogle.com

1.5.  MSET

MSET key value [key value …]

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

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

MSET 是一个原子性 (atomic) 操作,所有给定 key 都会在同一时间内被设置,某些给定 key 被更新而另一些给定 key 没有改变的情况,不可能发生。

# 赋值与取值

127.0.0.1:6379 mset os linux db redis date 2015-03-17

OK

127.0.0.1:6379 mget os db date

1) linux

2) redis

3) 2015-03-17

# 值覆盖

127.0.0.1:6379 mset os linux db oracle date 2015-03-17

OK

127.0.0.1:6379 mget os db date

1) linux

2) oracle

3) 2015-03-17

127.0.0.1:6379

1.6.  MSETNX

MSETNX key value [key value …]

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

即使只有一个给定 key 已存在,MSETNX 也会拒绝执行所有给定 key 的设置操作。MSETNX 是原子性的,因此它可以用作设置多个不同 key 表示不同字段 (field) 的唯一性逻辑对象(unique logic object),所有字段要么全被设置,要么全不被设置。

# 赋值与取值

127.0.0.1:6379 mget os db date

1) linux

2) redis

3) 2015-03-17

127.0.0.1:6379 msetnx os linux db oracle date 2015-03-17

(integer)0

127.0.0.1:6379 mget os db date

1) linux

2) redis

3) 2015-03-17

127.0.0.1:6379

1.7.  GET

GET key

返回 key 所关联的字符串值。

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

假如 key 储存的值不是字符串类型,返回一个错误,因为 GET 只能用于处理字符串值。

127.0.0.1:6379 set dbname redis

OK

127.0.0.1:6379 get dbname

redis

127.0.0.1:6379 get dbversion

(nil)

127.0.0.1:6379 lpush db redis mysql mongodb

(integer)3

127.0.0.1:6379 get db

(error)WRONGTYPE Operation against a key holding the wrong kind of value

1.8.  MGET

MGET key [key …]

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

如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil。因此,该命令永不失败。

# 赋值与取值

127.0.0.1:6379 set date 2015-03-17

OK

127.0.0.1:6379 set time 10:00

OK

127.0.0.1:6379 mget date time

1) 2015-03-17

2) 10:00

127.0.0.1:6379 mget date time week  —week 不存在,返回 nil

1) 2015-03-17

2) 10:00

3)(nil)

1.9.  GETRANGE

GETRANGE key startend

返回 key 中字符串值的子字符串,字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)。负数偏移量表示从字符串最后开始计数,-1 表示最后一个字符,-2 表示倒数第二个,以此类推。范围超过字符串最大下标值以最大下标值为准。

# 赋值与取值

127.0.0.1:6379 set www redis.io

OK

127.0.0.1:6379 GETRANGE www 0 4

redis

127.0.0.1:6379 GETRANGE www -2 -1

io

127.0.0.1:6379 GETRANGE www -100 -1

redis.io

1.10. GETSET

GETSET key value

将给定 key 的值设为 value,并返回 key 的旧值(old value)。

当 key 存在但不是字符串类型时,返回一个错误。

127.0.0.1:6379 getset dbname mysql

(nil)

127.0.0.1:6379 get dbname

mysql

127.0.0.1:6379 getset dbname redis

mysql

127.0.0.1:6379 get dbname

redis

1.11. INCR

INCR key

将 key 中储存的数字值增一。

如果 key 不存在,那么 key 的值会先被初始化为 0,然后再执行 INCR 操作。如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。

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

127.0.0.1:6379 EXISTS pages

(integer)0

127.0.0.1:6379 incr pages

(integer)1

127.0.0.1:6379 get pages

1

127.0.0.1:6379 set rows 0

OK

127.0.0.1:6379 incr rows

(integer)1

127.0.0.1:6379 incr rows

(integer)2

127.0.0.1:6379 incr rows

(integer)3

127.0.0.1:6379 get rows

3

127.0.0.1:6379

1.12. INCRBY

INCRBY keyincrement

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

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

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

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

# 键存在

127.0.0.1:6379 get rows

3

127.0.0.1:6379 INCRBY rows 3

(integer)6

127.0.0.1:6379 INCRBY rows 3

(integer)9

127.0.0.1:6379 INCRBY rows 3

(integer)12

# 键不存在

127.0.0.1:6379 get num

(nil)

127.0.0.1:6379 INCRBY num -2

(integer)-2

127.0.0.1:6379 INCRBY num -2

(integer)-4

127.0.0.1:6379 INCRBY num -2

(integer)-6

1.13. INCRBYFLOAT

INCRBYFLOAT keyincrement

为 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)。

127.0.0.1:6379 set price 45.99

OK

127.0.0.1:6379 INCRBYFLOAT price 4.5

50.49

127.0.0.1:6379 INCRBYFLOAT price 4.5

54.99

127.0.0.1:6379 get num

(nil)

127.0.0.1:6379 INCRBYFLOAT num 5.3

5.3

127.0.0.1:6379 INCRBYFLOAT num 5.3

10.6

1.14. DECR

DECR key

将 key 中储存的数字值减一。

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

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

127.0.0.1:6379 set price 398.99

OK

127.0.0.1:6379 decr price

(error)ERR value is not an integer or out of range

127.0.0.1:6379 set pages 98

OK

127.0.0.1:6379 decr pages

(integer)97

127.0.0.1:6379 decr pages

(integer)96

1.15. DECRBY

DECRBY keydecrement

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

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

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

127.0.0.1:6379 get pages

96

127.0.0.1:6379 decrby pages 5

(integer)91

127.0.0.1:6379 decrby pages 5

(integer)86

127.0.0.1:6379 decrby pages -5

(integer)91

127.0.0.1:6379 decrby pages -5

(integer)96

127.0.0.1:6379

1.16. APPEND

APPEND key value

如果 key 已经存在并且是一个字符串,APPEND 命令将 value 追加到 key 原来的值的末尾。

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

127.0.0.1:6379 get db

(nil)

127.0.0.1:6379 APPENDdb redis

(integer) 5

127.0.0.1:6379 APPENDdb .io

(integer) 8

127.0.0.1:6379 get db

redis.io

127.0.0.1:6379

1.17. STRLEN

STRLEN key

返回 key 所储存的字符串值的长度。

当 key 储存的不是字符串值时,返回一个错误。

127.0.0.1:6379 getpages

96

127.0.0.1:6379 STRLENpages

(integer) 2

127.0.0.1:6379 get db

redis.io

127.0.0.1:6379 STRLENdb

(integer) 8

127.0.0.1:6379

到此,相信大家对“redis 数据类型 strings 的详细介绍”有了更深的了解,不妨来实际操作一番吧!这里是丸趣 TV 网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-28发表,共计7182字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)