对redis进行深入学习

目录

  • 1. 什么是redis?
    • 1.1 为什么使用redis作为缓存?
      • 1.1.0 数据库(MySQL)与 redis
        • 1. 存储介质不同(408选手应该都懂hh)
        • 2. 数据结构优化
        • 3. I/O模型差异
        • 4. CPU缓存友好性
        • 5. 单线程与多线程差异
        • 6. 持久化与缓存差异
        • 7. 主从复制与分布式差异
      • 1.1.1 Redis 与 Memcached
        • 1. 共同点
        • 2. 区别
    • 1.2 为什么用 Redis 作为 MySQL 的缓存?
      • 1.2.1 高性能
      • 1.2.2 高并发
  • 2. redis数据结构
    • 2.1 String(字符串)
    • 2.2 Hash(哈希)
    • 2.3 List(列表)
    • 2.4 Set(集合)
    • 2.5 Zset(有序集合)
  • 3. 总结

1. 什么是redis?

Redis,就是一种特别快的“数据库”,它把数据存在内存里,让你能超级快地存和取数据。其实就是缓存。
举2个例子:

— Redis,就像是一个超快速的记事本,它能够帮你快速地记录和查找信息。
— 比如说,你去超市购物,每买一样东西就记在记事本上。这样,当你需要知道买了什么或者花了多少钱时,只需要打开记事本一看就清楚了,而不需要翻遍所有的购物袋。
— 再比如,你在网上看视频,Redis就像是一个智能的“最近播放”列表,能记住你最近看过哪些视频,这样下次想看时就能快速找到,而不需要从一大堆视频中慢慢搜索。
Redis 是一种基于内存的数据库,对数据的读写操作都是在内存中完成,因此读写速度非常快,常用于缓存,消息队列、分布式锁等场景。
Redis 虽说是内存数据库,但是 Redis 其实是会把缓存数据保存到硬盘的,只要保存缓存数据的文件没有丢,缓存数据自然就能恢复。

Redis 提供了多种数据类型来支持不同的业务场景,比如 String(字符串)、Hash(哈希)、 List (列表)、Set(集合)、Zset(有序集合)、Bitmaps(位图)、HyperLogLog(基数统计)、GEO(地理信息)、Stream(流),并且对数据类型的操作都是原子性的,因为执行命令由单线程负责的,不存在并发竞争的问题。
除此之外,Redis 还支持事务 、持久化、Lua 脚本、多种集群方案(主从复制模式、哨兵模式、切片机群模式)、发布/订阅模式,内存淘汰机制、过期删除机制等等。

1.1 为什么使用redis作为缓存?

缓存技术确实有很多种,比如Memcached、Varnish等,但选择Redis作为缓存解决方案的原因有多个,比较一下各种缓存技术。

1.1.0 数据库(MySQL)与 redis

Redis能够提供比传统数据库更快的数据读取速度,主要是由于存储介质差异、数据结构优化、I/O模型差异、CPU缓存友好性、单线程与多线程差异、持久化与缓存差异以及主从复制与分布式差异等多方面因素共同作用的结果。

1. 存储介质不同(408选手应该都懂hh)

从计算机组成原理的角度来看:Redis作为内存数据库,将数据直接存储在RAM中,而RAM的访问速度远高于磁盘。数据库通常将数据存储在磁盘上,即使是内存数据库,也可能需要将数据同步到磁盘以确保持久性。因此,从Redis中读取数据时,可以避免磁盘I/O的延迟,从而提高性能。

2. 数据结构优化

Redis使用高效的数据结构来存储数据,如哈希表、跳跃表等,这些数据结构能够快速地进行数据的查找、插入和删除操作。相比之下,数据库可能使用更为复杂的数据结构(如B树、索引等),在数据操作上可能不如Redis高效。

3. I/O模型差异

Redis采用非阻塞I/O模型(如epoll、kqueue等),能够处理大量并发连接,同时保持较低的系统开销。这种模型使得Redis能够在高并发环境下保持较低的延迟。而数据库通常采用阻塞I/O模型,在高并发场景下可能会受到I/O瓶颈的限制,导致性能下降。

