redis学习笔记(二)之字符串类型命令

字符串类型

  字符串类型是redis中最基本的数据类型,他能存储任何形式的字符串,包括二进制数据。一个字符串类型键允许的数据的最大容量是512MB。

命令

SETGET

类似于读和写变量

1
2
3
4
5
6
7
SET key value [EX seconds] [PX milliseconds] [NX|XX]
GET key
SET命令的参数:
EX seconds:以**秒**为单位设置键的key过期时间
PX millinseconds:以**毫秒**为单位设置过期时间
NX :只有键不存在的时候才可以设置成功
XX:只有键在已经存在的时候才可以设置成功

  举例:

1
2
3
4
5
6
7
8
9
10
11
12
127.0.0.1:6379> SET test1 "hello"
OK
127.0.0.1:6379> GET test1
"hello"
127.0.0.1:6379> GET test2
(nil)
//当GET 一个不存在的键会返回空结果。
127.0.0.1:6379> SET test1 "hello world"
OK
127.0.0.1:6379> GET test1
"hello world"
//多次SET同一个键时,键值会被覆盖。

GETRANGE

  用于获取存储在键的字符串值的子字符串,由偏移量的开始和结束(两者都包括)确定。可以使用负偏移,以便从字符串的末尾开始计算偏移

1
GETRANGE KEY_NAME start end

  举例:

1
2
3
4
5
6
127.0.0.1:6379> GETRANGE test1 0 4
"hello"
127.0.0.1:6379> GETRANGE test1 0 -1
"hello world"
127.0.0.1:6379> GETRANGE test1 6 -1
"world"

GETSET

  在Redis键中设置指定的字符串值,并返回其旧值,不存在返回空结果。

1
GETSET key value

  举例:

1
2
3
4
127.0.0.1:6379> GETSET test2 "first GETSET"
(nil)
127.0.0.1:6379> GETSET test2 "second GETSET"
"first GETSET"

MGET 和 MSET

  MGET命令用于获取所有指定键的值。对于不包含字符串值或不存在的每个键,返回空结果
  MSET命令用于一次多个键设置它们的值。

1
2
MGET key [key ...]
MSET key value [key value ...]

  举例:

1
2
3
4
5
6
7
127.0.0.1:6379> MSET test3 "hello" test4 "world" test5 "!!!"
OK
127.0.0.1:6379> MGET test3 test4 test5 test6
1) "hello"
2) "world"
3) "!!!"
4) (nil)    //不存在的键返回空结果

STRLEN

  用于获取存储在键中的字符串值的长度。当键包含非字符串值时返回错误

1
STRLEN key

  举例:

1
2
3
4
5
127.0.0.1:6379> STRLEN test5
(integer) 3
127.0.0.1:6379> STRLEN test6
(integer) 0
//不存在的键返回整数0

SETRANGE

  命令用于覆盖键的值,从指定偏移处开始的一部分字符串,返回字符串在修改后的长度。

1
SETRANGE key offset value

  举例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
127.0.0.1:6379> GET test1
"hello redis"
127.0.0.1:6379> SETRANGE test1 6 "ubuntu"
(integer) 12
127.0.0.1:6379> GET test1
"hello ubuntu"

127.0.0.1:6379> GETSET test1 "abc"
"hello ubuntu"
127.0.0.1:6379> SETRANGE test1 4 "def"
(integer) 7
127.0.0.1:6379> GET test1
"abc\x00def"
//如果设置的key原来的字符串长度要比偏移量小,就会以零字节(\x00)来补充

SETNX

  命令用于在Redis键中设置某些字符串值(如果该键在Redis中不存在)。如果不存在,则SETNX的全形式是SET。

1
2
SETNX key value
//等价于 SET key value NX

  举例:

1
2
3
4
5
6
7
8
9
10
11
127.0.0.1:6379> EXISTS test6        //测试键是否存在,存在返回整数1,否则返回0
(integer) 0
127.0.0.1:6379> SETNX test6 "test6 is not exists"
(integer) 1         //设置成功
127.0.0.1:6379> GET test6
"test6 is not exists"

127.0.0.1:6379> EXISTS test5
(integer) 1
127.0.0.1:6379> SETNX test "test5 is exists"
(integer) 0     //test5设置设置失败

SETEX

  命令用于在Redis键中的指定超时,设置键的字符串值。
  SETEX是原子操作,相当于执行了SET键值又对key设置了过期时间。

1
2
SETEX key seconds value
//等价于 SET key value EX seconds

  举例:

1
2
3
4
5
6
127.0.0.1:6379> SETEX test1 30 "thirty"
OK
127.0.0.1:6379> TTL test1   //查看键的生存时间,test1已过期
(integer) -2
127.0.0.1:6379> GET test1  
(nil)

MSETNX

  用于为多个键设置多个值(仅当在键都不存在时)。如果当前操作中有任何一个存在于Redis中,那么MSETNX不执行任何操作。

1
MSETNX key value [key value ...]

  举例:

1
2
3
4
5
6
7
8
9
10
127.0.0.1:6379> MSETNX test7 "7" test8 "8"
(integer) 1     //返回1设置成功
127.0.0.1:6379> MGET test7 test8
1) "7"
2) "8"
127.0.0.1:6379> MSETNX test8 "8" test9 "9"
(integer) 0
127.0.0.1:6379> MGET test8 test9
1) "8"
2) (nil)        //test9设置失败

