redis和mysql

news2024/11/28 6:52:34

文章目录

      • 一、redis
        • 1.1 redis的数据结构都有哪些?
        • 1.2 持久化方式有哪些?
        • 1.3 怎么保证缓存和数据库数据的一致性?
        • 1.4 redis缓存是什么意思?
      • 二、数据库
        • 2.1 基本数据类型
        • 2.2 MySQL 的内连接、左连接、右连接有什么区别?
        • 2.3 MySQL 问题排查都有哪些手段?
        • 2.4 如何做 MySQL 的性能优化?
        • 2.5 如何避免 SQL 注入?

一、redis

1.1 redis的数据结构都有哪些?

  • key-string:一个key对应一个值。最常用的,一般用于存储一个值。

  • key-hash:一个key对应一个Map。存储一个对象数据的。

  • key-list:一个key对应一个列表。使用list结构实现栈和队列结构。

  • key-set:一个key对应一个集合。交集,差集和并集的操作。

  • key-zset:一个key对应一个有序的集合。排行榜,积分存储等操作。

  • HyperLogLog:计算近似值的。

  • GEO:地理位置。

  • BIT:一般存储的也是一个字符串,存储的是一个byte[]。

img[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2SsxDAnj-1687195308369)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]

1.2 持久化方式有哪些?

RDB:RDB是Redis默认的持久化机制

  • RDB持久化文件,速度比较快,而且存储的是一个二进制的文件,传输起来很方便。
  • RDB持久化的时机:

save 900 1:在900秒内,有1个key改变了,就执行RDB持久化。

save 300 10:在300秒内,有10个key改变了,就执行RDB持久化。

save 60 10000:在60秒内,有10000个key改变了,就执行RDB持久化。

如果300秒内 9个key改变了,也不执行持久化

  • RDB无法保证数据的绝对安全。
  • 假如 60秒内 执行了9999个key改变,RDB也不执行持久化,这时候数据就不是安全的

AOF:AOF持久化机制默认是关闭的,Redis官方推荐同时开启RDB和AOF持久化,更安全,避免数据丢失。

  • AOF持久化的速度,相对RDB较慢的,存储的是一个文本文件,到了后期文件会比较大,传输困难。
  • AOF持久化时机。

appendfsync always:每执行一个写操作,立即持久化到AOF文件中,性能比较低。 appendfsync everysec:每秒执行一次持久化。 推荐使用

appendfsync no:会根据你的操作系统不同,环境的不同,在一定时间内执行一次持久化。

  • AOF相对RDB更安全,推荐同时开启AOF和RDB。

1.3 怎么保证缓存和数据库数据的一致性?

  1. 缓存更新策略: 在进行数据更新操作时,需要保证同时更新缓存和数据库。一种常见的策略是“先更新数据库,再更新缓存”。即在更新数据库之后,立即更新对应的缓存数据。这样可以确保缓存中的数据与数据库中的数据保持一致。
  2. 缓存失效策略: 当数据库中的数据发生更新时,可以通过使缓存失效来保证数据一致性。即在数据库更新操作完成后,手动使对应的缓存失效(或删除)。这样,下次读取该数据时,将从数据库中重新加载最新数据,并将其放入缓存中。
  3. 过期时间设置: Redis提供了设置缓存的过期时间的功能。可以根据数据的特性和业务需求,为缓存设置合适的过期时间。在过期时间到达后,缓存会自动失效,下次读取时将从数据库加载最新数据。通过合理设置过期时间,可以保证缓存中的数据与数据库中的数据保持一致,并避免数据过期导致的一致性问题。
  4. 读写分离: 对于一些高并发的应用场景,可以考虑使用读写分离的架构。即将读操作和写操作分别路由到不同的Redis实例或者节点上。写操作通过主节点更新数据库,并更新缓存,而读操作则通过从节点或者缓存来获取数据,从而保证数据的一致性。

1.4 redis缓存是什么意思?