4. CPU缓存友好性

Redis的设计注重CPU缓存的利用,尽量减少CPU缓存的 miss rate(未命中率),从而提高数据访问性能。而数据库系统可能更注重数据的持久性和一致性,导致其设计可能不是那么CPU缓存友好。

5. 单线程与多线程差异

Redis采用单线程模型处理请求,避免了多线程环境下的线程切换和竞态条件问题,简化了开发和维护的复杂性。这种模型减少了上下文切换的开销,提高了CPU的利用率。而数据库系统通常采用多线程模型,在处理请求时可能会涉及到线程切换和锁竞争等问题,影响性能。

6. 持久化与缓存差异

Redis作为缓存系统,主要承担数据读写和缓存任务,可以通过合理的配置和策略,将持久化操作的影响降到最低。而数据库系统通常承担着数据持久化的任务,需要在保证数据安全性和一致性的同时进行数据读写操作。

7. 主从复制与分布式差异

Redis支持主从复制和哨兵模式,可以实现数据的复制和故障恢复,提高了系统的可用性和容错能力。这种模式在Redis中实现得更为简单和高效。而数据库在分布式环境下可能需要更复杂的数据同步和一致性保障机制,这可能会增加额外的性能开销。

1.1.1 Redis 与 Memcached

1. 共同点

1.都是基于内存的数据库,一般都用来当做缓存使用。
2.都有过期策略。
3.两者的性能都非常高。

2. 区别

1.速度快:Redis基于内存操作,读写速度非常快,能够显著提升数据访问性能。
2.Redis 支持的数据类型更丰富(String、Hash、List、Set、ZSet),而 Memcached 只支持最简单的 key-value 数据类型;
3.Redis 支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用,而 Memcached 没有持久化功能,数据全部存在内存之中,Memcached 重启或者挂掉后,数据就没了;
4.Redis 原生支持集群模式,Memcached 没有原生的集群模式,需要依靠客户端来实现往集群中分片写入数据;
5.高可用和分布式:Redis可以通过主从复制、哨兵模式和集群等方式实现高可用性和水平扩展,满足大规模部署的需求。
6…Redis 支持发布订阅模型、Lua 脚本、事务等功能,而 Memcached 不支持;

1.2 为什么用 Redis 作为 MySQL 的缓存?

主要是因为 Redis 具备**「高性能」「高并发」**两种特性。

1.2.1 高性能

假如用户第一次访问 MySQL 中的某些数据。这个过程会比较慢,因为是从硬盘上读取的。将该用户访问的数据缓存在 Redis 中,这样下一次再访问这些数据的时候就可以直接从缓存中获取了,操作 Redis 缓存就是直接操作内存,所以速度相当快。

在这里插入图片描述
如果 MySQL 中的对应数据改变的之后,同步改变 Redis 缓存中相应的数据即可,不过这里会有 Redis 和 MySQL 双写一致性的问题,后面我们会提到。

1.2.2 高并发

单台设备的 Redis 的 QPS(Query Per Second,每秒钟处理完请求的次数) 是 MySQL 的 10 倍,Redis 单机的 QPS 能轻松破 10w,而 MySQL 单机的 QPS 很难破 1w。

所以,直接访问 Redis 能够承受的请求是远远大于直接访问 MySQL 的,所以我们可以考虑把数据库中的部分数据转移到缓存中去,这样用户的一部分请求会直接到缓存这里而不用经过数据库。

Redis的高并发性能得益于其高效的数据结构、非阻塞I/O模型、单线程处理、管道化和批量操作、持久化机制、主从复制和哨兵模式以及集群模式等多方面的设计和优化。这使得Redis成为构建高并发应用场景(如缓存、消息队列、实时分析等)的理想选择。

2. redis数据结构

Redis 提供了丰富的数据类型,常见的有五种数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)、Zset(有序集合)。

2.1 String(字符串)

字符串是Redis最基本的数据类型,可以存储文本、数字或者二进制数据。常用操作包括设置值、获取值、追加值、截取值等。应用场景包括计数器、标签、配置信息等。

