Redis技法篇 | 3. Redis数据类型之字符串

前文我们提到了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
Redis技法篇 | 3. Redis数据类型之字符串


1.6 MSETNX:只在键不存在的情况下,一次为多个字符串键设置值

这个命令和MSE的区别就是,MSETNX只会在所有给定键都不存在的情况下对键进行设置,而不会像MSET那样直接覆盖键已有的值:「如果在给定键中,即使有一个键已经有值了,那么MSETNX命令会放弃所有键的set操作。」

命令格式:MSETNX key1 value1 [key2 value2 …]
返回值:成功执行会返回1 在放弃执行set时返回0


1.7 STRLEN:获取字符串值的字节长度

命令格式:STRLEN key
参数:一个字符串键key
返回值:返回一个字符串键存储的值的字节长度,对于不存在的键返回0

Redis技法篇 | 3. Redis数据类型之字符串


1.8 GETRANGE:获取字符串指定索引范围上的内容

命令格式:GETRANGE key start end
返回值:位于start索引和end索引上的值都会被返回
注意:「这里和python不同,我们是闭区间索引范围,而python是左闭右开」
Redis技法篇 | 3. Redis数据类型之字符串


1.9 SETRANGE:对字符串值的指定索引范围进行设置

通过使用SETRANGE命令可以将字符串键的值从索引index开始的部分替换为指定的新内容,被替换内容的长度取决于新内容的长度。
命令格式:SETRANGE key index substitute
返回值:字符串当前的长度Redis技法篇 | 3. Redis数据类型之字符串

  • 当用户给定的新内容比被替换的内容更长,该命令可以自动扩展被修改的字符串值
  • 当用户给定的index索引超出了字符串的长度,那么字符串值末尾到索引index-1之间的部分将会使用空字节进行填充,换句话说这些字节的二进制位都是0
Redis技法篇 | 3. Redis数据类型之字符串

1.10 APPEND:追加新内容到值末尾

命令格式:APPEND key suffix
返回值:返回字符串当前的长度
Redis技法篇 | 3. Redis数据类型之字符串

如果用户给定的键不存在,那么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技法篇 | 3. Redis数据类型之字符串
  • 虽然Redis不会限制字符串存储的浮点树的小数位长度,但是在使用该命令处理浮点数时,最多保留小数点后17位,超出这个范围的小数会被截断
Redis技法篇 | 3. Redis数据类型之字符串

原文始发于微信公众号(Java之禅):Redis技法篇 | 3. Redis数据类型之字符串

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/161355.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!