redis和mysql

news/2024/9/23 9:26:09/

文章目录

      • 一、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.ppmy.cn/news/477040.html

相关文章

电容的分类与区别

版权声明:本版面文章皆为原创、或参考其他技术网站、博客后自己动手做实验所得,转载请注明出处------028后勤仓库管理员。 作为电子硬件工程师,熟悉各类电容的区别和使用方法是很有必要的。下面来简单介绍下几种常用电容的区别。 一、电容的分…

麦克风MIC 工作原理以及灵敏度调整

https://blog.csdn.net/Charles0512/article/details/50472467?locationNum6&fps1 1、先看MIC电路连接 这是个差分输入的例子,MICP2和MICN2是一对差分信号,经过C156的滤波,输入到MIC两端 MIC两引脚分别是到地和供电,上图的R…

太诱电容不同系列区别

太诱-J系列是软端接口MLCC 太诱-R系列是用于车规中高压 MLCC 太诱-K系列是常规镀层端口MLCC

什么是超级电容?它与普通电容有何区别?

超级电容,又名电化学电容、双电层电容器、黄金电容、法拉电容,是从上世纪七、八十年代发展起来的通过极化电解质来储能的一种电化学元件。它不同于传统的化学电源,是一种介于传统电容器与电池之间、具有特殊性能的电源,主要依靠双…

MEMS压电麦克风

MEMS压电麦克风 压电材料 压电材料是指受到压力作用在其两端面会出现电荷的一大类单晶或多晶的固体材料,它是进行能量转换和信号传递的重要载体。最早报道材料具有压电特性的是法国物理学家居里兄弟,1880年他们发现把重物放在石英晶体上,晶体…

普通麦克风和多阵列麦克风的区别

普通麦克风是指单个的麦克风。或者说多个麦克风但是这些麦克风之间没有加入处理电路或芯片, 那么这些也是普通麦克风。 麦克风阵列是多个麦克风按一定方式排列在一起,由于加入芯片,像昆虫的复眼一个能够精确定位, 可以通过芯片&…

nginx的操作手册和nginx的升级

总结 目录 一首先关闭防火墙和下载nginx包 1.安装依赖包 2.创建运行用户与组 3.进入nginx的目录下进行编译安装 4. 编译和编译安装 5.让系统识别nginx的操作命令 ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ 6.添加nginx系统服务把nginx服务加入到…

陀螺仪和导航系统关系

陀螺仪是惯性导航。 陀螺仪是导航系统的一部分。 当经过接收不到GPS信号的区域是,陀螺仪根据移动物体的方向速度,计算出物体的位置。 例如,手机上的GPS导航和陀螺仪之间的相互关系如下:手机导航只是通过GPS卫星定位导航的&…