Redis(一) 数据类型

【历史与区别】


  1. 背景:当时antirez为统计网站页面次数,把代码中的缓存抽离到了单独应用,数据结构也很简单,就是键值对的保存。

  2. 名字由来:Remote DIctionary Service kv


SQL与NoSQL区别

  • 关系型数据库特点

  1. 表格存储,二维

  2. 结构化数据,schema

  3. 表之间关联

  4. SQL语句操作

  5. 事务 ACID 酸

  • 关系型数据库限制

  1. 向上扩展,不支持动态扩容

  2. 表结构固定

  3. 基于磁盘读写压力

  • 非关系型数据库non-relational / Not Only SQL特点

  1. 非结构化

  2. 扩展强

  3. 无事务特性 BASE 碱

  4. 支持海量数据存储与高并发操作

  5. 分布式

  • 非关系型数据库种类

  1. KV

  2. 文档存储 MongoDB

  3. 列存储 HBase

  4. 图存储 Graph

  5. 对象存储

  6. XML存储

  7. NewSQL TiDB:结合关系型与非关系型

  • redis特性

  1. 高吞吐,高性能

  2. 丰富的数据类型

  3. 分布式

  4. 丰富的功能:持久化,过期性

  5. 客户端完善

  6. 高可用,支持扩容


 

Redis中支持的多种数据结构:string,lists,sets,zset,hash,bit arrays,hyperlogslogs,streams

其中前面五个是常用数据类型,后面三个是新增加的数据类型,我们着重介绍前面五种数据类型。

【String 存储类型】

  1. INT,Float,String:分别为整形,浮点型,字符串型

  2. dict---- hashtable---KV----dictEntry:字典型,由hashtable的kv结构,使用十字邻接矩阵


存储原理
  1. String三种编码

    1. int: 存储8个字节的长整型(long),大小不超过( 2^63-1),超过则使用下面两种类型存储

    2. embstr:embstr格式的SDS(Simple Dynamic String),存储小于44个字节的字符串

    3. raw: SDS, 存储大于44个字节的字符串

      SDS中结构的解析:

      1. char[] :Redis由C语言开发,其中对文件读写不使用字符串数据原因

        1. 内存空间分配

        2. 遍历字符数组长度O(n)

        3. 长度变化,内存重新分配