1Redis数据类型字符串
字符串类型是redis种最基本的数据类型,它是二进制安全的,任何形式的字符串那都可以存储,包括二进制、序列化后的数据,JSON化的对象,甚至一张经Base64编码后的图片。String类型的键最大能存储512MB的数据。
1.1设置键值对
1.set命令:设置键值对
命令格式:
Set key value [EX seconds] [PX milliseconds] [NX|XX]
使用Set命令将字符串值value设置到key中。如果key中已经存在其他值,则在执行SET命令后,将覆盖旧值,并忽略类型。针对某个带有生存时间的key来说,当SET命令执行成功时,这个key上的生存时间将会被移除。
SET命令的可选参数如下。
·EX seconds:用于设置key的过期时间为多少秒。其中,SET key value EX seconds等价于SETEX key seconds value.
·PX milliseconds:用于设置key的过期时间为多少毫秒(milliseconds)。其中,SET key value PX milliseconds等价于PSETEX key milliseconds value。
·NX:表示key不存在,才对key进行设置操作。其中,SET key value NX等价于 SETNX key value
·XX:表示当key不存在时,才对key进行设置操作。
返回值:如果SET 命令设置成功,则会返回OK。如果设置了NX或XX,但因为条件不足而设置失败,则会返回空批量回复(NULL Bulk Reply).
2.MSET命令:设置多个键
命令格式:
MSET key value [key value...]
使用MEST命令同时设置多个键值对。如果某个key已经存在,那么MSET命令会用新值覆盖。MSET命令是一个原子性操作,所以给定key都会在同一时间内被设置更新,不存在key被更新了而另一个key没有被更新的情况。
返回值:总数返回OK,因为MSET不可能设置失败。
3.SETNX命令:设置不存在的键值对
命令格式:
SETNX Key value
SETNX 是 set if not exists 的缩写。如果key不存在,则设置值,当且仅当key不存在时。如果key已经存在了,则SETNX什么也不做。
返回值:SETNX命令设置成功返回1,设置失败返回0.
4.MSETNX命令:设置多个不存在的键值对
命令格式:
MSETNX key value [key value...]
使用MSETNX命令同时设置多个键值对,当且仅当给定所有key都不存在设置。与此MSET命令类似,如果有一个给定key已经存在,那么MSETNX命令也会拒绝执行所有给定Key的设置操作。MSETNX命令是原子性的,它可以用看来设置多个不同key表示不同字段的唯一逻辑对象,所以字段要么全部被设置,要么全部设置失败。
返回值:所有key设置成功返回1,要么所有给定的key都设置失败,则返回失败。
1.2获取键值对
1.GET命令:获取键值对的值
命令格式:
GET key
使用GET命令获取key中设置的字符串值。如果key中存储的值不是字符串类型的,则会返回一个错误,因为GET命令只能用于处理字符串的值;当key不存在时,返回nil.
返回值:当Key存在时,返回key所对应的值;如果Key不存在,则返回nil;如果key不是字符串类型,则返回错误。
2.MGET命令:获取多个键值对的值
命令格式:
MGET key [key...]
使用MGET命令同时返回多个给定key的值,key之间使用空格隔开。如果在给定的key中有不存在的key,那么这个key返回值为nil。
返回值:一个包含所有给定key的值的列表。
3.GETRANGE命令:获取键的子字符串值
命令格式:
GETRANGE key start end
使用GETRANGE命令来获取key中字符串值从start开始到end结束的子字符串,下标从0开始。start和end参数是整数,可以取负值。当取负值时,表示从字符串最后开始计数,-1表示最后一个字符串,-2表示倒数第二个字符,以此类推。
1.3键值对的偏移量
1.SETBIT命令:设置键的偏移量
命令格式:
SETBIT key offset value
使用SETBIT命令对key所存储的字符串值设置或清除指定偏移量上的位(bit)。value参数值决定了位的设置或清除,value值取0或1.当key不存在时,自动生成一个新的字符串。这个字符串是动态的,它可以扩展,以确保将value保存到指定的偏移量上。当这个字符串扩展时,使用0来填充空白位置。offset参数必须是大于或等于0,并且小于2^32次方的正整数。在默认情况下,bit初始化为0。
返回值:返回字符串值指定偏移量上的位(bit)。
2.GETBIT命令:获取键的偏移量值
命令格式:
GETBIT key offset
对key所存储的字符串值,使用GETBIT命令来获取指定偏移量上的位。当offset的值超过了字符串的最大长度,或者key不存在,返回0;
3.设置的生存时间
命令格式:
SETEX key seconds value
使用SETEX命令将value值设置到key中,并设置key的生存时间位多少秒(seconds)。
如果key存在,则SETEX命令将覆写旧值。
它等价于:
SET key value EXPIRE key seconds
SETEX命令是一个原子性命令,它设置value与设置生存时间是在同一时间完成的。
返回值:设置成功时返回OK;当seconds参数不合法时,返回错误;
4.设置生存时间(毫秒)
命令格式:
PSETEX key milliseconds value
使用PSETEX命令设置key的生存时间,以毫秒为单位。设置成功时返回OK。
以毫秒的形式,设置键的时间。
1.5键值对的值操作
1.SETRANGE命令:替换键的值
SETRANGE key offset value
使用SETRANGE命令从指定的位置(offset)开始将key的值替换为新的字符串。比如旧值为hello word,执行命令SETRANGE 5 Redis,表示从5下标位置开始 替换为新的字符串redis,其结果为helloredis。如果有不存在的key,就当作空白字符串处理。
SETRANGE 命令会确保字符串足够长,以便将value设置在指定的偏移量上。如果给定Key原来存储的字符串长度比偏移量小,那么原字符和偏移量之间的空白将用零字节来填充。
注意:offset的最大偏移量是2^29-1(536870911),因为Redis字符串的大小被限制在512MB以内。假如需要使用比这更大的空间,则可以使用多个key来存储。
返回值:返回执行SERANGE命令之后的字符串的长度。
2.GETSET命令:为键设置新值
命令格式:
GETSET key value
使用GETSET命令将给定的值设置为value,并返回key的旧值。当key存在但不是字符串类型时,将会返回错误。
返回值:返回给定Key的旧值。如果Key不存在,则返回nil;如果key存在但不是字符串类型,则返回错误。
3.APPEND命令:为键追加值
命令格式:
APPEND key value
如果key存在且是字符串类型的,则将value值追加到key旧值的末尾。如果Key不存在,则将key设置值为value。
返回值:返回值追加value之后,key中的字符串的长度。
1.6键值对的计算
1.BITCOUNT命令:计算比特位数量
命令格式:
BITCOUNT key [start] [end]
使用BITCOUNT命令计算在给定的字符串中被设置为1的比特位数量。它有两个参数:start 和end。如果不设置这两个参数,则表示他会对整个字符串进行计算;如果指定了这两个参数值,则可以让计数只在特定的位上进行。start和end参数都是整数值,可以取负数,比如,-1表示字符串的最后一个字节,-2表示字符串的倒数第二个字节,以此类推。
如果key不存在,就会当作空字符串来处理,其计数结果为0。
返回值:执行BITCOUNT命令之后,返回被设置为1的位的数量。
2.BITOP命令:对键进行位元运算
命令格式:
BITOP operation destkey key [key...]
使用BITOP命令对一个或多个保存二进制的字符串key进行位元运算,并将运算结果保存到destkey中。operation表示位元操作符,它可以是AND、OR、NOT、XOR这4种操作中的任意一种。具体操作如下。
· BITOPAND destkey key [key..]: 表示对一个或多个 key 求逻辑并,并将结果保存到destkey 中 · BITOP OR destkey key [key...]:表示对一个或多个 key 求逻辑或,并将结果保存到destkey 中。 · BITOPNOTdestkey key:表示对给定 key 求逻辑非,并将结果保存到 destkey 中。BITOPXOR destkey key[key...]:表示对一个或多个 key 求逻辑异或,并将结果保存到 destkey 中。
除NOT 操作之外,其余的操作都可以接收一个或多个 key 作为参数。当使用 BITOP 命令来进行不同长度的字符串的位元运算时,较短的那个字符串所缺少的部分将会被看作 0空的key也被看作包含0的字符串序列。 返回值: 返回保存到 destkey 中的字符串的长度,这个长度和输入 key 中最长的字符由的长度相等。
3.STRLEN命令:统计键的值的字符串长度
命令格式:
STRLEN key
使用命令STRLEN统计key的值的字符串长度。当key存储的不是字符串时,返回一个错误。当key不存在时,返回0。
1.7键值对的值增量
1.DECR命令:让键的值减1
命令格式:
DECR key
使用DECR命令将key中存储的数字值减1.如果key不存在,则key的值先被初始化为0,再执行DECR操作减1.注意,这个命令只能对数字类型的数据进行操作(自减)。如果key对应的值包含错误类型,或者字符串类型的值不能表示为数字,则将返回一个错误。DECR操作的限制在64位(bit)有符号数字表示范围之内。
返回值:返回执行DECR操作之后key的值。
2.DECRBY命令:键的值减去减量值
命令格式:
DECRBY key decrement
使用DECRBY命令将key所存储的值减去减量值decrement。如果key不存在,则key的值先被初始化为0,再执行DECRBY命令。如果DECRBY命令操作的值包含错误的类型,或者字符串类型的值不能表示为数字,则将返回一个错误。DECRBY操作的数值限制在64(bit)有符号数字表示范围之内。
返回值:返回减去减量值decrement的key的新值。
3.INCR命令:让键的值加1
命令格式:
INCR key
使用INCR命令将key中存储的数字值加1。如果key不存在,则key的值先被初始化为0,再执行INCR操作加1。注意:这个命令只能对数字类型的数据进行操作(自增)。如果INCR操作的值包含错误类型,或者字符串类型的值不能表示为数字,则返回一个错误。INCR操作的值限制在64位(bit)有符号数字表示范围之内。
返回值:返回执行INCR命令之后key的新值。
4.INCRBY命令:让键的值加上增量值
命令格式:
INCRBY key increment
使用INCRBY命令将key所存储的值加上增量值increment。如果key不存在,则key的值先被初始化为0,再执行INCRBY命令。如果INCRBY操作的值包含错误的类型,或者字符串类型的值不能表示为数字,则将返回一个错误。INCRBY操作的值限制在64位有符号数字表示范围之内。
返回值:返回加上增量值increment之后的key的新值。
5.INCRBYFLOAT命令:让键的值加上浮点数增量值
命令格式:
INCRBYFLOAT key increment
使用INCRBYFLOAT命令将key所存储的值加上浮点数增量值increment。如果key不存在,则key的值先被初始化为0,再执行INCRBYFLOAT命令。如果INCRBYFLOAT命令执行成功,那么key的值会被更新为命令执行后的新值,并且新值以字符串的形式返回给调用者。产生的新值和浮点数增量值increment都可以使用想3.0e9、4e7、8e-3这样的指数符号来表示。
在执行INCRBYFLOAT命令之后,产生的值都会以相同的形式存储,都是由一个数字、一个可选的小数点、一个任意位数的小数部分组成的。小数部分末尾的0会被忽略掉。在有特定需要时,浮点数也会转换为整数,比如2.0会被保存为2.如果INCRBYFLOAT操作的key的值不是字符串类型的,或者key所对应的值、给定的浮点数增量值increment不能表示为双精度浮点数,则会返回一个错误。
返回值:返回执行INCRBYFLOAT命令之后,无论产生的浮点数的实际精度有多长,计算结果最多也只能保留小数点后17位。