Redis-String有关命令
文章目录
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、String字符串是什么?
字符串类型是Redis最基础的数据类型,关于字符串需要特别注意:
1.⾸先Redis中所有的键的类型都是字符串类型,⽽且其他⼏种数据结构也都是在字符串类似基础上构建的,例如列表和集合的元素类型是字符串类型,所以字符串类型能为其他4种数据结构的学习奠定基础。
2.其次,字符串类型的值实际可以是字符串,包含⼀般格式的字符串或者类似JSON、XML格式的字符串;数字,可以是整型或者浮点型;甚⾄是⼆进制流数据,例如图⽚、⾳频、视频等。不过⼀个字符串的最⼤值不能超过512MB。
二、String基本命令操作
1.set操作
set:将string类型的value设置到key中。如果key之前存在,则覆盖,⽆论原来的数据类型是什么。之前关于此key的TTL也全部失效。
命令有效版本:1.0.0之后
时间复杂度:O(1)
选项:
set命令⽀持多种选项来影响它的⾏为:
• ex seconds 使⽤秒作为单位设置key的过期时间。
• px milliseconds 使⽤毫秒作为单位设置key的过期时间。
• nx ⸺⸺只在key不存在时才进⾏设置,即如果key之前已经存在,设置不执⾏。
• xx ⸺⸺只在key存在时才进⾏设置,即如果key之前不存在,设置不执⾏。
注意:由于带选项的set命令可以被setnx 、 setex 、 psetex 等命令代替,所以之后的版本中,Redis可能进⾏合并。
返回值:
• 如果设置成功,返回OK。
• 如果由于set指定了nx或者xx但条件不满⾜,set不会执⾏,并返回(nil)。
语法:set key value [expiration ex seconds|px milliseconds] [nx|xx]
redis> exists mykey
(integer) 0
redis> set mykey "Hello"
OK
redis> get mykey
"Hello"
redis> set mykey "World" nx
(nil)
redis> del mykey
(integer) 1
redis> exists mykey
(integer) 0
redis> set mykey "World" xx
(nil)
redis> get mykey
(nil)
redis> set mykey "World" nx
OK
redis> get mykey
"World"
redis> set mykey "Will expire in 10s" ex 10
OK
redis> get mykey
"Will expire in 10s"
redis> get mykey # 10秒之后
(nil)
2.get操作
获取key对应的value。如果key不存在,返回nil。如果value的数据类型不是string,会报错。
命令有效版本:1.0.0之后
时间复杂度:O(1)
返回值:key对应的value,或者nil,当key不存在。
语法:get key
代码如下(示例):
redis> get nonexisting
(nil)
redis> set mykey "Hello"
"OK"
redis> get mykey
"Hello"
redis> del mykey
(integer) 1
redis> exists mykey
(integer) 0
redis> hset mykey name Bob
(integer) 1
redis> get mykey
(error) WRONGTYPE Operation against a key holding the wrong kind of value
3.mget操作
⼀次性获取多个key的值。如果对应的key不存在或者对应的数据类型不是string,返回nil。
命令有效版本:1.0.0之后
时间复杂度:O(N) N是key数量
返回值:对应value的列表
语法: mget key [key …]
代码如下(示例):
redis> set key1 "Hello"
"OK"
redis> set key2 "World"
"OK"
redis> mget key1 key2 nonexisting
1) "Hello"
2) "World"
3) (nil)
4.mset操作
⼀次性设置多个key的值。
命令有效版本:1.0.1之后
时间复杂度:O(N) N是key数量
返回值:永远是OK
语法: mset key value [key value …]
代码如下(示例):
redis> mset key1 "Hello" key2 "World"
"OK"
redis> get key1
"Hello"
redis> get key2
"World"
5.setnx操作
设置key-value但只允许在key之前不存在的情况下。
命令有效版本:1.0.0之后
时间复杂度:O(1)
返回值:1表⽰设置成功。0表⽰没有设置。
语法:setnx key value
代码如下(示例):
redis> setnx mykey "Hello"
(integer) 1
redis> setnx mykey "World"
(integer) 0
redis> get mykey
"Hello"
set、setnx和setxx的执⾏流程如图所⽰。
6.incr操作
将key对应的string表⽰的数字加⼀。如果key不存在,则视为key对应的value是0。如果key对应的string不是⼀个整型或者范围超过了64位有符号整型,则报错。
命令有效版本:1.0.0之后
时间复杂度:O(1)
返回值:integer类型的加完后的数值。
语法: incr key
代码如下(示例):
redis> exists mykey
(integer) 0
redis> incr mykey
(integer) 1
redis> set mykey "10"
"OK"
redis> incr mykey
(integer) 11
redis> set mykey "234293482390480948029348230948"
"OK"
redis> incr mykey
(error) value is not an integer or out of range
redis> set mykey 'not a number'
"OK"
redis> incr mykey
(error) value is not an integer or out of range
7.incrby操作
将key对应的string表⽰的数字加上对应的值。如果key不存在,则视为key对应的value是0。如果key对应的string不是⼀个整型或者范围超过了64位有符号整型,则报错。(decr和decyby也类似)
命令有效版本:1.0.0之后
时间复杂度:O(1)
返回值:integer类型的加完后的数值。
语法: incrby key decrement
代码如下(示例):
redis> exists mykey
(integer) 0
redis> incrby mykey 3
(integer) 3
redis> set mykey "10"
"OK"
redis> incrby mykey 3
(integer) 13
redis> incrby mykey "not a number"
(error) ERR value is not an integer or out of range
redis> set mykey "234293482390480948029348230948"
"OK"
redis> incrby mykey 3
(error) value is not an integer or out of range
redis> set mykey 'not a number'
"OK"
redis> incrby mykey 3
(error) value is not an integer or out of range
8.append操作
如果key已经存在并且是⼀个string,命令会将value追加到原有string的后边。如果key不存在,则效果等同于SET命令。
命令有效版本:2.0.0之后
时间复杂度:O(1).追加的字符串⼀般⻓度较短,可以视为O(1).
返回值:追加完成之后string的⻓度。
语法: append key value
代码如下(示例):
redis> exists mykey
(integer) 0
redis> append mykey "Hello"
(integer) 5
redis> get mykey
"Hello"
redis> append mykey " World"
(integer) 11
redis> get mykey
"Hello World"
9.getrange操作
返回key对应的string的⼦串,由start和end确定(左闭右闭)。可以使⽤负数表⽰倒数。-1代表倒数第⼀个字符,-2代表倒数第⼆个,其他的与此类似。超过范围的偏移量会根据string的⻓度调整成正确的值。
命令有效版本:2.4.0之后
时间复杂度:O(N).N为[start,end]区间的⻓度.由于string通常⽐较短,可以视为是O(1)
返回值:string类型的⼦串
语法:getrange key start end
代码如下(示例):
redis> set mykey "This is a string"
"OK"
redis> getrange mykey 0 3
"This"
redis> getrange mykey -3 -1
"ing"
redis> getrange mykey 0 -1
"This is a string"
redis> getrange mykey 10 100
"string"
10.setrange操作
覆盖字符串的⼀部分,从指定的偏移开始。
命令有效版本:2.2.0之后
时间复杂度:O(N),N为value的⻓度.由于⼀般给的value⽐较短,通常视为O(1).
返回值:替换后的string的⻓度。
语法: setrange key offset value
代码如下(示例):
redis> set key1 "Hello World"
"OK"
redis> setrange key1 6 "Redis"
(integer) 11
redis> get key1
"Hello Redis"
11.strlen操作
获取key对应的string的⻓度。当key存放的类似不是string时,报错。
命令有效版本:2.2.0之后
时间复杂度:O(1)
返回值:string的⻓度。或者当key不存在时,返回0。
语法: strlen key
代码如下(示例):
redis> set mykey "Hello world"
"OK"
redis> strlen mykey
(integer) 11
redis> strlen nonexisting
(integer) 0
三、命令小结操作
命令 | 时间复杂度 |
---|---|
set key value [key value…] | O(k),k是键个数 |
get key | O(1) |
del key [key…] | O(k),k是键个数 |
mset key value [key value…] | O(k),k是键个数 |
mget key [key…] | O(k),k是键个数 |
incr key // incrby key n | O(1) |
append key value | O(1) |
strlen key | O(1) |
setrange key offset value | O(n),n是字符串⻓度,通常视为O(1) |
getrange key start end | O(n),n是字符串⻓度,通常视为O(1) |
总结
本文介绍了redis中string的有关操作,并且给出了相应的操作代码示例,分析了相关操作的时间复杂度。希望以上内容能帮助大家了解到string的相关知识。