Redis从入门到精通——Redis数据类型——1、字符串(String)命令

Redis数据类型——1、字符串(String)命令

  需要说明的是,Redis 命令名称的大小写并不影响命令表的查找结果。Redis 的命令表使用的是与大小写无关的查找算法,输入的命令名称只要是正确的,无论大小写,都能得到正确的结果,命令表就能返回相同的 redisCommand 结构。

  在获取键值对中文的时候,如果值是中文的,则返回编码后的字符串。如果你希望返回值是中文的,那么在客户端连接服务器端时,可以使用命令 "redis-cli -raw" 将底层编码的字符串转换为中文。

[root@localhost.localdomain current]#pwd
/usr/local/redis/current
[root@localhost.localdomain current]#ll
total 304
-rw-rw-r--.  1 root root 157632 Mar 27  2018 00-RELEASENOTES
-rw-rw-r--.  1 root root     53 Mar 27  2018 BUGS
-rw-rw-r--.  1 root root   1815 Mar 27  2018 CONTRIBUTING
-rw-rw-r--.  1 root root   1487 Mar 27  2018 COPYING
drwxrwxr-x.  6 root root    192 Mar 17 10:22 deps
-rw-rw-r--.  1 root root     11 Mar 27  2018 INSTALL
-rw-rw-r--.  1 root root    151 Mar 27  2018 Makefile
-rw-rw-r--.  1 root root   4223 Mar 27  2018 MANIFESTO
-rw-rw-r--.  1 root root  20543 Mar 27  2018 README.md
-rw-rw-r--.  1 root root  58766 Mar 27  2018 redis.conf
-rwxrwxr-x.  1 root root    271 Mar 27  2018 runtest
-rwxrwxr-x.  1 root root    280 Mar 27  2018 runtest-cluster
-rwxrwxr-x.  1 root root    281 Mar 27  2018 runtest-sentinel
-rw-rw-r--.  1 root root   7606 Mar 27  2018 sentinel.conf
drwxrwxr-x.  3 root root   8192 Mar 17 10:47 src
drwxrwxr-x. 10 root root    167 Mar 27  2018 tests
drwxrwxr-x.  8 root root   4096 Mar 27  2018 utils
[root@localhost.localdomain current]#src/redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> set className 仠[EX seconds] [PX milliseconds] [NX|XX]
[root@localhost.localdomain current]#set className 你们的胃叫胃,孤的叫胃PLUS^C
[root@localhost.localdomain current]#src/redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> set className 你们的胃叫胃,孤的叫胃PLUS
OK
127.0.0.1:6379> get className
"\xe4\xbd\xa0\xe4\xbb\xac\xe7\x9a\x84\xe8\x83\x83\xe5\x8f\xab\xe8\x83\x83\xef\xbc\x8c\xe5\xad\xa4\xe7\x9a\x84\xe5\x8f\xab\xe8\x83\x83PLUS"
127.0.0.1:6379> 
[root@localhost.localdomain current]#src/redis-cli -h 127.0.0.1 -p 6379 --raw
127.0.0.1:6379> get className
你们的胃叫胃,孤的叫胃PLUS
127.0.0.1:6379> 

 一、Redis 数据类型之字符串(String)命令

  字符串类型是 Redis 中最基本的数据类型,它是二进制安全的,任何形式的字符串都可以存储,包括二进制数据、序列化后的数据,JSON化的对象,甚至是一张经 Base64 编码后的图片。String 类型的键最大能存储 512 MB 的数据。

  Redis 字符串类型的相关命令用于管理 Redis 的字符串值。下面以一张学生表为例,来讲解 String 类型的相关命令,如下表:

  1.1 设置键值对

  1.1.1 SET 命令:设置键值对

  命令格式:

127.0.0.1:6379> set key value [EX seconds] [PX milliseconds] [NX|XX]

  使用 SET 命令将字符串值 value 设置到 key 中。如果 key 中已经存在其他值,则在执行 SET 命令后,将会覆盖旧值,并且忽略类型。针对某个带有生存时间的 key 来说,当 SET 命令成功时,这个 key 上的生存时间会被清除。

  SET 命令的可选参数时下:

    • EX seconds:用于设置 key 的过期时间为多少秒(seconds)。其中,SET key value EX seconds 等价于 SETEX key seconds value。
    • PX milliseconds:用于设置 key 的过期时间为多少毫秒(milliseconds)。其中,SET key value PX milliseconds 等价于 PSETEX key milliseconds value。
    • NX:表示当 key 不存在时,才对 key 进行设置操作。其中,SET key value NX 等价于 SETNX key value。
    • XX:表示当 key 存在时,才对 key 进行设置操作。

  返回值:如果 SET 命令设置成功,则会返回 OK。如果设置了 NX 或 XX,但因为条件不足而设置失败,则会返回空批量回复(NULL Bulk Reply)。

stuName

stuID

age

sex

height

weight

birthday

className

刘河飞

2018001

22

171

75

1996-02-14

计算机科学与技术1班

赵雨梦

2018002

22

172

72

1996-03-15

软件工程2班

宋飞

2018003

23

175

73

1996-04-16

机械自动化1班

  使用 SET 命令将一条学生信息添加到数据库中,操作如下:

[root@localhost.localdomain current]#src/redis-cli -h 127.0.0.1 -p 6379 --raw
127.0.0.1:6379> set stuName-1 '刘河飞'
OK
127.0.0.1:6379> get stuName-1
刘河飞
127.0.0.1:6379> set stuID-1 2018001
OK
127.0.0.1:6379> get stuID-1
2018001
127.0.0.1:6379> set age-1 22
OK
127.0.0.1:6379> get age-1
22
127.0.0.1:6379> set sex-1 ''
OK
127.0.0.1:6379> get sex-1127.0.0.1:6379> set height-1 171
OK
127.0.0.1:6379> get height-1
171
127.0.0.1:6379> set weight-1 1996-02-14
OK
127.0.0.1:6379> get weight-1
1996-02-14
127.0.0.1:6379> set className '计算机科学与技术1班'
OK
127.0.0.1:6379> get className
计算机科学与技术1班
127.0.0.1:6379> 

  1.1.2 MSET 命令:设置多个键值对

  命令格式:

 127.0.0.1:6379> mset key value [key value ...] 

  使用 MSET 命令同时设置多个键值对。如果某个 key 已经存在,那么 MSET 命令会用新值覆盖旧值。MSET 命令是一个原子性操作,所有给定 key 都会在同一时间内被设置更新,不存在某些 key 被更新了而另一些 key 没有被更新的情况。

  返回值:总是返回 OK,因为 MSET 命令不可能设置失败。

  使用 SET 命令来逐个添加学生信息到数据库中比较麻烦,下面使用 MSET 命令来一次洗添加多个键值对,操作如下:

127.0.0.1:6379> MSET stuName-2 '赵雨梦' stuID-2 2018002 age-2 22 sex-1 '' height-2 172 weight-2 72 birthday-2 1996-03-15 className-2 '软件工程2班'
OK
127.0.0.1:6379> MSET stuName-3 '宋飞'   stuID-3 2018003 age-3 23 sex-1 '' height-3 175 weight-3 73 birthday-3 1996-04-16 className-3 '机械自动化1班'
OK

  1.1.3 SETNX 命令:设置不存在的键值对

  命令格式:

 127.0.0.1:6379> setnx key value 

  SETNX 是 set if not exists 的缩写。如果 key 不存在,则设置值,当且仅当 key 不存在时。如果 key 已经存在,则 SETNX 什么也不做。

  返回值:SETNX 命令设置成功返回 1,设置失败返回 0。

  设置学院名称,操作如下:

