Redis String字符串详解(语法命令及实现应用)

Redis String字符串详解(语法命令及实现应用)-mikechen

Redis String字符串定义

Sring是Redis最基本的数据类型,二进制安全的字符串,最大512M,可以包含任何数据,比如:字符串、整数、浮点数、图片、Json对象等。

String类型的数据结构是Key-Value(键值),Key 是数据在Redis中的唯一标识,Value则是其具体的数据。

 

Redis String字符串语法

redis 127.0.0.1:6379> SET name mikechen

通过Redis SET命令给name字符串赋值。

 

Redis String字符串实现

1.Redis String底层结构

在Redis内部String类型以SDS(simple dynamic string)作为结构存储,int用来存放整型数据,SDS存放字节/字符串和浮点型数据。

如下图所示:

Redis String字符串详解(语法命令及实现应用)-mikechen

2.SDS定义结构

// 对象属性
struct SDS<T> {
  // 数组容量
  T capacity; 
  // 数组长度
  T len;     
  // 特殊标志位,暂时不用管
  byte flags; 
  //数组内容
  byte[] content; 
}

3.SDS内部编码

SDS编码方式可以是int、raw或者embstr,区别在于内存结构的不同。

Redis String字符串详解(语法命令及实现应用)-mikechen

4.扩容规则

每次创建时capacity与len一样大,点那个字符串长度小于1MB时。

每次扩容都是加倍现有的空间,如果长度大于1MB,则每次只会扩容1MB的空间。

注意:字符串在这里最大长度为512MB。

 

Redis String字符串命令

序号

命令

含义

1

set key value

为指定key赋值

2

get key

获取指定key的值

3

setnx key value

只有在 key 不存在时设置 key 的值

4

mset key value [key value …]

同时设置多个键的键值

5

mget key [key …]

同时获得多个键的键值

6

msetnx key value [key value …]

同时设置多个键的键值,当且仅当所有给定key都不存在时,才能设置成功

7

setex key seconds value

将值 value 关联到 key ,并将 key 的过期时间设为 seconds (单位:秒)

8

psetex key milliseconds value

将值 value 关联到 key ,并将 key 的过期时间设为 milliseconds(单位:毫秒)

9

strlen key

返回指定key对应value的长度,如果键不存在则返回0

10

append key value

向键值的末尾追加value,返回值是追加后字符串的总长度。如果键不存在则将该键的值设置为value,即相当于set key value。

11

incr key

将 key 中储存的数字值增1(key 对应的值为数字整型)

12

incrby key increment

incrby与incr命令基本一样,incrby可以通过increment参数指定一次增加的步长值

13

incrbyfloat key increment

将 key 所储存的值加上给定的浮点增量值(increment)

14

decr key

将 key 中储存的数字值减1(key 对应的值为数字整型)

15

decrby key increment

decrby与decr命令基本一样,decrby可以通过increment参数指定一次减少的步长值

16

getrange key start end

返回 key 中字符串值的子字符,字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)。索引从0开始。

17

setrange key offset value

用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。索引从0开始。

18

getset key value

设置key的新值,同时获取旧值

19

getbit key offset

一个字节由8个二进制位组成。对 key 所储存的字符串值,获取指定偏移量上的位(bit)

20

setbit key offset value

一个字节由8个二进制位组成。对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)

21

bitcount key [start] [end]

一个字节由8个二进制位组成。获取字符串类型键中值是1的二进制位个数。也可以通过[start] [end]来限制统计的字节范围。

22

bitop opration destkey key[key…]

一个字节由8个二进制位组成。bitop命令可以对多个字符串类型键进行位运算,并将结果存储在destkey参数指定的键中。bitop命令支持的运算操作有AND、OR、XOR 和NOT。

 

Redis String应用场景

1.业务数据的缓存

Redis中会缓存一些常用的热点数据,可以提升数据查询的性能。

2.分布式全局ID

使用String类型的incr命令,实现原子递增

3.限流

使用计数器实现手机验证码频率限流。

4.分布式session

基于登录场景中,保存token信息。

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法