前文我们提到了Redis的五大基本数据类型(主要是值的类型,键只能是字符串型),那么我们废话不多说就开始详细聊聊这五个数据类型及其使用吧!
Redis技法篇专注于Redis的使用,所以我会详细描述Redis命令的使用。如果你想详细了解每个命令的使用,还是很推荐它的官网:http://www.redis.cn/commands.html#string
1. 字符串
字符串键是Redis最基本的键值对类型,这种类型的值既可以是普通的文字数据也可以是图片、视频、音频等更为复杂的二进制数据,如下所示:
“message”:”hello world”
“number”:”123456″
“redis-logo.jpg”:”xffxffxe0x00…”
字符串键值是比较简单的,Redis也为字符串键值提供了系列操作命令,下面我们详细聊聊!
1.1 SET:为字符串键设置值
命令格式:SET key value [NX|XX]
返回值:如果设置成功那就是OK,如果没有设置成功那就返回nil
其实我们还可以改变覆盖规则,默认情况下多次对一个键执行set是可以覆盖的,但是如果你希望只对有值的键进行set嘞?或者说你只希望对无值的键进行set嘞?
这个时候SET命令的两个参数NX和XX就起作用了!
-
设置了NX意味着:SET命令只会在键没有值的情况下执行set操作 -
设置了XX意味着:SET命令只会在键有值的情况下执行set操作
1.2 GET:获取字符串键的值
命令格式:GET key
参数:一个字符串键 key
返回值:返回与该键相关联的值,如果没有这个键值对就返回空值nil
1.3 GETSET:获取旧值并设置新值
GETSET命令就像GET命令和SET命令的组合版本,GETSET首先获取字符串键目前已有的值,接着为键设置新值,最后把之前获取到的旧值返回给用户。
命令格式:GETSET key new_value
返回值:旧值,如果这个键不存在于数据库,那么返回nil
1.4 MSET:一次为多个字符串键设置值
SET只能设置单个字符串键,而MSET却能一次设置多个字符串键。
命令格式:MSET key1 value1 [key2 value2 …]
「MSET命令除了可以让用户更为方便地执行多个set操作外,还能有效提高程序的效率:执行多条SET命令需要客户端和服务端之间进行多次网络通信,并因此耗费大量时间;而使用一条MSET命令去代替多条SET命令只需要一次网络通信,从而有效减少耗时!」
1.5 MGET:一次获取多个字符串键的值
命令格式:MGET key1 [key2 …]
参数:一个或多个字符串键
返回值:返回一个列表,按照键的顺序排列各个键的值,如果遇到不存在的键会返回空值nil
1.6 MSETNX:只在键不存在的情况下,一次为多个字符串键设置值
这个命令和MSE的区别就是,MSETNX只会在所有给定键都不存在的情况下对键进行设置,而不会像MSET那样直接覆盖键已有的值:「如果在给定键中,即使有一个键已经有值了,那么MSETNX命令会放弃所有键的set操作。」
命令格式:MSETNX key1 value1 [key2 value2 …]
返回值:成功执行会返回1 在放弃执行set时返回0
1.7 STRLEN:获取字符串值的字节长度
命令格式:STRLEN key
参数:一个字符串键key
返回值:返回一个字符串键存储的值的字节长度,对于不存在的键返回0
1.8 GETRANGE:获取字符串指定索引范围上的内容
命令格式:GETRANGE key start end
返回值:位于start索引和end索引上的值都会被返回
注意:「这里和python不同,我们是闭区间索引范围,而python是左闭右开」
1.9 SETRANGE:对字符串值的指定索引范围进行设置
通过使用SETRANGE命令可以将字符串键的值从索引index开始的部分替换为指定的新内容,被替换内容的长度取决于新内容的长度。
命令格式:SETRANGE key index substitute
返回值:字符串当前的长度
-
当用户给定的新内容比被替换的内容更长,该命令可以自动扩展被修改的字符串值 -
当用户给定的index索引超出了字符串的长度,那么字符串值末尾到索引index-1之间的部分将会使用空字节进行填充,换句话说这些字节的二进制位都是0

1.10 APPEND:追加新内容到值末尾
命令格式:APPEND key suffix
返回值:返回字符串当前的长度
如果用户给定的键不存在,那么APPEND命令会先将键的值初始化为空字符串然后执行追加操作,最终效果和set类似了。
1.11 INCRBY DECRBY:对整数值执行加减法操作
每当用户将一个值存储到字符串键里面时,Redis都会对这个值进行检测,如果这个值能够被解释为下面两种类型的一种,那么Redis就会把这个值当做数字处理:
-
「第一种类型是能够使用C语言的long long int 类型存储的整数。」 -
「第二种类型就是能够使用C语言的long double类型存储的浮点数。」
命令格式:INCRBY key increment DECRBY key increment
返回值:执行了加减操作后的值
「但是值得注意的是:」
-
increment必须是整数 -
「这个命令不能用于浮点数、字符串值、超过64位长度的整数值」 -
如果遇到不存在的键会先将键的值初始化为0,再进行操作
1.12 INCR DECR:对整数值执行加1和减1的操作
因为对整数值执行加1和减1的操作经常会出现,所以才出现了这两个命令,其实他们相当于INCRBY key 1和DECRBY key 1。
命令格式:INCR key DECR key
返回值:加一或减一后的整数值
1.13 INCRBYFLOAT:对数字值执行浮点数加法操作
除了用于执行整数加法操作的INCR命令以及INCRBY命令之外,Redis还提供了用于执行浮点数加法的INCRBYFLOAT命令。
命令格式:INCRBYFLOAT key increment
返回值:执行加法操作后的数字值
-
如果遇到不存在的键,Redis先将键的值初始化为0,然后执行加法操作。 -
我们将increment设置为负数就能实现减法操作了 -
INCRBYFLOAT可以应用在浮点数和整数上,同时它的增量既可以是浮点数也可以是整数 -
该命令的计算结果要看它可不可以表示为整数,如果可以就会表示为整数

-
虽然Redis不会限制字符串存储的浮点树的小数位长度,但是在使用该命令处理浮点数时,最多保留小数点后17位,超出这个范围的小数会被截断

原文始发于微信公众号(Java之禅):Redis技法篇 | 3. Redis数据类型之字符串
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/161355.html