2.2 Hash(哈希)

哈希是键值对的集合,适合存储对象。常用操作包括设置键值对、获取键值对、删除键值对等。应用场景包括用户信息、商品信息、缓存数据等。

2.3 List(列表)

列表是简单的字符串列表,按插入顺序排序。常用操作包括从左侧或右侧插入元素、获取指定范围的元素、删除元素等。应用场景包括消息队列、日志记录、时间线等。

2.4 Set(集合)

集合是无序且唯一的字符串集合,适合存储去重后的数据集。常用操作包括添加元素、删除元素、判断元素是否存在等。应用场景包括标签系统、好友关系、去重统计等。

2.5 Zset(有序集合)

有序集合是带有分数的字符串集合,按分数排序。常用操作包括添加元素、删除元素、获取指定分数范围的元素等。应用场景包括排行榜、地理位置信息、时间事件等。

3. 总结

未完,更新中,还要学一下redis的持久化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/47681.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Postcat使用全解析

文章目录 引言官网链接Postcat原理概述基础使用安装与启动创建与发送请求环境变量 高级使用集合与预请求脚本代码生成器 优缺点分析优点缺点 结论 引言 Postcat,作为一款功能丰富的API开发与测试工具,受到了广大开发者的喜爱。它提供了直观的用户界面和…

C语言 二叉树,一个猜动物的小游戏

1. 此项目用到的知识点: 二叉树, struct, 文件读写。 2. 其中最复杂的地方是:复制一个指针的内容,参考:https://stackoverflow.com/questions/39938648/copy-one-pointer-content-to-another 1. 头文件 "node_ut…

进程的地址空间

一、写个代码见一见地址空间 1、问题 在代码中我们在第五秒时会在子进程中改变全局变量 g_val 但是我们发现了一个奇怪的现象:在子进程中改变 g_val ,由于进程的独立性,所以子进程和父进程的值不一样是可以理解的,但是为什么变量…

20240718每日后端------------kafka VS RabbitMQ:选择正确的消息代理

目标 消息队列选型 Kafka VS RabbitMQ Kafka Apache Kafka 是一个开源分布式事件流平台,以其高吞吐量、容错性和实时数据处理能力而闻名。 Kafka 遵循发布-订阅模型,生产者将消息写入主题,消费者订阅这些主题以接收消息。 Kafka 将消息存储…

【C++11】线程

本篇文章更多的是熟悉一下C11的线程库接口,与linux的相关线程接口是非常相似的,更多的是将面向过程改为了面向对象。 并没有一些概念的讲解。 想知道线程的相关概念的可以看一看这篇文章及后续 在C11之前,涉及到多线程问题,都是和…

访问控制系列

目录 一、基本概念 1.客体与主体 2.引用监控器与引用验证机制 3.安全策略与安全模型 4.安全内核 5.可信计算基 二、访问矩阵 三、访问控制策略 1.主体属性 2.客体属性 3.授权者组成 4.访问控制粒度 5.主体、客体状态 6.历史记录和上下文环境 7.数据内容 8.决策…

使用TableConvert API将CSV转换为JSON数组

TableConvert API 是一款多功能工具,旨在简化不同数据格式之间的转换过程。通过访问370种不同的转换器,该API可以在包括CSV、Excel、HTML、JSON、Markdown等多种文件类型和结构之间实现无缝数据转换。 为什么选择TableConvert的CSV到JSON数组API&#x…

面试问题:react的Reconciler(调度器)为什么在做异步可中断不用原生Generator,自己做了一个Fiber

首先Generator也是有异步中断功能的但是能他是有传染性的,使用了Generator则需要上下文的其他函数也需要做主改变,这样心智负担比较重,就比如说我定义一个Generator方法,里面有ABC三个函数我分别在B的前面和C的前面放一个yield打断…

Linux: network: device事件注册机制 chatGPT; notify

