Redis使用手册
上QQ阅读APP看书,第一时间看更新

2.1 SET:为字符串键设置值

创建字符串键最常用的方法就是使用SET命令,这个命令可以为一个字符串键设置相应的值。在最基本的情况下,用户只需要向SET命令提供一个键和一个值就可以了:

        SET key value

与之前提到过的一样,这里的键和值既可以是文字也可以是二进制数据。

SET命令在成功创建字符串键之后将返回OK作为结果。比如通过执行以下命令,我们可以创建出一个字符串键,它的键为"number",值为"10086":

        redis> SET number "10086"
        OK

再比如,通过执行以下命令,我们可以创建出一个键为"book",值为"The Design and Implementation of Redis"的字符串键:

        redis> SET book "The Design and Implementation
    of Redis"
        OK

图2-2和图2-3分别展示了数据库在以上两条SET命令执行之前以及执行之后的状态。

图2-2 执行SET命令之前数据库的状态

图2-3 执行SET命令之后数据库的状态

数据库键的存放方式

为了方便阅读,本书会将数据库中新出现的键放置到已有键的下方。比如在上面展示的数据库图2-3中,我们就将新添加的"number"键和"book"键放置到了已有键的下方。

在实际中,Redis数据库是以无序的方式存放数据库键的,一个新加入的键可能会出现在数据库的任何位置上,因此我们在使用Redis的过程中不应该对键在数据库中的摆放位置做任何假设,以免造成错误。

2.1.1 改变覆盖规则

在默认情况下,对一个已经设置了值的字符串键执行SET命令将导致键的旧值被新值覆盖。举个例子,如果我们连续执行以下两条SET命令,那么第一条SET命令设置的值将被第二条SET命令设置的值所覆盖:

        redis> SET song_title "Get Wild"
        OK

       redis> SET song_title "Running to Horizon"
        OK

在第二条SET命令执行完毕之后,song_title键的值将从原来的"Get Wild"变为"Running to Horizon"。

从Redis 2.6.12版本开始,用户可以通过向SET命令提供可选的NX选项或者XX选项来指示SET命令是否要覆盖一个已经存在的值:

        SET key value [NX|XX]

如果用户在执行SET命令时给定了NX选项,那么SET命令只会在键没有值的情况下执行设置操作,并返回OK表示设置成功;如果键已经存在,那么SET命令将放弃执行设置操作,并返回空值nil表示设置失败。

以下代码展示了带有NX选项的SET命令的行为:

        redis> SET password "123456" NX
        OK        -- 对尚未有值的password键进行设置,成功

       redis> SET password "999999" NX
        (nil)     -- password键已经有了值,设置失败

因为第二条SET命令没有改变password键的值,所以password键的值仍然是刚开始时设置的"123456"。

如果用户在执行SET命令时给定了XX选项,那么SET命令只会在键已经有值的情况下执行设置操作,并返回OK表示设置成功;如果给定的键并没有值,那么SET命令将放弃执行设置操作,并返回空值表示设置失败。

举个例子,如果我们对一个没有值的键mongodb-homepage执行以下SET命令,那么命令将因为XX选项的作用而放弃执行设置操作:

        redis> SET mongodb-homepage "mongodb.com" XX
        (nil)

相反,如果我们对一个已经有值的键执行带有XX选项的SET命令,那么命令将使用新值去覆盖已有的旧值:

        redis> SET mysql-homepage "mysql.org"
        OK     -- 为键mysql-homepage设置一个值

       redis> SET mysql-homepage "mysql.com" XX
        OK     -- 对键的值进行更新

在第二条SET命令执行之后,mysql-homepage键的值将从原来的"mysql.org"更新为"mysql.com"。

2.1.2 其他信息

复杂度:O(1)。

版本要求:不带任何可选项的SET命令从Redis 1.0.0版本开始可用;带有NX、XX等可选项的SET命令从Redis 2.6.12版本开始可用。