127.0.0.1:6379> SETNX collegeName '计算机学院'        #设置学院名称为 "计算机学院"
1
127.0.0.1:6379> SETNX collegeName '计算机工程学院'    #更名为 "计算机学院"
0
127.0.0.1:6379> get collegeName
计算机学院
127.0.0.1:6379> 

  1.1.4 MSETNX 命令:设置多个不存在的键值对

  命令格式:

 127.0.0.1:6379> MSETNX key value [key value ...] 

  使用 MSETNX 命令同时设置多个键值对,当且仅当所有给定 key 都不存在时设置。与 MSET 命令类似,如果有一个给定的 key 已存在,那么 MSETNX 命令也会拒绝执行给所有 key 的设置操作。MSETNX 命令是原子性的,它可以用来设置多个不同 key 表示不同字段的唯一性逻辑对象,所有字段要么全部被设置,要么全部设置失败。

  为学生分配多名专业课老师,操作如下:

127.0.0.1:6379> MSETNX Chinese-teacher '郭涛' Math-teacher '杨艳' English-teacher '吴芳'
1
127.0.0.1:6379> MSETNX Chinese-teacher '郭涛' Math-teacher '杨艳' English-teacher '吴芳'
0
127.0.0.1:6379> 

  1.2 获取键值对

  1.2.1 GET 命令:获取键值对的值

  命令格式:

 127.0.0.1:6379> get key 

  使用 GET 命令获取 key 中设置的字符串值。如果 key 中存储的值不是字符串类型的,则会返回一个错误,因为 GET 命令只能用于处理字符串的值;当 key 不存在时,返回 nil。

  返回值:当 key 存在时,返回 key 所对应的值;如果 key 不存在,则返回 nil;如果 key 不是字符串类型的,则返回错误。

  使用 GET 命令查看学生的基本信息,操作如下:

127.0.0.1:6379> GET stuName-1
刘河飞
127.0.0.1:6379> GET stuID-1
2018001
127.0.0.1:6379> GET stuID-10

127.0.0.1:6379> 

  1.2.2 MGET 命令:获取多个键值对的值

  命令格式:

 127.0.0.1:6379> mget key [key ...] 

  使用 MGET 命令同时返回多个给定的 key 的值,key 之间使用空格隔开。如果在给定的 key 中有不存在的key,那么这个 key 返回的值为 nil。

  返回值:一个包含所有给定 key 的值的列表

  使用 MGET 命令来获取多名学生的信息,操作如下:

127.0.0.1:6379> MGET stuName-2  stuID-2  age-2 sex-2 height-2  weight-2  birthday-2   className-2 
赵雨梦
2018002
22172
72
1996-03-15
软件工程2班
127.0.0.1:6379> 

  1.2.3 GETRANGE 命令:获取键的子字符串值

  命令格式:

 127.0.0.1:6379> getrange key start end 

  使用 GETRANGE 命令来获取 key 中字符串值从 start 开始到 end 结束的子字符串,下标从 0 开发(字符串截取)。start 和 end 参数是整数,可以取负值。当取负值时,表示从字符串最后开始计数,-1 表示最后一个字符,-2表示倒数第二个字符,以此类推。

  返回值:返回截取的子字符串。

set Mojito-jay '麻烦给我的爱人来一杯Mojito,我喜欢阅读她微醺时的眼眸,而我的咖啡糖不用太多,这世界已经因为她甜得过头'
127.0.0.1:6379> GETRANGE Mojito-jay 0 35
麻烦给我的爱人来一杯Mojito
127.0.0.1:6379> GETRANGE Mojito-jay -15 -1
她甜得过头
127.0.0.1:6379> GETRANGE Mojito-jay -36 -1
这世界已经因为她甜得过头

  1.3 键值对的偏移量

  1.2.3 SETBIT 命令:设置键的偏移量

  命令格式:

 127.0.0.1:6379> setbit key offset value 

  使用 SETBIT 命令对 key 所存储的字符串值设置或清除指定偏移量上的位(bit)。value 参数值决定了位的设置或清除,value 值取 0 或 1。当 key 不存在时,自动生成一个新的字符串。这个字符串是动态的,它可以扩展,以确保将 value 保存到指定的偏移量上。当这个字符串扩展时,使用 0 来填充空白位置。offset 参数必须是大于或等于 0,并且小于 2^32(bit 映射被限制在 512MB 之内)的正整数。在默认情况下,bit 初始化为 0。

  返回值:返回指定偏移量原来存储的位。

  设置学生 1 姓名及学院名的偏移量,操作如下:

  1.2.4 GETBIT 命令:获取键的偏移量值

  命令格式:

 127.0.0.1:6379> getbit key offset 

  对 key 所存储的字符串值,使用 GETBIT 命令来获取指定偏移量上的位(bit)。当 offset 的值超过了字符串的最大长度,或者 key 不存在时,返回 0。

  返回值:返回字符串值指定偏移量上的位(bit)。

  获取学生1姓名及学院命的偏移量值,操作如下:

