NoSQL数据库实战派

ops/2024/9/22 15:07:52/

第二章 Redis基础

缓存通过“用空间换时间”来达到数据获取的目的。

缓存的成本较高,在实际设计架构中需要权衡访问延迟和成本。

通过缓存,可以提升访问性能、降低网络拥堵、减轻服务负载和增强可扩展性。

一般情况下,数据被存放在数据库中,应用程序直接操作数据库。当应用程序访问量达到上万条时,数据库服务器的压力会增大。如果需要减轻数据库服务器的压力:

1.实现数据库的读写分离。

2.实现数据库的分库分表。

3.使用缓存,并实现读写分离。

缓存的原理是:将应用程序已经访问过的内容或数据存储起来,当应用程序再次访问这些内容或数据时先从缓存中查找:如果缓存命中,则返回数据;如果缓存不命中,则再次查找数据库,并将得到的内容或数据保存到缓存中。

缓存具有以下缺点:

1.在系统中引入缓存,会增加系统的复杂度。

2.缓存比数据库的存储成本更高,系统部署及运行的费用也更高。

3.由于一份数据被同时存放到缓存和数据库中,甚至缓存中也会有多个数据副本,所以会存在多份数据不一致的问题。

Redis是完全开源的,并遵守BSD协议,它是一个高性能的Key-Value数据库。具有以下三个特点:

1.支持数据持久化,可以将缓存中的数据保存到磁盘中,重启后可以再次加载到这些数据进行使用。

2.不仅支持Key-Value类型的数据,还支持基于list、set、zset、hash等数据结构的存储。

3.支持Master-Salve模式的数据备份。

2.1.2 Redis的优势

Redis是基于内存的数据库,读操作和写操作都在内存中完成,速度完全超过磁盘数据库的读写速度。

Redis之所以具有很高的性能,主要得益于以下几点:

1.纯内存操作。一般都是简单的读写操作,,线程占用的时间很少,时间的花费主要集中在I/O上,所以读写数据快。

2.采用单线程模型。从而保证每个操作的原子性,也减少了线程上下文切换和竞争。

3.使用I/O多路复用模型。非阻塞I/O;使用单线程来轮询描述符;将数据库的开、关、读、写都转换成了事件;Redis采用自己实现的事件分离器,效率比较高。

4.高效的数据结构。

 · 整个Redis就是一个全局哈希表,其时间复杂度是O(1),而且Redis会执行再哈希操作以防止因哈希冲突导致链表过长。并且为防止一次性重新映射时数据过大导致线程阻塞,Redis采用了渐进式再哈希,巧妙地将一次性复制分摊到多次操作中,从而避免了阻塞。

 · Redis使用哈希结构和有序的数据结构加快了读写速度。

 · Redis对数据存储进行了优化,对数据进行压缩存储,还可以根据实际存储的数据类型选择不同编码。

2.1.3 Redis与其他Key-Value数据库有何不同

Redis有着更为复杂的数据结构,并且提供了对它们的原子性操作(这一个不同于其他Key-Value数据库的重点)。Redis的数据类型都是基本数据结构,并且对程序员透明,程序员无需进行额外的抽象。

Redis运行在内存中,但是其数据可以持久化到磁盘中,所以在对不同数据进行高速读写时,数据量不能多于内存的存储空间。

Redis的另一个优点是:对于在磁盘上操作比较复杂的数据结构,在内存中操作它们非常简单,这样Redis可以做很多复杂性很强的事情。同时,在磁盘格式方面,内存数据库以追加方式写入数据,因为它不需要进行随机访问。


http://www.ppmy.cn/ops/114296.html

相关文章

macOS平台编译libidn2库给iOS及macOS用

1.克隆源码: git clone https://gitlab.com/libidn/libidn2.git --recursive 2.安装依赖库: pkg-config也要安装 3.启动bootstrap生成configure 配置成功 configure生成成功

PHP发邮件教程:配置SMTP服务器发送邮件?

PHP发邮件的几种方式?如何使用PHP通过SMTP协议发信? PHP作为一种广泛使用的服务器端脚本语言,提供了多种方式来发送邮件。AokSend将详细介绍如何通过配置SMTP服务器来实现PHP发邮件教程的核心内容。 PHP发邮件教程:设置参数 这…

hive分区详细教程

为什么要分区? 为了提高sql的查询效率 比如: select * from orders where create_date20230826; 假如数据量比较大,这个sql就是全表扫描,速度肯定慢。 可以将数据按照天进行分区,一个分区就是一个文件夹,当…

安装selenium、chrome、chromedriver.exe相对应的版本

第一步:安装python3.8 第二步:安装selenium pip install selenium4.3.0 第三步:安装chrome 参考这个博客的版本信息。以104.0.5112.102为例。 https://blog.csdn.net/tekin_cn/article/details/136817228 第四步:安装chromed…

mysql性能优化-SQL 查询优化

MySQL 性能优化之 SQL 查询优化 MySQL 是常用的开源关系型数据库管理系统(RDBMS),具有高效、稳定、易用等特点。在大数据量和高并发的场景中,数据库性能的瓶颈往往是 SQL 查询不够高效。因此,SQL 查询优化是 MySQL 性…

聚观早报 | 小米三折叠手机专利曝光;李斌谈合肥投资蔚来

聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。 整理丨Cutie 9月20日消息 小米三折叠手机专利曝光 李斌谈合肥投资蔚来 索尼PS5 Pro包装亮相 新一代Spectacles AR眼镜发布 通…

Qt:智能指针QScopedPointer 的使用(以及如何写一个QScopedPointer )

前言 本文讲述QScopedPointer 的使用&#xff0c;以及自己如何写一个QScopedPointer . 正文 QScopedPointer 的常用方法 以下是 QScopedPointer 的一些常用方法及其详细说明&#xff1a; 构造函数&#xff1a; QScopedPointer<T> ptr(new T);用于创建一个 QScopedPoi…

mysql学习教程,从入门到精通,SQL DISTINCT 子句 (16)

1、SQL DISTINCT 子句 SQL 的 DISTINCT 子句是一个强大的工具&#xff0c;用于在查询结果中消除重复的行&#xff0c;只保留唯一的数据记录。当处理数据库中的数据时&#xff0c;经常会遇到同一列或多列中存在重复值的情况。DISTINCT 子句可以帮助我们专注于唯一的值&#xff…