作者DrHydra来源码农参上(ID:CODERSANJYOU)哈喽大家好啊,我是Hydra。mybatisplus作为mybatis的增强工具,它的出现极大的简化了开发中的数据库操作,但是长久以来,它的联表查询能力一直被大家所诟病。一旦遇到leftjoin或rightjoin的左右连接,你还是得老老实实的打开xml文件,手写上一大段的sql语句。直到前几天,偶然碰到了这么一款叫做mybatisplusjoin的工具(后面就简称mpj了),使用了一下,不得不说真香!彻底将我从xm...
2022-09-07 15:20:20 1.2w浏览 0点赞 0回复 0收藏
作者DrHydra来源码农参上(ID:CODERSANJYOU)哈喽大家好啊,我是Hydra。在前面的文章中,我们介绍了Redis6.0中的新特性客户端缓存clientsidecaching,通过telnet连接模拟客户端,测试了三种客户端缓存的工作模式,这篇文章我们就来点硬核实战,看看客户端缓存在java项目中应该如何落地。铺垫首先介绍一下今天要使用到的工具Lettuce,它是一个可伸缩线程安全的redis客户端。多个线程可以共享同一个RedisConnection,利用nio框架...
2022-06-22 17:24:10 5566浏览 0点赞 0回复 0收藏
在高性能的服务架构设计中,缓存是一个不可或缺的环节。在实际的项目中,我们通常会将一些热点数据存储到Redis或MemCache这类缓存中间件中,只有当缓存的访问没有命中时再查询数据库。在提升访问速度的同时,也能降低数据库的压力。随着不断的发展,这一架构也产生了改进,在一些场景下可能单纯使用Redis类的远程缓存已经不够了,还需要进一步配合本地缓存使用,例如Guavacache或Caffeine,从而再次提升程序的响应速度与服务性...
2022-04-12 22:02:46 7930浏览 0点赞 0回复 0收藏
事情是这样的,前几天隔壁部门的哥们在生产环境的数据库上,执行了一下drop命令,好嘛,活生生的删库跑路的例子居然真的在我身边发生了,好在运维同学给力,后来恢复了数据。事后听说这哥们虽然没被开除,但也吃了个公司的警告。再然后,运维那边回收了所有环境下数据库的drop命令的权限,甚至包括了开发环境,本来觉得对我们也没啥影响,一般我们也没有啥需要删表的需求。但是隔了没几天,我在重命名一个表的时候,突然弹出了...
2022-04-12 21:53:00 5549浏览 0点赞 0回复 0收藏
谈起数据库的事务来,估计很多同学的第一反应都是ACID,而排在ACID中首位的A原子性,要求一个事务中的所有操作,要么全部完成,要么全部不完成。熟悉redis的同学肯定知道,在redis中也存在事务,那么它的事务也满足原子性吗下面我们就来一探究竟。什么是Redis事务和数据库事务类似,redis事务也是用来一次性地执行多条命令。使用起来也很简单,可以用MULTI开启一个事务,然后将多个命令入队到事务的队列中,最后由EXEC命令触发...
2022-04-12 21:05:16 9036浏览 0点赞 0回复 0收藏
在介绍mysql的多版本并发控制MVCC的过程中,我们提到过mysql中存在一些隐藏列,例如行标识、事务ID、回滚指针等,不知道大家是否和我一样好奇过,要怎样才能实际地看到这些隐藏列的值呢本文我们就来重点讨论一下诸多隐藏列中的行标识DBROWID,实际上,将行标识称为隐藏列并不准确,因为它并不是一个真实存在的列,DBROWID实际上是一个非空唯一列的别名。在拨开它的神秘面纱之前,我们看一下官方文档的说明:IfatablehasaPRIMARY...
2022-04-12 20:57:15 6119浏览 0点赞 0回复 0收藏
最近在工作中,遇到了这样一个业务场景,我们需要关注一个业务系统数据库中某几张表的数据,当数据发生新增或修改时,将它同步到另一个业务系统数据库中的表中。一提到数据库的同步,估计大家第一时间想到的就是基于binlog的主从复制了,但是放在我们的场景中,还有几个问题:第一,并不是需要复制所有表的数据,复制对象只有少量的几张表第二,也是比较麻烦的,两个业务系统数据库表结构可能不一致。例如,要同步数据库1的A表...
2022-04-12 20:44:24 7482浏览 0点赞 0回复 0收藏
江湖上说,天下武功,无坚不摧,唯快不破,这句话简直是为我量身定制。我是一个Redis服务,最引以为傲的就是我的速度,我的QPS能达到10万级别。在我的手下有数不清的小弟,他们会时不时到我这来存放或者取走一些数据,我管他们叫做客户端,还给他们起了英文名叫Redisclient。有时候一个小弟会来的非常频繁,有时候一堆小弟会同时过来,但是,即使再多的小弟我也能管理的井井有条。有一天,小弟们问我。想当年,为了不让小弟们拖...
2022-04-12 20:39:19 5803浏览 0点赞 0回复 0收藏
在Redis中有5种基本数据类型,分别是String,List,Hash,Set,Zset。除此之外,Redis中还有一些实用性很高的扩展数据类型,下面来介绍一下这些扩展数据类型以及它们的使用场景。GeoGEO在Redis3.2版本后被添加,可以说是针对LBS(LocationBasedService)产生的一种数据类型,主要用于存储地理位置信息,并可以对存储的信息进行一系列的计算操作,下面来看一下常用的api操作。geoadd:存储指定的地理空间位置语法格式:GEOADDkeylongit...
2022-04-12 20:32:28 5671浏览 0点赞 0回复 0收藏
有时在工作中,我们需要将大量的数据持久化到数据库中,如果数据量很大的话直接插入的执行速度非常慢,并且由于插入操作也没有太多能够进行sql优化的地方,所以只能从程序代码的角度进行优化。所以本文将尝试使用几种不同方式对插入操作进行优化,看看如何能够最大程度的缩短SQL执行时间。以插入1000条数据为例,首先进行数据准备,用于插入数据库测试:privateList<Order>prepareData(){List<Order>orderListnewArrayList<>();...
2022-04-12 20:21:24 5307浏览 0点赞 0回复 0收藏
在微服务的设计中,我们通常考虑到的是通过加密、熔断、限流等操作保证接口的安全性、健壮性等问题,但是在代码的编写中,你考虑过优化接口的调用方式吗下面我们就来看一看,如何更优雅的调用接口。假设在我们的系统中现在有两个微服务,订单服务和库存服务,业务流程是当使用订单服务创建订单时,先调用库存服务查询是否有库存,如果有库存才能完成订单的下单操作。先从简单入手,以使用RestTemplate进行服务间调用为例。定义...
2022-04-12 20:15:14 6755浏览 0点赞 0回复 0收藏
事务是数据库最小工作单元,它的操作是不可以被分割的原子操作,是保证数据一致性的重要手段之一。本文将通过基本概念、特性、隔离级别以及实现原理,带领大家熟悉MySql中的事务。在MySql中,常见支持事务的存储引擎包括innoDB,NDB等,而另外一个常用的存储引擎MyISAM是不支持事务的,本文主要针对innoDB进行分析。1事务基础首先来看一下事务的4大特性ACID:原子性(Atomicity):一个事务中的所有操作,要么全部完成,要么全部...
2022-04-12 20:09:28 7746浏览 0点赞 0回复 0收藏
在之前并发系列的文章中,我们介绍了JVM中的锁。但是无论是synchronized还是Lock,都运行在线程级别上,必须运行在同一个JVM中。如果竞争资源的进程不在同一个JVM中时,这样线程锁就无法起到作用,必须使用分布式锁来控制多个进程对资源的访问。分布式锁的实现一般有三种方式,使用MySql数据库行锁,基于Redis的分布式锁,以及基于Zookeeper的分布式锁。本文中我们重点看一下Redis如何实现分布式锁。首先,看一下用于实现分布式...
2022-04-12 19:36:53 8572浏览 2点赞 1回复 1收藏
在前面两篇文章中,分别介绍了Redis的主从复制和哨兵模式,这篇文章我们来介绍一下Redis官方推荐的集群部署方案RedisCluster,以及它的动态扩容、缩容过程。RedisCluster集群是一个由多个主从节点群组成的分布式服务器群,它具有复制、高可用和分片特性。它不需要Sentinel哨兵也能完成节点移除和故障转移的功能,并且它的性能和高可用性均优于哨兵模式,集群配置也非常简单。在配置过程中,需要将每个节点设置成集群模式,这种...
2022-04-12 18:12:56 9844浏览 0点赞 0回复 0收藏
在Redis主从复制架构这篇文章中我们分析了主从复制的特点,其中一个问题就是主机宕机后需要手动调整,修改从机为主机,不仅不利于迅速恢复生产场景,还会增加人力成本。哨兵模式的出现是就是为了解决我们主从复制模式中需要我们人为操作的东西变为自动版,并且它比人为要更及时。这篇文章我们就来讲讲如何通过哨兵模式,迅速实现自动故障转移。一、哨兵主要功能监控(Monitoring):哨兵会不断地检查主节点和从节点是否运作正常。...
2022-04-12 17:44:13 5359浏览 0点赞 0回复 0收藏
Redis虽然拥有非常高的性能,但是在实际的生产环境中,使用单机模式还是会产生不少问题的,比如说容易出现单机故障,容量瓶颈,以及QPS瓶颈等问题。通常环境下,主从复制、哨兵模式、RedisCluster是3种比较常见的解决方案,本文将通过实例演示如何搭建Redis主从复制环境,并对其原理进行分析。一、搭建主从复制架构1、创建3个目录redis8000,redis8001,redis8002目录下。将默认配置文件redis.conf拷贝到redis8000下,将redis80...
2022-04-12 17:37:47 5387浏览 0点赞 0回复 0收藏
Spring框架被广泛应用于我们的日常工作中,但是很长时间以来我们都是只会使用,不懂它的作用原理。通过最近一段时间的阅读源码,个人发现通过阅读源码,能够帮助我们了解Spring的设计理念,并且对Java编程中的一些设计模式更加熟悉,所以记录一下自己对Spring源码的理解。在开始进行源码学习前,首先再回顾一下三种Spring编程风格:1、基于Schemal,即通过xml标签的配置方式2、基于Annotation的注解技术,使用Component等注解配...
2022-04-12 17:11:01 7050浏览 0点赞 0回复 0收藏
Redis是我们日常在工作中使用非常多的缓存解决手段,使用缓存,能够提升我们应用程序的性能,同时极大程度的降低数据库的压力。但如果使用不当,同样会造成许多问题,其中三大经典问题就包括了:1.缓存穿透2.缓存击穿3.缓存雪崩是不是听上去一脸懵逼没关系,看完这篇就明白了。1、缓存穿透缓存穿透是指用户在查找一个数据时查找了一个根本不存在的数据。按照缓存设计流程,首先查询redis缓存,发现并没有这条数据,于是直接查询...
2022-04-12 16:48:19 8163浏览 0点赞 0回复 0收藏