127.0.0.1:6379> GETBIT stuName-1 6 
1
127.0.0.1:6379> GETBIT stuName-1 1
1
127.0.0.1:6379> GETBIT stuName-1 2
1
127.0.0.1:6379> GETBIT stuName-1 3
0
127.0.0.1:6379> GETBIT stuName-1 4
0
127.0.0.1:6379> GETBIT stuName-1 5
1
127.0.0.1:6379> get stuName-1
爘河飞
127.0.0.1:6379> getbit stuName-1 6
1
127.0.0.1:6379> getbit stuName-1 7
1
127.0.0.1:6379> 

  1.4 设置键的生存时间

   1.4.1 SETEX 命令:为键设置生存时间(秒)

  命令格式:

 127.0.0.1:6379> setex key seconds value 

  使用 SETEX 命令将 value 值设置到 key 中,并设置 key 的生存时间为多少秒(seconds)。如果 key 已经存在,则 SETEX 命令将覆写旧值。

它等价于:

set key value 
expire key seconds

  SETEX 命令是一个原子性命令,它设置 value 与设置生存时间是在同一个时间完成的。

  返回值:设置成功返回 OK;当 seconds 参数不合法时,返回错误。

  为不存在的键(学校名)设置生成时间,操作如下:

127.0.0.1:6379> setex schoolName 100 '清华大学'
OK
127.0.0.1:6379> get schoolName
清华大学
127.0.0.1:6379> time
1615962490
440289
127.0.0.1:6379> get schoolName
清华大学
127.0.0.1:6379> time
1615962522
252610
127.0.0.1:6379> get schoolName

127.0.0.1:6379> time
1615962590
824465
127.0.0.1:6379> 

   1.4.2 PSETEX 命令:为键设置生存时间(毫秒)

  命令格式:

  127.0.0.1:6379> psetex key milliseconds value 

  使用 PSETEX 命令设置 key 的生存时间,以毫秒为单位。设置成功时返回 OK。

  以毫秒的形式,设置键(学校地址)的生存时间,操作如下:

127.0.0.1:6379> psetex school-address 3000 '北京 '
OK
127.0.0.1:6379> GET school-address
北京 
127.0.0.1:6379> GET school-address
北京 
127.0.0.1:6379> GET school-address

127.0.0.1:6379> 

  1.5 键值对的值操作

  1.5.1 SETRANGE 命令:替换键的值

  命令格式:

 127.0.0.1:6379> setrange key offset value 

  使用 SETRANGE 命令从指定的位置(offset)开始将 key 的值替换为新的字符串。比如旧值为 hello world,执行命令 SETRANGE 5 Redis,表示从第5个下标位置开始替换我新的字符串 Redis,其结果为 helloredis。如果有不存在的 key,就当做空白字符串处理。

127.0.0.1:6379> setrange hello 5 redis
11
127.0.0.1:6379> get hello
helloredisd
127.0.0.1:6379> 

  注意:offset 的最大偏移量是 2^29-1(536870911),因为 Redis 字符串的大小被限制在 512 MB 以内。假如需要使用比这更大的空间,则可以使用多个 key 来存储。

  返回值:返回执行 SETRANGE 命令之后的字符串的长度。

  替换Mojito-jav的value,操作如下:

