zoukankan      html  css  js  c++  java
  • 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
    "xe4xbdxa0xe4xbbxacxe7x9ax84xe8x83x83xe5x8fxabxe8x83x83xefxbcx8cxe5xadxa4xe7x9ax84xe5x8fxabxe8x83x83PLUS"
    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 的新值。

  • 相关阅读:
    Asp.Net MVC 体验 1
    myisamchk命令进行崩溃恢复Myisam数据表
    nginx 全局变量
    centos开机启动项设置命令:chkconfig
    redis info 参数说明
    PHP中Imagick的使用
    查看当前nginx、mysql的连接数
    wget参数及用法
    编辑器与IDE
    广州求职,工作经验>5.期待伯乐
  • 原文地址:https://www.cnblogs.com/zuoyang/p/14548262.html
Copyright © 2011-2022 走看看