### redis入门 - redis全称REmoteDIctionaryService,直接翻译过来是远程字典服务。是一款NoSQL数据库。 #### 1. SQL 与 NoSQL - 关系型数据库的特点: 1、它以表格的形式,基于行存储数据,是一个二维的模式。 2、它存储的是结构化的数据,数据存储有固定的模式(schema),数据需要适应表结构。 3、表与表之间存在关联(Relationship)。 4、大部分关系型数据库都支持SQL(结构化查询语言)的操作,支持复杂的关联查询。 5、通过支持事务(ACID)来提供严格或者实时的数据一致性。 - 但是使用关系型数据库也存在一些限制: 1、要实现扩容的话,只能向上(垂直)扩展,比如磁盘限制了数据的存储,就要扩大磁盘容量,通过堆硬件的方式,不支持动态的扩缩容。水平扩容需要复杂的技术来实现,比如分库分表。 2、表结构修改困难,因此存储的数据格式也受到限制。 3、由于数据存储在磁盘, - 非关系型数据库的特点: 1、存储非结构化的数据,比如文本、图片、音频、视频。 2、表与表之间没有关联,可扩展性强。 3、保证数据的最终一致性。遵循BASE(碱)理论。BasicallyAvailable(基本可用);Soft-state(软状态);EventuallyConsistent(最终一致性)。 4、支持海量数据的存储和高并发的高效读写。 5、支持分布式,能够对数据进行分片存储,扩缩容简单。 - 对于不同的存储类型,又有各种各样的非关系型数据库,比如有几种常见的类型: 1、KV存储,用KeyValue的形式来存储数据。比较常见的有Redis和MemcacheDB。 2、文档存储,MongoDB。 3、列存储,HBase。 4、图存储,这个图(Graph)是数据结构,不是文件格式。Neo4j。 5、对象存储。 6、XML存储等等等等。 #### 2. redis数据类型 - setnx - 官网:https://redis.io/topics/data-types-introString、 - **String、Hash、Set、List、Zset**、Hyperloglog、Geo、Streams - sds simple dynamic string - sds数据结构: int len 记录 buf数组中巳使用字节的数量 ,等于 SDS 所保存字符串的长度 int free 记录 buf数组中未使用字节的数量 char buf [] 字节数组, 用于保存字符串