127.0.0.1:6379> get Mojito-jay
麻烦给我的爱人来一杯Mojito,我喜欢阅读她微醺时的眼眸,而我的咖啡糖不用太多,这世界已经因为她甜得过头
127.0.0.1:6379> SETRANGE Mojito-jay 6 '宝贝'
141
127.0.0.1:6379> get Mojito-jay
麻烦宝贝的爱人来一杯Mojito,我喜欢阅读她微醺时的眼眸,而我的咖啡糖不用太多,这世界已经因为她甜得过头
127.0.0.1:6379> 

  1.5.2 GETSET 命令:为键设置新值

  命令格式:

 127.0.0.1:6379> getset key value 

  使用 GETSET 命令将给定义 key 的值设置为 value,并返回 key 的旧值。当 key 存在但不是字符串类型时,将会返回错误。

127.0.0.1:6379> EXISTS motto-1
0
127.0.0.1:6379> GETSET motto-1 '女人只会影响我拔剑的速度'

127.0.0.1:6379> GET motto-1
女人只会影响我拔剑的速度
127.0.0.1:6379> GETSET motto-1 '女人只会影响我拔剑的速度,但富婆不会'
女人只会影响我拔剑的速度

  1.5.3 APPEND命令:为键追加值

  命令格式:

 127.0.0.1:6379> append key value 

  如果 key 存在且是字符串类型的,则将 value 值追加到 key 旧值的末尾。如果 key 不存在,则将 key 设置值为 value。

  返回值:返回追加 value 之后,key 中字符串的长度。

  为 Mojito-jay 追加新值,操作如下:

127.0.0.1:6379> EXISTS Mojito-jay
1
127.0.0.1:6379> GET Mojito-jay
麻烦宝贝的爱人来一杯Mojito,我喜欢阅读她微醺时的眼眸,而我的咖啡糖不用太多,这世界已经因为她甜得过头
127.0.0.1:6379> APPEND Mojito-jay '就别浪费时间介绍收起来吧,拱廊的壁画 旧城的涂鸦,所有色彩都因为她说不出话,这爱不落幕 忘了心事的国度,你所在之处 孤单都被征服,铁铸的招牌 错落着就像,一封封城市 献给天空的情书'
401
127.0.0.1:6379> GET Mojito-jay
麻烦宝贝的爱人来一杯Mojito,我喜欢阅读她微醺时的眼眸,而我的咖啡糖不用太多,这世界已经因为她甜得过头就别浪费时间介绍收起来吧,拱廊的壁画 旧城的涂鸦,所有色彩都因为她说不出话,这爱不落幕 忘了心事的国度,你所在之处 孤单都被征服,铁铸的招牌 错落着就像,一封封城市 献给天空的情书
127.0.0.1:6379> 

  1.6 键值对的计算

  1.6.1 BITCOUNT 命令:计算比特位数量

  命令格式:

 127.0.0.1:6379> bitcount key [start end] 

  使用 BITCOUNT 命令计算在给定的字符串中被设置为 1 的比特位数量。它有两个参数:start 和 end。如果不设置这两个参数,则表示它会对整个字符串进行计数;如果指定了这两个参数值,则可以让计数只在特定的位上进行。start 和 end 参数都是整数值,可以取负数,比如,-1 表示字符串的最后一个字节,-2 表示字符串的倒数第二个字节,以此类推。如果被计数的 key 不存在,就会被当成空字符串来处理,其计数结果为 0 。

  计算学生3姓名的比特位数量,操作如下:

127.0.0.1:6379> get stuName

