概览:
数据结构 :
key = value
中value的类型
内部编码: 实际在底层用来存储value的结构
设计优点:
① 解耦,用户可根据需求再开发内部编码方式
② 实现空间或效率优化, 多种内部编码实现可以在不同场景下发挥各⾃的优势,例如 ziplist ⽐较节省内存,但是在列表元素⽐较多的情况下,性能会下降,这时候 Redis 会根据配置选项将列表类型的内部实现转换为linkedlist,整个过程⽤⼾同样⽆感知。
Reidis 命名规范
与 MySQL 等关系型数据库不同的是,Redis 没有表、字段这种命名空间,⽽且也没有对键名有强制要求(除了不能使⽤⼀些特殊字符)。但设计合理的键名,有利于防⽌键冲突和项⽬ 的可维护性,⽐较推荐的⽅式是使⽤ “业务名:对象名:唯⼀标识:属性” 作为键名。例如 MySQL 的数据库名为 vs,⽤⼾表名为 user_info,那么对应的键可以使⽤ “vs:user_info:6379”、“vs:user_info:6379:name” 来表⽰,如果当前 Redis 只会被⼀个业务 使⽤,可以省略业务名 “vs:”。如果键名过程,则可以使⽤团队内部都认同的缩写替代,例如"user:6379:friends:messages:5217" 可以被 “u:6379🇫🇷m:5217” 代替。毕竟键名过⻓,还是会导致 Redis 的性能明显下降的
String类型
- 基本介绍:
① :String类型是redis最基础的数据类型,其他⼏种数据结构也都是在字符串类似基础上构建的,例如列表和集合的元素类型是字符串类型,所以字符串类型能为其他 4 种数据结构的学习奠定基础。
②:字符串类型的值实际可以是字符串,包含⼀般格式的字符串或者类似 JSON、XML 格式的字符串;数字,可以是整型或者浮点型;甚⾄是⼆进制流数据,例如图⽚、⾳频、视频等。不过⼀个字符串的最⼤值不能超过 512 MB。
③:由于 Redis 内部存储字符串完全是按照⼆进制流的形式保存的,所以 Redis 是不处理字符集编码问题的,客⼾端传⼊的命令中使⽤的是什么字符集编码,就存储什么字符集编码。
- 内部编码:
redis同种数据结构(string)的内部编码不一定相同, Redis会根据当前值的类型和⻓度动态决定使⽤哪种内部编码实现。
字符串类型的内部编码有 3 种:
① int:8 个字节的⻓整型。(数据为纯数字时,redis内部使用)
② embstr:⼩于等于 39 个字节的字符串。(数据为字符串时,redis内部使用)
③ raw:⼤于 39 个字节的字符串。(数据为字符串时,redis内部使用))
Hash 类型
- 基本介绍
①:
Redis 本身的键值对被称为 “key - value”
Redis 提供的Hash类型 为 “field - value”
即Redis中Hash类型的键值对表示为 “key - ’ filed1 - value1 , filed2 - value2 …’ ”
② 对Hash类型的操作使用Hash系列的指令,例如
hset key field value 设置值 O(1)
hget key field 获取值 O(1)
hdel key field [field ...] 删除 field O(k), k 是 fiel个数