Redis, String篇
本文最后更新于3 天前,其中的信息可能已经过时,如有错误请留言

首先准备环境,使用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’也不会被错误识别成字符串结尾

感谢阅读!如有疑问请留言
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