redis有多种数据类型,string是一种很常用的数据类型。
redis给string类型提供了多种方法,下面对常用的方法进行介绍
string提供了很多方法,常见的方法有,set,get,mset,mget,msetnx,psetnx,setex,setnx,append,decr,decrby,incr,incrby,incrbyfloat,getrange,getset,setrange,strlen等。
下面将分两次介绍这些常见方法的使用。
set 设置字符串的内容,语法格式为set key value
127.0.0.1:6379> set string1 value
OK
这里表示设置一个名称为string1,值为value的字符串,ok表示字符串设置成功
如果要设置的字符串为多个单词或者一个句子,需要使用引号把要设置的内容引起来
127.0.0.1:6379> set sentence "This is a sentence" OK
如果不使用引号引起来,会返回错误
127.0.0.1:6379> set sentence2 This is a sentence (error) ERR syntax error
使用的时候需要特别注意。
get 获取字符串的内容,格式为 get key
127.0.0.1:6379> get sentence "This is a sentence"
mset 设置多个字符串的值,格式为 mset string1 value1 string2 value2 string3 value 3
127.0.0.1:6379> mset string1 value1 string2 value2 string3 value3 string4 value4 OK
mget获取多个字符串的值 格式为 mget string1 string2 string3 string4
127.0.0.1:6379> mget string1 string2 string3 string4 1) "value1" 2) "value2" 3) "value3" 4) "value4"
mset和mget都属于批量操作。
setnx 全写是set if not exists,翻译成中文就是如果不存在就进行值写入。
127.0.0.1:6379> setnx string1 newvalue (integer) 0 127.0.0.1:6379> get string1 "value1" 127.0.0.1:6379> setnx string10 value10 (integer) 1 127.0.0.1:6379> get string10 "value10"
可以看到给string1设置值是没有成功的,因为string1这个可以已经存在,前面已经设置过值了,string10设置值是成功的,因为string10在redis中是不存在的key。返回的0代表key已经存在,1代表key不存在。
msetnx和setnx的用法是一样的,区别是msetnx,可以处理多个key。
格式为 msetnx key1 value1 key2 value2 key3 value3
127.0.0.1:6379> msetnx stirng1 newvalue string5 value5 string6 value6 string7 value7 string10 value10 (integer) 0 127.0.0.1:6379> get string5 (nil) 127.0.0.1:6379> get string6 (nil)
从运行的结果可以看出都没有设置值成功,因为msetnx如果有一个可以是已经存在的,那么整个语句视为所有的key都是存在的。
getset 会返回key设置之前的值,格式为 getset key value
127.0.0.1:6379> getset string1 newvalue "value1" 127.0.0.1:6379> get string1 "newvalue"
可以看到执行getset命令后返回了设置前的值,然后在获取string1的值,发现string1已经是新的值了。
redis中保存的数据是可以设置有效期的,根据实际的情况我们会设置redis中存储的数据是永久保存还是临时保存。可以使用setex或者psetex来对可以的保存时长进行处理
setex 设置键以保留字符串值,并将键设置为在给定的秒数后超时。等同于set命令和expire命令的组合,expire命令会在后面介绍。
格式为setex key time value
127.0.0.1:6379> setex stringex 10 "expire after 10s" OK 127.0.0.1:6379> ttl stringex (integer) 1
ttl命令可以查看key有效期还有多少秒,后面介绍
psetex命令和setex命令比较相似,不同的是psetex设置的过期时间是毫秒。格式为psetex key time value
127.0.0.1:6379> psetex stringpex 1000000 "expire after 1000000ms" OK 127.0.0.1:6379> ttl stringpex (integer) 992
setrange 从值的指定长度开始,覆盖指定位置处从key存储的字符串的一部分,也就是字符串替换。格式为setrange key offset value
127.0.0.1:6379> get string1 "newvalue" 127.0.0.1:6379> 127.0.0.1:6379> 127.0.0.1:6379> 127.0.0.1:6379> setrange string1 3 abc (integer) 8 127.0.0.1:6379> get string1 "newabcue"
计算开始的位置从0开始,上面的例子意思就是把string1的值从第四个位置开始替换,发现val变成了abc这个字符串
127.0.0.1:6379> set string aaaaaaaaaaaaaaaaaaaaaaa OK 127.0.0.1:6379> setrange string 22 def (integer) 25 127.0.0.1:6379> get string "aaaaaaaaaaaaaaaaaaaaaadef"
这个例子可以看出,字符串被延长了,定义了string,长度是23,然后从最后一位开始替换,redis会把要替换的字符串自动延长。
getrange 返回存储在key处的字符串值的子字符串,该字符串由偏移量start和end(包括两端)确定。可以使用负偏移量来提供从字符串末尾开始的偏移量。因此-1表示最后一个字符,-2表示倒数第二个,依此类推。格式为 getrange key start end
127.0.0.1:6379> set ranges abcdefghijklmn OK 127.0.0.1:6379> getrange ranges 0 5 "abcdef" 127.0.0.1:6379> getrange ranges 1 5 "bcdef" 127.0.0.1:6379> getrange ranges 0 -1 "abcdefghijklmn"