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存放字节/字符串和浮点型数据。
如下图所示:
2.SDS定义结构
// 对象属性 struct SDS<T> { // 数组容量 T capacity; // 数组长度 T len; // 特殊标志位,暂时不用管 byte flags; //数组内容 byte[] content; }
3.SDS内部编码
SDS编码方式可以是int、raw或者embstr,区别在于内存结构的不同。
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面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》