【历史与区别】
-
背景:当时antirez为统计网站页面次数,把代码中的缓存抽离到了单独应用,数据结构也很简单,就是键值对的保存。
-
名字由来:Remote DIctionary Service kv
SQL与NoSQL区别
-
关系型数据库特点
-
表格存储,二维
-
结构化数据,schema
-
表之间关联
-
SQL语句操作
-
事务 ACID 酸
-
关系型数据库限制
-
向上扩展,不支持动态扩容
-
表结构固定
-
基于磁盘读写压力
-
非关系型数据库non-relational / Not Only SQL特点
-
非结构化
-
扩展强
-
无事务特性 BASE 碱
-
支持海量数据存储与高并发操作
-
分布式
-
非关系型数据库种类
-
KV
-
文档存储 MongoDB
-
列存储 HBase
-
图存储 Graph
-
对象存储
-
XML存储
-
NewSQL TiDB:结合关系型与非关系型
-
redis特性
-
高吞吐,高性能
-
丰富的数据类型
-
分布式
-
丰富的功能:持久化,过期性
-
客户端完善
-
高可用,支持扩容
数据类型
Redis中支持的多种数据结构:string,lists,sets,zset,hash,bit arrays,hyperlogslogs,streams
其中前面五个是常用数据类型,后面三个是新增加的数据类型,我们着重介绍前面五种数据类型。
【String 存储类型】
-
INT,Float,String:分别为整形,浮点型,字符串型
-
dict---- hashtable---KV----dictEntry:字典型,由hashtable的kv结构,使用十字邻接矩阵
存储原理
-
String三种编码
-
int: 存储8个字节的长整型(long),大小不超过( 2^63-1),超过则使用下面两种类型存储
-
embstr:embstr格式的SDS(Simple Dynamic String),存储小于44个字节的字符串
-
raw: SDS, 存储大于44个字节的字符串
SDS中结构的解析:
-
char[] :Redis由C语言开发,其中对文件读写不使用字符串数据原因
-
内存空间分配
-
遍历字符数组长度O(n)
-
长度变化,内存重新分配
-
-
-
-