使用Redis缓存的主要目的是减轻后端数据库的负载,提高系统的性能和响应时间。当应用程序需要访问某些数据时,它首先会尝试从Redis缓存中读取数据。如果缓存中存在所需的数据,应用程序就可以快速获取它,而无需查询数据库。这样可以减少对数据库的频繁访问,提高系统的吞吐量和并发能力。

二、数据库

2.1 基本数据类型

  1. 整数类型(Integer):用于存储整数值,如整数、长整数等。常见的整数类型有INTBIGINT等。
  2. 浮点数类型(Floating-Point):用于存储浮点数,如小数或科学计数法表示的数值。常见的浮点数类型有FLOATDOUBLE等。
  3. 字符串类型(String):用于存储文本或字符数据。字符串类型可以是固定长度的,也可以是可变长度的。常见的字符串类型有CHARVARCHARTEXT等。
  4. 布尔类型(Boolean):用于存储逻辑值,表示真或假。在某些数据库中,布尔类型可以使用1和0来表示。
  5. 日期和时间类型(Date and Time):用于存储日期、时间或日期时间的数值。常见的日期和时间类型有DATETIMEDATETIME等。
  6. 二进制类型(Binary):用于存储二进制数据,如图像、音频或视频文件。二进制类型可以存储任意长度的二进制数据。

2.2 MySQL 的内连接、左连接、右连接有什么区别?

  1. 内连接(Inner Join):内连接返回两个表中满足连接条件的交集数据。只有在连接条件匹配的情况下,才会返回相关的行。如果某个表中的行在另一个表中没有匹配的行,则该行不会包含在结果中。

    例如,如果你有两个表A和B,使用内连接查询SELECT * FROM A INNER JOIN B ON A.id = B.id,结果将只包含那些在A和B表中都有匹配的行。

  2. 左连接(Left Join):左连接返回左表中的所有行,以及右表中满足连接条件的匹配行。如果右表中没有匹配的行,则会使用NULL值填充右表的列。

    例如,使用左连接查询SELECT * FROM A LEFT JOIN B ON A.id = B.id,结果将包含左表A的所有行,以及那些在B表中有匹配的行。

  3. 右连接(Right Join):右连接与左连接相反,它返回右表中的所有行,以及左表中满足连接条件的匹配行。如果左表中没有匹配的行,则会使用NULL值填充左表的列。

    例如,使用右连接查询SELECT * FROM A RIGHT JOIN B ON A.id = B.id,结果将包含右表B的所有行,以及那些在A表中有匹配的行。

需要注意的是,左连接和右连接通常用于连接两个表,而内连接可以用于连接多个表。使用不同类型的连接取决于你需要获取的数据和数据之间的关系。

2.3 MySQL 问题排查都有哪些手段?

  1. 错误日志(Error Log):MySQL会将运行时发生的错误和警告记录到错误日志中。查看错误日志可以帮助你了解数据库中发生的问题,并提供有关错误的详细信息。错误日志的位置和名称可以在MySQL配置文件中找到。
  2. 查询日志(Query Log):通过启用查询日志,可以记录所有进入MySQL服务器的查询语句。查询日志可以帮助你分析执行的查询语句和查询性能。但请注意,启用查询日志可能会对性能产生影响,因为它会记录每个查询。
  3. 慢查询日志(Slow Query Log):慢查询日志用于记录执行时间超过特定阈值的查询语句。通过分析慢查询日志,你可以找到执行时间较长的查询,并对其进行优化。
  4. Explain命令:Explain命令可以用于分析查询语句的执行计划。它可以告诉你查询将如何执行、使用哪些索引以及涉及的表和连接类型。使用Explain命令可以帮助你理解查询的执行过程,并识别潜在的性能问题。
  5. 监控工具和性能分析器:使用监控工具和性能分析器,如MySQL自带的Performance Schema、MySQL Workbench、Percona Toolkit等,可以实时监控MySQL的性能指标、查询执行时间、锁和死锁情况等。这些工具可以帮助你识别性能瓶颈和优化查询。
  6. 数据库配置参数:MySQL有许多配置参数,可以影响性能和行为。检查和调整这些配置参数,如缓冲区大小、连接数、并发控制等,可以优化MySQL的性能和稳定性。
  7. 索引和查询优化:分析查询语句的执行计划、使用合适的索引、优化查询语句的结构等,都是优化MySQL性能的重要手段。通过调整查询和表结构,可以减少查询的执行时间和资源消耗。
  8. 监控系统资源:监控服务器的CPU使用率、内存使用情况、磁盘I/O等系统资源,可以帮助你确定是否存在资源瓶颈,从而解决数据库性能问题。