PSETEX

  命令用于设置键的值,以毫秒为单位指定过期时间

1
2
PSETEX key milliseconds value
//等价于 SET key value PX milliseconds

  举例:

1
2
3
4
5
6
127.0.0.1:6379> PSETEX test9 2000 "millinseconds"
OK
127.0.0.1:6379> PTTL test9  //PTTL获得毫秒级的生存时间
(integer) 624  
127.0.0.1:6379> GET test9
(nil)

INCR

  命令用于将键的整数值递增1。如果键不存在,则在执行操作之前将其设置为0。如果键包含错误类型的值或包含无法表示为整数的字符串,则会返回错误。此操作限于64位有符号整数。

1
INCR key

  举例:

1
2
3
4
5
6
127.0.0.1:6379> INCR counter    //如果key不存在,先初始化为0,在进行INCR操作
(integer) 1
127.0.0.1:6379> INCR counter
(integer) 2
127.0.0.1:6379> INCR counter
(integer) 3

INCRBY

  用于将存储在键上的数字按指定的值增加。 如果键不存在,则在执行操作之前将其设置为0。如果键包含错误类型的值或包含无法表示为整数的字符串,则会返回错误。

1
INCRBY key increment

  举例:

1
2
3
4
127.0.0.1:6379> GET counter
"3"
127.0.0.1:6379> INCRBY counter 10
(integer) 13

INCRBYFLOAT

  用于将递增的字符串表示为浮点数,该值存储在键上指定的增量。 如果键不存在,则在执行操作之前将其设置为0。 如果键包含错误类型的值或当前键内容或指定的增量不能解析为浮点数,则返回错误。
支持小数点往后17位的运算操作

1
INCRBYFLOAT key increment

  举例:

1
2
3
4
127.0.0.1:6379> INCRBYFLOAT linux 1
"1"
127.0.0.1:6379> INCRBYFLOAT linux 0.012345678901234567890123456789
"1.01234567890123457"

DECR

  用于将键的整数值减1。 如果键不存在,则在执行操作之前将其设置为0。 如果键包含错误类型的值或包含无法表示为整数的字符串,则会返回错误。 此操作限于64位有符号整数。

1
DECR key

  举例:

1
2
3
4
5
6
127.0.0.1:6379> DECR counter
(integer) -1
127.0.0.1:6379> DECR counter
(integer) -2
127.0.0.1:6379> DECR counter
(integer) -3

DECRBY

  将存储在键上的数字按指定的值减少。如果键不存在,则在执行操作之前将其设置为0。 如果键包含错误类型的值或包含无法表示为整数的字符串,则会返回错误。

1
DECRBY key decrement

  举例:

1
2
3
4
127.0.0.1:6379> DECRBY counter -10
(integer) 7
127.0.0.1:6379> DECRBY counter -10
(integer) 17

APPEND

  命令用于在键中添加一些值。返回追加后的字符串长度。

1
APPEND key value

  举例:

1
2
3
4
5
6
127.0.0.1:6379> SET say hello
OK
127.0.0.1:6379> APPEND say " world"
(integer) 11
127.0.0.1:6379> GET say
"hello world"

GETBIT

  可以获得一个字符串类型指定位置的二进制位的值(0或1),索引以0开始。

1
GETBIT key offset

  举例:

1
2
3
4
5
6
127.0.0.1:6379> SET foo bar //bar的二进制表示如下表
OK
127.0.0.1:6379> GETBIT foo 0    //下标为0的位值为0
(integer) 0
127.0.0.1:6379> GETBIT foo 6    //下标为6的位值为1
(integer) 1

  bar的二进制表示如下:

b a r
01100010 01100001 01110010

SETBIT

  设置字符串类型键指定位置的二进制位的值,返回该位置的旧值。

1
SETBIT key offset value

  举例:

1
2
3
4
5
6
127.0.0.1:6379> SETBIT foo 6 0
(integer) 1
127.0.0.1:6379> SETBIT foo 7 1
(integer) 0
127.0.0.1:6379> GET foo
"aar"

  将b的二进制码01100010的下标第6和第7位分别置为0和1,得到01100001是a的ASCLL码。

BITOP

  可以对多个字符串类型键进行位运算,并将结果存在destkey参数规定的键中。
  BITOP命令支持的运算操作有AND、OR、XOR和NOT

1
BITOP operation destkey key [key ...]

  举例:

1
2
3
4
127.0.0.1:6379> BITOP XOR res foo foo
(integer) 3
127.0.0.1:6379> GET res
"\x00\x00\x00"

  两个相同的值做异或运算结果为0。

BITPOS

  获得指定键的第一个位值是0或者1的位置。

1
2
BITPOS key bit [start] [end]
//start 和 end 位置以字节为单位

  举例:

1
2
3
4
127.0.0.1:6379> BITPOS foo 1    //第一个值为1的位下标为1
(integer) 1
127.0.0.1:6379> BITPOS foo 1 1 2    //下标为1到2的字节中,第一个值为1的下标为整个键值的第9位
(integer) 9
Donate comment here