redis数据类型之string-set get讲解

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" 

发表评论

邮箱地址不会被公开。 必填项已用*标注