2.4 如何做 MySQL 的性能优化?

  1. 优化查询语句:
    • 使用合适的索引:根据查询条件和数据访问模式创建适当的索引,以加快查询速度。
    • 减少查询返回的数据量:只选择需要的列,避免使用SELECT *,并使用LIMIT限制结果集的大小。
    • 使用JOIN语句优化查询:避免多次单表查询,合理使用JOIN语句来连接多个表。
    • 优化复杂查询:考虑重写复杂查询,拆分成多个简单查询或使用临时表等方式进行优化。
  2. 配置优化:
    • 调整缓冲区大小:合理配置MySQL的缓冲区大小,如缓存池、查询缓存等,以提高数据读取和写入的效率。
    • 调整并发连接数:根据系统负载和硬件配置,适当调整最大连接数,避免过多的并发连接导致性能下降。
    • 调整其他配置参数:根据实际情况,调整MySQL的其他配置参数,如线程池、排序缓冲区、临时表大小等,以优化性能。
  3. 硬件和存储优化:
    • 使用合适的硬件:选择合适的硬件设备,包括CPU、内存、存储等,以满足系统的需求。
    • 使用合理的存储引擎:根据应用程序的特点和需求,选择合适的存储引擎,如InnoDB、MyISAM等。
    • 配置文件系统和磁盘:确保文件系统和磁盘的性能良好,并遵循最佳实践进行配置。
  4. 数据库设计优化:
    • 范式化和反范式化:根据数据的特点和查询需求,进行范式化或反范式化的设计,以提高查询效率。
    • 分区和分表:对大型表进行分区或分表,可以提高查询和维护的效率。
    • 垂直和水平拆分:根据业务需求,将大型数据库拆分成更小、更专注的部分,以提高性能和可扩展性。
  5. 定期维护和监控:
    • 定期优化数据库:执行表优化、索引优化、碎片整理等操作,以保持数据库的健康状态。
    • 监控和性能分析:使用监控工具和性能分析器监控MySQL的性能指标、查询执行时间等,识别潜在的性能问题,并及时进行调整和优化。

2.5 如何避免 SQL 注入?

  1. 使用参数化查询(Prepared Statements)或预编译语句:参数化查询是将SQL查询语句和参数分开处理,确保用户输入的数据不会被直接嵌入到查询语句中。数据库会预编译查询语句,然后将参数传递给查询,从而避免了SQL注入攻击。
  2. 使用存储过程(Stored Procedures):存储过程是预先定义在数据库中的一组SQL语句。通过使用存储过程,可以将数据校验和处理逻辑置于数据库层面,从而降低SQL注入的风险。
  3. 输入验证和过滤:对用户输入的数据进行验证和过滤,确保只接受预期的数据类型和格式。使用白名单或正则表达式等方法对输入进行限制,过滤掉非法字符或语法,从而防止恶意输入被执行为SQL语句。
  4. 不信任外部数据:将用户输入的数据视为不可信任的,并对其进行适当的转义或编码。使用数据库提供的转义函数或编码函数,如PDO的quote()方法或相关编程语言的转义函数,来处理输入数据。
  5. 最小权限原则:将数据库用户授予最低权限,只赋予其执行必要操作的权限,限制对数据库的访问范围,从而减少潜在攻击的影响范围。
  6. 定期更新和维护:及时应用数据库供应商发布的安全更新和补丁,以修复已知的安全漏洞。同时,定期审查和维护应用程序的代码,修复可能存在的安全漏洞。
    用户授予最低权限,只赋予其执行必要操作的权限,限制对数据库的访问范围,从而减少潜在攻击的影响范围。
  7. 定期更新和维护:及时应用数据库供应商发布的安全更新和补丁,以修复已知的安全漏洞。同时,定期审查和维护应用程序的代码,修复可能存在的安全漏洞。
  8. 安全意识培训:加强开发人员和管理员的安全意识培训,提高对SQL注入攻击的认识,遵循安全编码的最佳实践,以减少安全漏洞的风险。

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

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

