首先准备环境,使用windows版本的docker,使用以下命令进入redis-cli工具
docker exec -it redis redis-cli
一、String的语法
1、SET
语法:SET key value
参数:EX second,PX millisecond,设置键的过期时间
NX:键不存在时,才对键操作;
XX:键存在时,才对键进行操作;
2、DEL
语法:DEL key [key …]
3、GET & MGET
语法:GET key;MGET key [key …]
存在返回对应的value,不存在返回nil
二、String的底层实现
1、三种编码方式
INT编码:可以用long表示的整数,用这种编码格式存储;
EMBSTR编码:如果字符串小于某个字节数门限(3.2版本之前是39,3.2版本之后是44),则使用EMBSTR编码格式
RAW:超过某个字节数门限,则使用RAW编码格式
EMBSTR和RAW都是由redisObject和SDS(Simple Dynamic String)两个结构组成,差异在于,EMBSTR下RedisObject和SDS内存是连续的,而RAW编码下redisObject和SDS的内存是分开的。
EMBSTR内存:
RAW内存:
使用SDS相比于传统C语言以’\0’结尾的char数组表示字符串好处在于
1、不用遍历去计算字符串的长度,SDS中的len字段
2、预留一定空间,小幅度追加字符串时不发生内存重新分配,SDS中的alloc – len即代表预留的空间大小
3、二进制安全:就是字符串中如果存储了’\0’也不会被错误识别成字符串结尾
三、String面试题
1.Set一个已有的数据会发生什么?
会覆盖原有的值,同时会覆盖或擦除键的过期时间
2.浮点型在String是用什么表示?
以字符串来存储,将浮点数转换为字符串,然后以字符串格式存储
3.String可以有多大?
一个redis字符串的大小最大是512MB
4.Redis字符串是怎么实现的?
可以用long表示的整数,用INT类型存储
当字符串较小的时候,用EMBSTR,当字符串较大的时候,用RAW,阈值是44字节
5.SDS有什么用?
1、不用遍历去计算字符串的长度,SDS中的len字段
2、预留一定空间,小幅度追加字符串时不发生内存重新分配,SDS中的alloc – len即代表预留的空间大小
3、二进制安全:就是字符串中如果存储了’\0’也不会被错误识别成字符串结尾