| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> Remote Dictionary Server(Redis)——基于 KV 结构的作为 Cache 使用的 NoSQL 数据库管理系统 -> 正文阅读 |
|
[大数据]Remote Dictionary Server(Redis)——基于 KV 结构的作为 Cache 使用的 NoSQL 数据库管理系统 |
Redis 是基于key-value存储结构的NoSQL 数据库,是内存数据库。 一、非关系型数据库NoSQL 和关系型数据库RDBMS,两种数据库管理系统的区别?优点和缺点?答: 1.区别1)从存储的表结构上说: RDBMS的表结构一般比较固定,不会轻易修改。 RDBMS的表中数据一般存在关联性。 RDBMS的所有数据库查询语句有统一的语法 RDBMS满足ACID,数据具有安全性。 总结区别: 2.优缺点关系型数据库的瓶颈: (2)表中存储记录数量有限,横向可扩展能力有限,一张表最大二百多列。纵向数据可承受能力也是有限的,一张表的数据到达百万级,读写的速度就会逐渐的下降。面对海量数据, 必须使用主从复制,分库分表。这样的系统架构是难以维护的。 大数据查询 SQL 效率极低,数据量到达一定程度时,查询时间会呈指数级别增长 (3)无法简单地通过增加硬件、服务节点来提高系统性能。数据整个存储在一个数据库中的。多个服务器没有很好的解决办法,来复制这些数据。 (4)关系型数据库大多是收费的,对硬件的要求较高。软件和硬件的成本花费比重较大。 非关系型数据库优势: (1) 大数据量,高性能 NoSQL 数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单。关系型数据库(例如 MySQL)使用查询缓存。这种查询缓存在更新数据后,缓存就是失效了。在频繁的数据读写交互应用中。 缓存的性能不高。NoSQL 的缓存性能要高的多。 (2) 灵活的数据模型 NoSQL 无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是一个噩梦。尤其在快速变化的市场环境中,用户的需求总是在不断变化的。 (3) 高可用 NoSQL 在不太影响性能的情况,就可以方便的实现高可用的架构。 NoSQL 能很好的解决关系型数据库扩展性差的问题。弥补了关系数据(比如 MySQL) 在某些方面的不足,在某些方面能极大的节省开发成本和维护成本。 MySQL 和 NoSQL 都有各自的特点和使用的应用场景,两者结合使用。让关系数据库关注在关系上,NoSQL 关注在存储上。 (4) 低成本 这是大多数分布式数据库共有的特点,因为主要都是开源软件,没有昂贵的 License 成本 非关系型数据库劣势: (1) 无关系,数据之间是无联系的。数据存在冗余,存储空间浪费。 (3) 没有关系型数据库的约束,大多数也没有索引的概念 (4) 没有事务,不能依靠事务实现 ACID. (5) 没有丰富的数据类型(数值,日期,字符,二进制,大文本等) 综上所述: 二、redis的五种基本数据类型和底层实现原理(数据结构)参考:Redis 常见数据类型和应用场景 Redis 的键值对中的 key 就是字符串对象,而 value 可以是字符串对象,也可以是集合数据类型的对象,比如 List 对象、Hash 对象、Set 对象和 Zset 对象。 共有 8 种数据结构:SDS、双向链表、压缩列表、哈希表、跳表、整数集合、quicklist、listpack。 1)底层数据结构1.简单动态字符串(simple dynamic string,SDS)答: Redis 是用 C 语言实现的,但是它没有直接使用 C 语言的 char* 字符数组来实现字符串,而是自己封装了一个名为简单动态字符串(simple dynamic string,SDS) 的数据结构来表示字符串,也就是 Redis 的 String 数据类型的底层数据结构是 SDS。 既然 Redis 设计了 SDS 结构来表示字符串,肯定是 C 语言的 char* 字符数组存在一些缺陷。 Redis 实现的 SDS 的结构就把上面这些问题解决了 2.双向链表答: 3.压缩列表答: 压缩列表的最大特点,就是它被设计成一种内存紧凑型的数据结构,占用一块连续的内存空间,不仅可以利用 CPU 缓存,而且会针对不同长度的数据,进行相应编码,这种方法可以有效地节省内存开销。 但是,压缩列表的缺陷也是有的: ●不能保存过多的元素,否则查询效率就会降低;
因此,Redis 对象(List 对象、Hash 对象、Zset 对象)包含的元素数量较少,或者元素值不大的情况才会使用压缩列表作为底层数据结构。 4.哈希表答: 虽然链式哈希解决了哈希冲突问题,但是随着链表的长度增大,查询效率会越来越低。为了解决这个问题,采用rehash对哈希表的大小进行扩展。 rehash就是redis使用哈希表时,定义了两个哈希表。 渐进式 rehash,也就是将数据的迁移的工作不再是一次性迁移完成,而是分多次迁移。 5.整数集合答: 定义: 6.跳表答: 跳表的数据结构: 跳表结点的数据结构: 跳表的查询: 查找一个跳表节点的过程时,跳表会从头节点的最高层开始,逐一遍历每一层。 如果当前节点的权重「小于」要查找的权重时,跳表就会访问该层上的下一个节点。 这样的做法,相当于每增加一层的概率不超过 25%,层数越高,概率越低,层高最大限制是 64。 跳表的插入: 7.quicklist答: 8.listpack答: 2)5种基本数据类型和4种新数据类型1.字符串答: string的底层数据结构是SDS。 String是Redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。 当前字符串实际分配的空间capacity一般要高于实际字符串长度len。 2.哈希答: Redis hash 是一个键值对集合。 3.列表答: 底层数据结构是快速列表(quicklist) 4.集合答: 底层数据结构是哈希表和整数集合 Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择。 Redis的Set是string类型的无序集合。它底层其实是一个hash表,所以添加,删除,查找的复杂度都是O(1)。 5.有序集合答: Redis有序集合zset与普通集合set非常相似,是一个没有重复元素的字符串集合。 3、Redis事务4、Redis持久化技术5、Redis主从复制1)RDBRedis Database(RDB),就是在指定的时间间隔内将内存中的数据集快照写入磁盘,数据恢复时将快照文件直接再读到内存。 2)AOFAppend-only File(AOF),Redis 每次接收到一条改变数据的命令时,它将把该命令写到一个 AOF 文件中(只记录写操作,读操作不记录),当 Redis 重启时,它通过执行 AOF 文件中所有的命令来恢复数据。 6、Redis哨兵 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 16:54:07- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |