- String是Redis最基本的数据类型,一个Key对应一个Value,一个Redis中字符串Value最多可以是512M
- String类型是二进制安全的,意味着Redis的String可以包含任何数据。比如照片或者序列化对象。
📌 操作命令:
mset key value [key value ...]
:设置多个键值(批处理)
msetnx key value [key value ...]
:设置多个新的键值(如果已经有键存在,则这个指令执行不成功,无法新增键值)。
get <key>
:查询对应键值
mget key [key ...]
:获取多个键值对
getset key newValue
:将给定的key设置为newValue,并返回修改之前的value值。
setrange key 偏移量 value
:设置(替换)字符子串
getrange 开始下标 结束下标
:获取字符串从开始索引到结束索引位置的字符
索引从0开始!
incr <key>
:将key中存储的数字值增1,只能对数字值操作,如果为空,新增值为1
decr <key>
:将key中存储的数字值减1,只能对数字值操作,如果为空,新增值为-1
只有value是数值的情况下才能增减!
incrby key 步长
:指定步长增加对应key的value值
decrby key 步长
:指定步长减少对应key的value值
strlen <key>
:获得字符串值的长度
append <key><value>
:将给定的<value>追加到原值末尾
🔥 分布式锁:
setnx key value
:如果当前键不存在就设置键值对,否则执行不成功
setex key 过期时间 value
:设置键值对,并指定过期时间
🔥 原子操作:
原子操作指不会被线程调度机制打断的操作。这种操作一旦开始,就一直运行到结束,中间不会有任何context switch(切换到另一个线程)。如果其中一步失败,那么整个操作就是失败。
- 在单线程中,能够在单条指令中完成操作都可以认为是“原子操作”,因为中断只能发生于指令之间。
- 在多线程中,不能被其它进程(线程)打断的操作就叫做原子操作。
📌 数据结构:
String类型的redisObject内部对应了三种物理编码方式:int、embstr、raw
- int:保存的是long型(长整型)的64位(8个字节)有符号整数。只有整数才会使用int,如果是浮点数,Redis内部会先将浮点数转换为字符串,然后保存字符串值。
long类型:
- long数据类型是64位,有符号的二进制补码表示的整数。
- 默认值0L
- embstr:代表的是embstr格式的简单的动态字符串(Simple Dynamic String,SDS),是可以修改的字符串,内部结构实现上类似于Java的ArrayList采用分配冗余空间的方式来减少内存的频繁分配。保存长度小于44字节的字符串。
- raw:保存长度大于44字节的字符串