127.0.0.1:6379> get stuName-3
宋飞
127.0.0.1:6379> bitcount stuName-3          #计算学生3姓名的比位数量,为28
28
127.0.0.1:6379> bitcount stuName-3 0 4      #计算学生3姓名在 0~4 之间的比特位数量
23
127.0.0.1:6379> bitcount stuName-3 0 27
28
127.0.0.1:6379> bitcount stuName-3 0 26
28
127.0.0.1:6379> bitcount stuName-3 0 24
28
127.0.0.1:6379> bitcount stuName-3 0 23    
28
127.0.0.1:6379> setbit stuName-3 100 1      #设置学生3姓名在偏移量为100 处的比特位
0
127.0.0.1:6379> bitcount stuName-3 0 23     #28+1
29
127.0.0.1:6379> 

  1.6.2 BITOP命令:对键进行位元运算

  命令格式:

 127.0.0.1:6379> bitop operation destkey key [key ...] 

  使用 BITOP 命令对一个或多个保存二进制位的字符串 key 进行位元运算,并将运算结果保存到 destkey 中。operation 表示位元操作符,它可以是 AND、OR、NOT、XOR 这 4 种操作种的任意一种。具体操作如下:

    • 127.0.0.1:6379> bitop and destkey key [key ...]:表示对一个或多个 key 求逻辑并,并将结果保存到 destkey 中。
    • 127.0.0.1:6379> bitop or destkey key [key ...]:表示对一个或多个 key 求逻辑或,并将结果保存到 destkey 中。
    • 127.0.0.1:6379> bitop not destkey key [key ...]:表示对给定 key 求逻辑非,并将结果保存到 destkey 中。
    • 127.0.0.1:6379> bitop xor destkey key [key ...]:表示对一个或多个 key 求逻辑异或,并将结果保存到 destkey 中。

  除 NOT 操作之外,其余的操作都可以接收一个或多个 key 作为参数。当使用 BITOP 命令来进行不同长度的字符串的位元运算时,较短的那个字符串所缺少的部分将会被看作 0。空的 key 也被看作包含 0 的字符串序列。

  返回值:返回保存到 destkey 中的字符串的长度,这个长度和输入 key 中最长的字符串的长度相等。

  1.6.3 STRLEN 命令:统计键的值的字符长度

  命令格式:

 127.0.0.1:6379> strlen key 

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

  统计 Mojito-jay 的长度,操作如下:

127.0.0.1:6379> STRLEN Mojito-jay
401
127.0.0.1:6379> get Mojito-jay
麻烦宝贝的爱人来一杯Mojito,我喜欢阅读她微醺时的眼眸,而我的咖啡糖不用太多,这世界已经因为她甜得过头就别浪费时间介绍收起来吧,拱廊的壁画 旧城的涂鸦,所有色彩都因为她说不出话,这爱不落幕 忘了心事的国度,你所在之处 孤单都被征服,铁铸的招牌 错落着就像,一封封城市 献给天空的情书
127.0.0.1:6379> 

  1.7 键值对的值增量

  1.7.1 DECR 命令:让键的值减 1

  命令格式:

 127.0.0.1:6379> decr key 

  使用 DECR 命令将 key 中存储的数字值减 1.如果 key 不存在,则 key 的值先被初始化为 0,再执行 DECR 操作减 1。注意,这个命令只能对数字类型的数据进行操作(自减)。如果 key 对应的值包含错误类型,或者字符串类型的值不能表示为数字,则将返回一个错误。DECR 操作的值限制在 64 位(bit)有符号数字表示范围之内。

  返回值:返回执行 DECR 操作之后 key 的值。

  1.7.2 DECRBY 命令:键的值减去减量值

  命令格式:

 127.0.0.1:6379> decrby key decrement 

  使用 DECRBY 命令将 key 所存储的值减去减量值 decrement。如果 key 不存在,则 key 的值先被初始化为 0,再执行 DECRBY 命令。如果 DECRBY 命令操作的值包含错误的类型,或者字符串类型的值不能表示为数字,则将返回一个错误。DECRBY 操作的数值限制在 64位(bit)有符号数字表示范围之内。

  返回值:返回减去减量值 decrement 的 key 的新值。

 

posted @ 2021-03-17 11:15  左扬  阅读(206)  评论(0编辑  收藏  举报
levels of contents