我们知道Redis常用的数据类型有五种:String(字符串)、Hash(哈希)、List(列表)、Set(集合)、Zset(有序集合)。今天就过一遍String相关的命令。
string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value,string 类型的值最大能存储 512MB。
string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。
使用String命令,跟KEYS命令的语法一样,都是COMMAND key_name。常用的命令如下:
1、SET key value:创建一个key,并制定key的值为value
127.0.0.1:6379> SET runkey redis
OK
2、GET key:获取指定 key 的值
127.0.0.1:6379> GET runkey
"redis"
3、GETRANGE key start end:返回 key 中字符串值的子字符
这里要注意的是,该命令跟我们java里的substring有点不一样,这里假设字符串的长度为length,从左到右的下标和我们常用的一样,就是0到length-1;但是该命令可以反过来截取字符串,从右到左的下标为-1到-length。我们以刚才创建的runkey为例,GETRANGE runkey 0 4 和GETRANGE runkey 0 -1,返回的结果应该都是“redis”。
127.0.0.1:6379> GET runkey
"redis"
127.0.0.1:6379> GETRANGE runkey 0 4
"redis"
127.0.0.1:6379> GETRANGE runkey 0 -1
"redis"
4、GETSET key value:将给定 key 的值设为 value ,并返回 key 的旧值(old value)
我们给刚才的runkey的value修改为“mongodb”:
127.0.0.1:6379> GET runkey
"redis"
127.0.0.1:6379> GETSET runkey mongodb
"redis"
127.0.0.1:6379> GET runkey
"mongodb"
5、GETBIT key offset:对 key 所储存的字符串值,获取指定偏移量上的位(bit)
当偏移量 OFFSET 比字符串值的长度大,或者 key 不存在时,返回 0 。
127.0.0.1:6379> EXISTS bit
(integer) 0
127.0.0.1:6379> GETBIT bit 1
(integer) 0
127.0.0.1:6379> GET runkey
"mongodb"
127.0.0.1:6379> GETBIT runkey 100
(integer) 0
127.0.0.1:6379> GETBIT runkey 10
(integer) 1
6、MGET key1 [key2...]:获取所有(一个或多个)给定 key 的值
一次获取多个key,如果该key不存在,则返回 (nil)
127.0.0.1:6379> SET mykey redis
OK
127.0.0.1:6379> SET runkey mysql
OK
127.0.0.1:6379> MGET mykey runkey ttkey
1) "redis"
2) "mysql"
3) (nil)
7、SETBIT key offset value:对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)
1)、这个偏移量是按二进位制从左到右,而且是从下标0开始的,按如下命令,设置一个值为“hello”的key。'h'的二进制为 0110 1000,此时把下标为2的位数改为0,则返回的二进制为 '0100 1000',所以这是GET到的值为“Hello”;(这里讲的可能不太对,但是实测确实是这样,如果有大佬看出有问题,请指正,感谢)。
2)、指定的value的值只能位0或者1,下面代码value输入2,然后就报错了。
127.0.0.1:6379> SET bitk hello
OK
127.0.0.1:6379> GET bitk
"hello"
127.0.0.1:6379> SETBIT bitk 2 0
(integer) 1
127.0.0.1:6379> GET bitk
"Hello"
127.0.0.1:6379> SETBIT bitk 2 2
(error) ERR bit is not an integer or out of range
8、SETEX key seconds value:将值 value 关联到 key ,并将 key 的过期时间设为 seconds 秒
这个命令就相当于:SET key value加 EXPIRE key seconds
127.0.0.1:6379> SETEX mykey 120 mongodb
OK
127.0.0.1:6379> GET mykey
"mongodb"
127.0.0.1:6379> TTL mykey
(integer) 109
9、SETNX key value:只有在 key 不存在时设置 key 的值
我们看到以下命令,当mykey存在时,执行SETNX命令,并没有改变mykey的值。
127.0.0.1:6379> SET mykey redis
OK
127.0.0.1:6379> GET mykey
"redis"
127.0.0.1:6379> SETNX mykey mysql
(integer) 0
127.0.0.1:6379> GET mykey
"redis"
127.0.0.1:6379> SETNX amkey mongodb
(integer) 1
127.0.0.1:6379> GET amkey
"mongodb"
10、SETRANGE key offset value:用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset开始
127.0.0.1:6379> SET key1 'hello world'
OK
127.0.0.1:6379> GET key1
"hello world"
127.0.0.1:6379> SETRANGE key1 6 redis
(integer) 11
127.0.0.1:6379> GET key1
"hello redis"
11、STRLEN key:返回 key 所储存的字符串值的长度
127.0.0.1:6379> GET key1
"hello redis"
127.0.0.1:6379> STRLEN key1
(integer) 11
12、MSET key value [key value...]:同时设置一个或多个 key-value 对
(integer) 11
127.0.0.1:6379> MSET mk1 mr mk2 miss mk3 ccc
OK
127.0.0.1:6379> MGET mk1 mk2 mk3
1) "mr"
2) "miss"
3) "ccc"
13、MSETNX key value [key value...]:当key不存在时,同时设置一个或多个 key-value 对
127.0.0.1:6379> MGET mkk1 mkk2 mk3
1) (nil)
2) (nil)
3) "ccc"
127.0.0.1:6379> MSETNX mkk1 m1 mkk2 m2 mk3 fff
(integer) 0
127.0.0.1:6379> MGET mkk1 mkk2 mk3
1) (nil)
2) (nil)
3) "ccc"
我们看到上述命令,有一个mk3存在时,导致创建另外两个key失败,所以只有当所有的key不存在时,MSETNX才能创建成功。
127.0.0.1:6379> MGET mkk1 mkk2
1) (nil)
2) (nil)
127.0.0.1:6379> MSETNX mkk1 mmr mkk2 mmiss
(integer) 1
127.0.0.1:6379> MGET mkk1 mkk2
1) "mmr"
2) "mmiss"
14、PSETEX key milliseconds value:这个命令和 SETEX 命令相似,区别就是以毫秒为单位设置 key 的生存时间。
该命令相当于SET key value加 PEXPIRE key milliseconds
127.0.0.1:6379> PSETEX pk1 60000 pkone
OK
127.0.0.1:6379> GET pk1
"pkone"
127.0.0.1:6379> PTTL pk1
(integer) 49486
15、INCR key或DECR key:将 key 中储存的数字值加1或减1
127.0.0.1:6379> SET kk1 100
OK
127.0.0.1:6379> INCR kk1
(integer) 101
127.0.0.1:6379> DECR kk1
(integer) 100
16、INCRBY key increment或DECRBY key increment:将 key 所储存的值加上给定的增量值或减量值
127.0.0.1:6379> GET kk1
"100"
127.0.0.1:6379> INCRBY kk1 10
(integer) 110
127.0.0.1:6379> DECRBY kk1 9
(integer) 101
17、INCRBYFLOAT key increment:将 key 所储存的值加上给定的浮点增量值
127.0.0.1:6379> SET kk2 10
OK
127.0.0.1:6379> GET kk2
"10"
127.0.0.1:6379> INCRBYFLOAT kk2 2.5
"12.5"
18、APPEND key value:如 APPEND 命令将指定的 value 追加到该 key 原来值(value)的末尾
127.0.0.1:6379> GET kk3
(nil)
127.0.0.1:6379> APPEND kk3 123
(integer) 3
127.0.0.1:6379> GET kk3
"123"
127.0.0.1:6379> APPEND kk3 abc
(integer) 6
127.0.0.1:6379> GET kk3
"123abc"
Redis字符串及其相关的常用命令就介绍到这里,都是一些很简单的命令,你学废了吗?