### 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 [] 字节数组, 用于保存字符串