Redis NoSQLRedis架构数据结构
NoSQLNot only SQLNoSQL指的是非关系型、分布式的数据库管理系统它是为了应对互联网时代海量数据、高并发、高扩展性以及非结构化数据的挑战而诞生的NoSQL与SQL的区别维度SQL (关系型数据库)NoSQL (非关系型数据库)数据模型表格行/列结构固定有严格模式Schema文档、键值对、图、列族等结构灵活无模式或动态模式存储示例users表、orders表通过user_id外键关联一个订单文档包含{ user: {...}, items: [...], total: 100 }扩展方式垂直扩展升级单台服务器的CPU、内存、硬盘水平扩展增加更多廉价服务器分摊数据事务支持ACID(强一致性支持复杂事务如银行转账)BASE(最终一致性事务支持较弱或不支持)查询语言结构化查询语言 (SQL)标准化功能强大各产品有自己的API或查询语言如MongoDB的find()不统一最佳场景数据结构稳定、需要复杂关联查询、要求强数据一致性海量数据、高并发写入、数据结构多变、需要快速迭代SQL以数据表的形式存储数据而NoSQL的数据模型不固定能够以键值对Redis、JSON文档MongoDB、图Neo4j、列族HBase等形式存储数据所以NoSQL是非结构化的关系型数据库以结构化查询语言SQL进行查询操作而不同NoSQLredis、MongoDB的查询语句不一样SQL的特点是数据结构稳定、需要复杂关联查询、要求强数据一致性NoSQL的特点是海量数据、高并发写入、数据结构多变、需要快速迭代Redis架构Redis 是一个开源的、基于内存的键值对存储系统键值型value支持多种不同的数据结构结构丰富速度快数据存储在内存中读写速度极快持久化提供 RDB (快照) 和 AOF (日志) 两种方式将内存数据保存到磁盘高可用与分布式提供主从复制、哨兵 (Sentinel) 和集群 (Cluster) 模式工作原理Redis是一个标准的C/S客户端-服务器架构Client (客户端)向服务器发送命令如SET、GET接收并展示返回结果你在终端里敲的命令由它接收并通过网络发送给redis-server执行命令行客户端redis-cli图形化桌面客户端编程客户端Server (服务器端)负责存储数据、处理命令、管理内存、执行持久化、处理复制和集群等核心逻辑完整交互过程启动服务器在服务器上运行redis-server它会监听一个端口默认 6379等待连接。客户端连接客户端如redis-cli通过 TCP 协议连接到服务器的 6379 端口建立一个网络连接。发送请求客户端向服务器发送一条命令例如GET mykey。处理与响应服务器接收、解析并执行命令从内存中读取mykey的值然后将结果通过网络返回给客户端。关闭连接当客户端主动退出或连接超时TCP 连接会断开。Redis数据结构Redis是一个键值对key-value数据库key一般是string类型不过value的数据结构有很多string字符串hash哈希自带快速定位索引的键值对数组list字符串列表按照插入顺序排序。本质是一个双向链表set集合无序的、不可重复的字符串集合Sorted Set有序集合每一种数据类型它的操作命令都不一样