ChatGPT 在 Linux 内核中,有关网络设备(net-device)的事件注册机制,允许用户在网络设备的状态发生变化(例如设备被删除、添加或修改)时接收通知。这主要通过 netdev 事件通知机制实现。具体来说,内核提供了一组用于注册和处理网络设备事件的 API。 以下是一些关键组件…

memcached 高性能内存对象缓存

memcached 高性能内存对象缓存 memcache是一款开源的高性能分布式内存对象缓存系统,常用于做大型动态web服务器的中间件缓存。 mamcached做web服务的中间缓存示意图 当web服务器接收到请求需要处理动态页面元素时,通常要去数据库调用数据,但…

【快速逆向一/无过程/有源码】《大学》在线投稿系统

逆向日期:2024.07.18 使用工具:Node.js 加密工具:Crypto-js标准库 文章全程已做去敏处理!!! 【需要做的可联系我】 【点赞 收藏 关注 】仅供学习,仅供学习, 本文为快速逆向&#x…

如果制作红星照耀中国思维导图?6个软件帮助你快速制作思维导图

如果制作红星照耀中国思维导图?6个软件帮助你快速制作思维导图 制作《红星照耀中国》思维导图可以帮助更好地理解和梳理书中的重要信息和内容。以下是六款推荐的思维导图软件及其特点和使用方法,帮助你快速制作高质量的思维导图。 迅捷画图 特点与功…

Milvus核心组件(2)---- etcd 详解

目录 背景 etcd 简介 1. 基本概念 2. 数据存储特性 3. KVS的操作 4. 租约(Lease)机制 5. 实际应用场景 Milvus 下的 etcd 服务及存储结构 etcd 服务 端口 存储位置 安全连接信息 嵌入式方式运行 etcd 文件存储结构 解析etcd 文件 连接 etcd server 注意事项…

n2. Web相关知识和工具

Web相关知识和工具 1. http协议相关基础知识2. http协议状态码3. Web相关工具2.1 links2.2 wget2.3 curl2.4 httpie 4. httpd的压力测试工具 1. http协议相关基础知识 URI: Uniform Resource Identifier 统一资源标识,分为URL 和 URN URN:U…

Python基础语法篇(下)+ 数据可视化

Python基础语法(下) 数据可视化 一、函数(一)函数的定义(二)函数的调用和传参 二、文件操作(一)文件读取和写入(二)文件对象及方法(三&#xff09…

【数学建模】——【线性规划】及其在资源优化中的应用

目录 线性规划问题的两类主要应用: 线性规划的数学模型的三要素: 线性规划的一般步骤: 例1: 人数选择 例2 :任务分配问题 例3: 饮食问题 线性规划模型 线性规划的模型一般可表示为 线性规划的模型标准型&…

达梦数据库的系统视图v$sqltext

达梦数据库的系统视图v$sqltext 在达梦数据库(DM Database)中,V$SQLTEXT 是一个系统视图,用于显示当前正在执行或最近执行的SQL语句的文本信息。这个视图对于监控和分析数据库中的SQL活动非常有用,尤其是在需要调试性…

【MySQL篇】Percona XtraBackup工具备份指南:常用备份命令详解与实践(第二篇,总共五篇)

💫《博主介绍》:✨又是一天没白过,我是奈斯,DBA一名✨ 💫《擅长领域》:✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux,也在扩展大数据方向的知识面✌️…

银河麒麟搭建ftp服务器

1.先 查看系统架构,我常遇到的一般银河麒麟是arrch64的 lscpu uname -a cat /etc/os-release 去下载对应版本的vsftp.rpm包和ftp包 Index of /NS/ (cs2c.com.cn) 1.安装rpm rpm -ivh *.rpm --nodeps --force #强制安装 2.修改配置文件 vi /etc/vsftpd/vsftpd.co…

Qt Android Native Error: JNI DETECTED ERROR IN APPLICATION: java_object == null

开发的qt android程序在低版本上运行正常&#xff0c;在高版本上启动时崩溃&#xff0c;报如下错误 W java.lang.RuntimeException: Cant create handler inside thread Thread[qtMainLoopThread,5,main] that has not called Looper.prepare()at android.os.Handler.<ini…