0

因为一次redis缓存穿透,全面探究redis能做什么

问题背景:网关支付,支付之前需要根据商户去获取支持的银行列表,银行列表是商家首次在我们系统里申请开户的时候配置进去的,第一次获取列表是通过调远程接口查询数据库获取的,获取成功后,结果保存在redis缓存中,有效期设置6小时,以后每次查询都直接访问redis缓存即可。出现问题是有一批新商户没有配置银行列表,发起支付获取银行列表时,首次调用接口获取结果失败,没有放置缓存;商户反复提交了4次,每次访问缓存不存在,然后远程调用接口服务,接口返回同样不存在的错误,导致第5次远程调用返回500错误。这是典型的缓存穿透问题。缓存穿透是指用户不断发起请求缓存和数据库中都没有的数据,这时的用户很可能是攻击者,攻...

阅读全文>>

0

最完整的Explain总结,妈妈再也不担心我的SQL优化了

在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询时,会返回执行计划的信息,而不是执行这条SQL(如果 from 中包含子查询,仍会执行该子查询,将结果放入临时表中)CREATE TABLE `film` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `name` varchar(10) DEFAULT NULL,  PRIMARY KEY...

阅读全文>>

0

mysql数据库优化方案之分库分表,轻松解决亿级数据问题

今天介绍下sharding-sphere,主要介绍他的特性,分库分表的技术的详解。(一)下载源码官网地址获取源码https://shardingsphere.apache.org/index_zh.html下载源码因为git的包名比较长,git有可以创建4096长度的文件名,然而在windows最多是260,因为git用了旧版本的windows api,为此踩了个坑。从github克隆一个项目下发出现了错误:git config --global core.longpaths true克隆项目没选择github,毕竟国外服务器,下载还是比较慢idea下载完毕(二)分片的核心概念SQL核心概念逻...

阅读全文>>

0

Redis到底该怎么搞呢?主从复制以及redis复制演进全面进攻

一、前言通过持久化功能,Redis保证了即使在服务器宕机情况下数据的丢失非常少。但是如果这台服务器出现了硬盘故障、系统崩溃等等,不仅仅是数据丢失,很可能对业务造成灾难性打击。为了避免单点故障通常的做法是将数据复制多个副本保存在不同的服务器上,这样即使有其中一台服务器出现故障,其他服务器依然可以继续提供服务。当然Redis提供了多种高可用方案包括:主从复制、哨兵模式的主从复制、以及集群。本文将详细介绍Redis从2.6以到4.0提供复制方案的演进,也包括:主从复制、复制原理以及相关实践。二、主从复制简介  在主从复制中,数据库分为两类,一类是主库(master),另一类是同步主库数据的从库(sl...

阅读全文>>

0

烹饪MySQL8.0 Cluster这道菜

此文将带领大家接触MySQL8.0版本,并且部署Mysql Cluster。香。香。香。一:写在前面--MySQL8.0的改进1:性能:MySQL 8.0 的速度要比 MySQL 5.7 快 2 倍。MySQL 8.0 在以下方面带来了更好的性能:读/写工作负载、IO 密集型工作负载、以及高竞争("hot spot"热点竞争问题)工作负载。MySQL8.0、MySQL5.7、MySQL5.7 性能对别2:NoSQL:从MySQL 5.7 版本其开始提供 NoSQL 存储功能,目前在 8.0 版本中NoSQL功能也得到了更大的改进。3:窗口函数(Window Functions):从 MySQL...

阅读全文>>

0

Redis 到底是怎么实现“附近的人”这个功能的呢?

Redis 到底是怎么实现“附近的人”这个功能的呢?前言:针对“附近的人”这一位置服务领域的应用场景,常见的可使用PG、MySQL和MongoDB等多种DB的空间索引进行实现。而Redis另辟蹊径,结合其有序队列zset以及geohash编码,实现了空间搜索功能,且拥有极高的运行效率。本文将从源码角度对其算法原理进行解析,并推算查询时间复杂度。要提供完整的“附近的人”服务,最基本的是要实现“增”、“删”、“查”的功能。以下将分别进行介绍,其中会重点对查询功能进行解析。操作命令自Redis 3.2开始,Redis基于geohash和有序集合提供了地理位置相关功能。 Redis Geo模块包含了以...

阅读全文>>

0

一款能快速批量处理SQL文本的软件:NimbleText

前言做为一个后台程序员,在日常工作中,经常会遇到领导扔给一个Excel,让把 Excel 的数据导入数据库的情况。如果只是少量数据,几条甚至说几十条,还可以勉强地组织一下 insert 插入语句;但大多数情况下,都是成百上千行的数据,若要是再手动一条一条组织 insert 插入语句,岂不得累死。于是乎,为了减少重复工作,提高工作效率,小编找到了一款能快速批量处理SQL文本的软件: NimbleText,分享给大家。 (当然,它可以处理任何文本内容哦~)NimbleText软件截图简介NimbleText 是一个非常简单的代码生成器,它可以将给定的数据和需要模式匹配的数据合并成我们所期望的完整数...

阅读全文>>

0

6步带你看懂MySQL 整体架构

MySQL 在整体架构上分为 Server 层和存储引擎层。其中 Server 层,包括连接器、查询缓存、分析器、优化器、执行器等,存储过程、触发器、视图和内置函数都在这层实现。数据引擎层负责数据的存储和提取,如 InnoDB、MyISAM、Memory 等引擎。在客户端连接到 Server 层后,Server 会调用数据引擎提供的接口,进行数据的变更。连接器负责和客户端建立连接,获取用户权限以及维持和管理连接。通过show processlist来查询连接的状态。在用户建立连接后,即使管理员改变连接用户的权限,也不会影响到已连接的用户。默认连接时长为 8 小时,超过时间后将会被断开。简单说下...

阅读全文>>

0

借助Redis完成延时任务

相信我们或多或少的会遇到类似下面这样的需求:第三方给了一批数据给我们处理,我们处理好之后就通知他们处理结果。大概就是下面这个图说的。本来在处理完数据之后,我们就会马上把处理结果返回给对方,但是对方要求我们处理速度不能过快,要有一种人为处理的效果。换句话就是说,就算是处理好了,也要晚一点再执行通知操作。这就是一个典型的延时任务。延时,那还不简单,执行完之后,让它Sleep一下就好了,这样就达到目标了。Sleep一下确定是最容易实现的一种方案,但是试想一下,数据的数量不断的增加,这样Sleep真的好吗?答案是否定的。延时队列,是处理这个场景最为妥当的方案。RabbitMQ,RocketMQ,Cmq...

阅读全文>>

0

Redis 6.0 正式版终于发布了!除了多线程还有什么新功能?

Redis 6.0.1 于 2020 年 5 月 2 日正式发布了,如 Redis 作者 antirez 所说,这是迄今为止最“企业”化的版本,也是有史以来改动最大的一个 Redis 版本,同时也是参与开发人数最多的一个版本。所以在使用此版本之前,建议各位开发者先进行深入的测试再考虑投产,毕竟生产坏境无小事。好了,回到本文的重点,接下来我们来重点看下 Redis 6.0.1 给我们带来了那些新功能。Redis新功能介绍Redis 6 的更新日志,主要包含以下五部分的内容:Redis 6.0-RC1 版新功能介绍;Redis 6.0-RC2 版新功能介绍;Redis 6.0-RC3 版新功能介绍...

阅读全文>>