相关文章

第二章(第三节):导数的应用

1.洛必达法则 1.用途 能够使用洛必达法则解决常见的未定式问题。2.极限下的未定式 如果当 x→a 或 x→∞ 时,函数f(x)和g(x)均趋于零或者无穷,那么极限:可以存在,也可能不存在。通常这种极限为:0/0型或∞/∞型未定式。3.示例 1.lim x→0; (1-cosx) / x 2 ^2

机器人开发--Fast DDS

机器人开发--Fast DDS 1 介绍1.1 DDS概述1.2 Fast DDS 介绍域与域通信跨网络通信 2 内容要素与组件介绍IDL (Interface Definition Language)eProsima Fast DDS-Gen? 3 安装步骤3.1 安装选择(linux源码cmakec)3.2 模块…

shardingsphere第四课shardingsphere-proxy的使用

一、为什么要有服务端分库分表? 配合 ORM 框架使用更友好 当使用 ShardingSphere-JDBC 时,需要在代码中直接编写分库分表的逻辑,如果使用 ORM 框架,会产生冲突。ShardingSphere-Proxy 作为服务端中间件,可以无缝对接 ORM 框架。 对 DBA 更加友好 ShardingSphere-Pr…

第八章 time模块

1. time模块介绍 time 模块提供了各种时间相关的函数,该模块中对于时间表示的格式有如下三种: 时间戳(timestamp):时间戳表示的是从1970 年1 月1 日00:00:00 开始按秒计算的偏移量。 时间元组(struct_tim…

每日复盘|6月19日

7:00-7:20 起床洗漱到教室 7:30-8:15 乐词 8:15-9:05 听力con*1 lec*1 9:05-10:47 听力真题 11:00-11:50 考研英语阅读真题 12:00-12:30 午饭🥣+桃子🍑 12:30-13:30 不背单词 13:30-14:00 午睡 14:00-…

SpringMVC07:Ajax研究

目录 一、项目启动时报错点 二、简介 三、伪造Ajax 四、jQuery.ajax 五、Springmvc实现一个list集合显示前端 六、注册提示效果 一、项目启动时报错点 6月 16, 2023 10:34:37 上午 org.apache.catalina.core.StandardContext filterStart 严重: 启动过滤器异常 java.lan…

6-JMM

目录 1.主内存与工作内存 2.内存间交互操作 Java内存模型的三大特性: happens-before原则(先行发生原则): 3.volatile型变量的特殊规则 ①保证此变量对所有线程的可见性 ②使用volatile变量的语义是禁止指令重排序 JVM定义…

node.js+vue+express企业客户关系管理系统mysql

开发语言 node.js 框架:Express 前端:Vue.js 数据库:mysql 数据库工具:Navicat 开发软件:VScode 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身…

21.模糊神经网络预测水质评价(附matlab程序)

1.简述 学习目标:模糊神经网络预测水质评价——重风水厂、 高升水厂、秦玺水厂 采用模糊神经网络预测这三个水厂的水质,并进行对比 模糊神经网络(Fuzzy Neural Network, FNN) 背景 系统复杂度的增加,人工智能深度化发展 模糊数学创始人L. A…

io.netty学习(四)ChannelHandler

目录 前言 正文 ChannelHandler ChannelInboundHandler ChannelOutboundHandler ChannelDuplexHandler 总结 前言 先简略了解一下ChannelPipeline和ChannelHandler的概念。 想象一个流水线车间。当组件从流水线头部进入,穿越流水线,流水线上的工…

第四章 组合逻辑电路--数电(期末复习笔记)

第四章 组合逻辑电路 本章重点: 1. 组合逻辑电路的分析与设计方法 2. 常用组合逻辑模块的使用 4.1 概述 4.11 组合逻辑电路 任一时刻的输出仅取决于该时刻的输入,与电路原来的状态无关。4.12 时序逻辑电路 任一时刻的输出不仅取决于现时的输入&am…

电容的基本工作原理

目录 电容器的发展历程现象发现第一个存储电荷的元器件:莱顿瓶真正出名的时刻 为什么电容器的容量单位称为法拉?电容器和电容的区别电容的组成电介质与电解质对电容的影响电容是如何工作的通交流阻直流阻直流通交流 电容器的单位电容的容抗电容常见的种类…

Idea Mybatis插件:提高CRUD效率

mybatis-sql-viewer插件主要提供能力:将mybatis xml转成真实SQL语句、参数mock、SQL规范检查、SQL索引检查、SQL运行、SQL压测及Mybatis SQL语句扫描。 1. 简介 虽然写了很久的CRUD,但是依旧觉得写好CRUD是一件非常难且麻烦的事情,以下的情…

chatgpt赋能Python-python找出不同部分

介绍 在SEO(Search Engine Optimization)领域,比较常见的问题之一是如何快速有效地查找出两段文本的不同部分。这对于优化网站内容或对比竞争对手的网站内容都非常有用。Python作为一种强大的编程语言,其特性和库使得这种任务变得…

神经网络入门①多层感知器如何解决异或问题?

文章目录 1. 多层感知器2. BP算法参考文献 1. 多层感知器 感知机(perceptron)早在20世纪50年代就提出来了1,但直到近几年深度学习的崛起,神经网络才再次走入大众的视野,并且成为了当下最热门的研究方向之一。 一个单层…

MybatisPlus的save方法

当我前端传递的是一个整合的数据模型Dto,需要同时插入俩张表,并且其中一张表的属性需要得到另一张表的id,如何实现呢?这个时候MP封装好的插入方法:save就起了很好的作用 public R<String> SaveNewDish(DishDto dishdto) { // 1. 保存菜品基本信息log.info("前…

MySQL优化--覆盖索引,超大分页查询

目录 覆盖索引 MYSQL超大分页处理 面试回答 大纲 回答 覆盖索引 覆盖索引是指查询使用了索引&#xff0c;并且需要返回的列&#xff0c;在该索引中已经全部能够找到 。 MYSQL超大分页处理 在数据量比较大时&#xff0c;如果进行limit分页查询&#xff0c;在查询时&#…

一步一步教你如何使用MMSelfSup框架【1】

介绍 任务介绍 自监督学习(Self-supervised learning, SSL)是一种极具潜力的学习范式&#xff0c;它旨在使用海量的无标注数据来进行表征学习。在SSL中&#xff0c;我们通过构造合理的预训练任务&#xff08;可自动生成标注&#xff0c;即自监督&#xff09;来进行模型的训练…

C#探索之路(8):初探.Net中官方文档OpCode的格式

C#探索之路(8)&#xff1a;初探.Net中官方文档OpCode的格式 文章目录 C#探索之路(8)&#xff1a;初探.Net中官方文档OpCode的格式1 前提2 疑惑1&#xff1a;Opcode格式是什么&#xff1f;3 答疑1&#xff1a;4 验证方式&#xff1a;5 总结 1 前提 最近在尝试了解学习这个OpCod…

使用ChatGPT最新版实现批量写作,打造丰富多彩的聚合文章

随着人工智能的迅猛发展&#xff0c;ChatGPT最新版作为一种自然语言处理模型&#xff0c;可以为我们提供强大的文本生成能力。在这篇文章中&#xff0c;我们将探讨如何利用ChatGPT最新版来实现批量写作&#xff0c;从而打造丰富多彩的聚合文章。 一、ChatGPT最新版简介 Chat…