- 博客(46)
- 资源 (4)
- 收藏
- 关注
原创 扣减库存和发放一致解决方案
分享一种库存扣减与发放业务一致性的解决方案。在实际业务中,通常会遇到库存扣减与业务发放的场景。如:用户购买某个权益(可以是虚拟权益,也可以是实体权益),在购买后需要扣减库存,并给用户发放对应的权益(当然这是简化的一个案例,真实的从下单->扣款->库存扣减->发放是一个复杂的业务流程,其中涉及到多个系统,一致性方案、可靠性方案、补偿方案等会复杂很多,这个不在本文的内容范围)。这里举例日常生活中大家常使用的在外卖平台购买某一个优惠券的案例,通常这种优惠券有一定的库存量,卖完就没有。
2025-06-08 14:32:27
152
原创 Redis知识体系
本文总结了Redis基本的核心知识体系,在学习Redis的过程中,可以将其作为学习框架,以此更好的从整体的角度去理解和学习Redis的内容和设计思想。同时知识框架带来的好处是可以帮助我们更好的进行记忆,在大脑中形成相应的知识网。:本位非详细的介绍Redis的实现原理或某个特定的实现原理,提供的是一个系统的知识框架,后续可以针对性的进行分模块学习。在应用实践模块,介绍了常见的一些问题与场景,非Redis所有的应用场景,不同业务使用的方式不同,Redis的使用场景可以非常广。
2025-06-08 12:16:18
895
原创 「分布式事务」之数据一致性模型
描述:所有节点在同一时间看到的数据完全一致特点任何读操作都能获取最新的写入值性能较低但可靠性最高(需要等待所有节点同步)实现复杂度高缺点牺牲了可用性实现方式两阶段提交(2PC)、三阶段提交(3PC),Raft/Paxos共识算法示例:银行转账(2PC)事务:用户A向用户B转账100元。过程准备阶段:协调者询问A和B的账户服务是否可执行扣款和加款。提交阶段:如果A和B都同意,则执行转账;否则回滚。特点:要么全部成功,要么全部失败,保证数据强一致。一致性模型保证级别示例。
2025-06-08 11:32:12
342
原创 幂等性的七大解决方案
(idempotent)是一个数学与计算机学概念,常见于抽象代数中。在我们的开发过程中,保证幂等性就是保证你的程序的无论执行多少次,影响均与第一次执行的影响是一致的,产生的结果也是一样的。而幂等函数(幂等方法),是指使用相同的参数结构重复执行,产生相同的结果的函数,重复执行幂等函数不会影响系统的状态或者造成改变。
2025-06-08 11:10:56
424
原创 开始写文章,以此记录
很久没有认真的写技术文章了,刚毕业的时候断断续续写过一些和转载过一些技术文章,现在回头来看,写的多少有点粗糙(😓),侧面也反映了这几年的工作与学习,让我在技术体系、思维方式、工作方式等不同方面都有了不少的成长,都是将相关的总结放在ProcessOn上以图片的方式进行记录,后面想逐步的将这几年沉淀下来的技术原理、架构设计与思想、思维方式,工作方法等慢慢的以文章的形式进行呈现,以记录自己这几年的成长,并于大家分享、讨论,以更好的补充自己的不足,也希望以此勉励自己,保持学习心态,继续成长!
2025-06-07 22:40:46
80
原创 Redis故障转移
而且,同一时间可能会有多个哨兵发起故障转移,所以故障转移前需要进行一轮竞选,得到多数选票的哨兵会被称为 Leader,只有 Leader 才能进行故障转移。本文主要讲述了Redis故障转移的原理及过程,可与「Redis高可用架构」文章一同阅读,可更好理解相关内容,及整个Redis高可用架构的实现原理。指令给从节点,从节点接收到后会断开它与原主节点的网络连接,重置其复制 ID 并执行持久化重写,并开始将自己的复制身份转为 Master。状态,更新所有从节点的配置,让他们去复制新的 Master。
2025-06-07 22:01:49
909
原创 Redis高可用架构
Redis Sentinel 是 Redis 的高可用实现方案。Sentinel不是一个单独的进程,而是有多个哨兵服务组成的分布式系统。Sentinel集群独立于 Redis 集群,哨兵之间彼此建立连接,共同监控、管理所有的 Redis 节点。哨兵间使用流言协议(gossip protocols)进行消息传播,使用投票协议(agreement protocols)决定是否执行自动故障迁移和选择新的主节点。
2025-06-07 21:50:28
1156
原创 Redis内存淘汰策略
Redis的内存淘汰策略决定了在内存不足时,如何选择需要删除的健来释放空间。基于过期时间的淘汰(volatile-*):仅针对设置了过期时间的键。全局淘汰(allkeys-*):针对所有键,无论是否设置过期时间。通过maxmemory参数来设定内存的使用上限,当Redis使用内存达到设定的最大值的时候,会根据配置文件中的策略选取要删除的key来删除,从而给新的键值留出空间。
2025-06-07 21:09:54
716
原创 Redis Key过期策略
持久化方式生成时处理加载时处理复制传播RDB过滤过期Key二次检查全量同步AOF记录DEL命令按序重放增量同步混合模式RDB部分过滤组合加载混合同步。
2025-06-07 21:05:10
935
原创 HBase存储及分布式架构
HBase访问客户端,包含访问HBase的接口;Client维护着一些Cache来加快对HBase的访问,比如Region的位置信息。主要职责:1.使用HBase RPC机制与HMaster和HRegionServer进行通信。2.Client与HMaster进行通信管理类操作。3.Client与HRegionServer进行数据读写类操作。即 Write Ahead Log,是HDFS上的一个文件,用以存储尚未进行持久化的数据。顺序写入。
2025-06-07 18:03:30
671
原创 Redis之主从复制原理
本文结构:阐明 Redis主从复制的几个要点(要点以本人觉得的重要程度进行排序,即重要点在前面,以便快速切入重点,加快理解) 复制功能的作用 主从复制阶段 详细说明Redis主从复制原理及处理过程 断线重连后的数据发送说明:重点---以红色标示,次重点---以蓝色标示,命令---以紫色标示。复制(REPLICATION) Redis 支持简单易用的主从复制(m...
2020-03-28 20:50:00
310
转载 详解高性能数据库:读写分离
虽然近十年来各种存储技术飞速发展,但关系数据库由于其 ACID 的特性和功能强大的 SQL 查询,目前还是各种业务系统中关键和核心的存储系统,很多场景下高性能的设计最核心的部分就是关系数据库的设计。不管是为了满足业务发展的需要,还是为了提升自己的竞争力,关系数据库厂商(Oracle、DB2、MySQL 等)在优化和提升单个数据库服务器的性能方面也做了非常多的技术优化和改进。但业务发展速度和...
2019-10-06 21:15:47
973
原创 Java---线程的生命周期
当线程被创建并启动以后,它既不是已启动就进入执行状态,也不是一直处于执行状态,在线程的生命周期中,它要经过新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)5中状态。尤其是当线程启动以后,它不可能一直“霸占”着CPU独自运行(如果在一个cpu分片时间之内执行完,那就不会切换),所以CPU需要在多条线程之间切换(可以查看cpu多线程实现...
2018-11-06 22:19:47
275
转载 AspectJ JoinPoint及ProceedingJoinPoint 简要api文档
AspectJ使用org.aspectj.lang.JoinPoint接口表示目标类连接点对象,如果是环绕增强时,使用org.aspectj.lang.ProceedingJoinPoint表示连接点对象,该类是JoinPoint的子接口。任何一个增强方法都可以通过将第一个入参声明为JoinPoint访问到连接点上下文的信息。我们先来了解一下这两个接口的主要方法: 1)JoinPoint ...
2018-11-01 17:21:11
12744
原创 Spring集成mybatis-----配置打印sql语句过程遇到的问题
Spring集成mybatis过程中,再mybatis.xml配置<settings/>时一直提示报错,如下所示:原始配置:在调试项目的过程中,遇到sql查询不到的问题,所以就像配置mybatis.xml打印sql以便定位问题,配置后的mybatis.xml文件如下:以为一切完美,准备撸代码,没想到竟然报错了,在网上找了一堆看都是这样配置的,没问题啊?为啥我就报错了...
2018-10-29 21:50:59
1239
转载 UTF-8编码原理
本文转载自http://www.cnblogs.com/daxiong2014/p/4768681.html1、ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个...
2018-09-14 10:51:27
32401
6
原创 记一次shardingjdbc报错问题
主要报错日志:### SQL: insert into gfs_manage_user (manage_user_account_name, manage_user_del_flag) values (?, ?, ) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain....
2018-07-10 15:37:45
18525
转载 Mysql数据库显示时间与应用程序获取到的不一致的问题
转载:https://juejin.im/post/5902e087da2f60005df05c3d问题现象:如下为通过mysql客户端命令行获取到的数据,时间显示如下:在前端页面获取到的时间如下所示:显示相差13小时。个人操作:在执行set global time_zone = '+08:00';与set time_zone = '+08:00';后问题得到解决,此方式不需要重启Mysql!摘要...
2018-07-10 14:57:50
9640
1
原创 @ResponseBody对content-type进行重写
1.@ResponseBody注解作用@ResponseBody注解的作用是将Controller方法返回的对象通过适当的转换器(HttpMessageConverter)转换为指定的格式,并将其写入到response对象的body区,一般都是用来返回JSON数据或者XML数据。在使用此注解后,SpringMVC将不会再走视图处理器(即当方法上面没有写ResponseBody,底层会将...
2018-04-19 18:26:13
10586
转载 Mac下安装graphviz
我这里使用的是brew安装brew的安装教程如下: http://jingyan.baidu.com/article/fec7a1e5ec30341190b4e7e5.htmlbrew install graphviz至于graphviz的具体使用请参见:http://www.tuicool.com/articles/r2iAfa本文转载至https://blog.csdn.net/lyrasso...
2018-04-15 22:31:31
1263
转载 深入Mysql字符集设置[精华结合]
基本概念 • 字符(Character)是指人类语言中最小的表义符号。例如'A'、'B'等; • 给定一系列字符,对每个字符赋予一个数值,用数值来代表对应的字符,这一数值就是字符的编码(Encoding)。例如,我们给字符'A'赋予数值0,给字符'B'赋予数值1,则0就是字符'A'的编码;• 给定一系列字符并赋予对应的编码后,所有这些字符和编码对组成的集合就是字符集(Charact
2017-06-19 14:48:45
336
转载 【字符编码】ASCII、Unicode和UTF-8的区别
本文转载至http://www.cnblogs.com/kingstarspe/p/ASCII.html1. ASCII码我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是25
2017-06-06 14:20:49
538
转载 【java虚拟机】栈帧、局部变量表、操作数栈
本文转载至http://wangwengcn.iteye.com/blog/16221951.定义 栈帧(stack frame)是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈的栈元素。栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息。 每一个方法从调用开始到执行完成的过程,就对应着一个栈帧在虚拟机栈里面从入栈
2017-06-05 14:59:30
9065
转载 【java并发编程】yeild(),sleep(),wait()区别详解
本文转载至http://dylanxu.iteye.com/blog/13220661、sleep()使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁。也就是说如果有synchronized同步快,其他线程仍然不能访问共享数据。注意该方法要捕捉异常。例如有两个线程同时执行(没有synchronized)一个线程优先级为MAX_PRI
2017-05-25 15:46:30
2338
转载 MySQL触发器使用详解
本文转载至http://www.cnblogs.com/duodushu/p/5446384.htmlMySQL包含对触发器的支持。触发器是一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时,将调用该对象,即表的操作事件触发表上的触发器的执行。创建触发器在MySQL中,创建触发器语法如下:代码如下:CREATE TRIGGER trigger_name
2017-05-24 17:53:43
499
原创 Mysql 更改表结构--增加,修改,删除
建立一张student表:表结构如下所示:添加列:ALTER TABLE tablename ADD column datatype [primary key/default/not null/...] AFTER 'columnX' //在colunmX列后增加字段 例:在student表中添加一个年级(grade)字段,类型为varchar,不
2017-05-24 17:26:13
24207
4
转载 Spring Data Jpa --分页、排序查询
spring Data Jpa对于分页以及排序的查询也有着完美的支持,通过Pageable来对数据库进行分页查询。继承PagingAndSortingRepository接口BlogRepository的定义如下:public interface BlogRepository extends PagingAndSortingRepositoryBlog, Int
2017-05-19 18:32:36
6376
转载 Spring Data Jpa
本文转载自http://perfy315.iteye.com/blog/14602261.Spring Data所解决的问题Spring Data :提供了一整套数据访问层(DAO)的解决方案,致力于减少数据访问层(DAO)的开发量。它使用一个叫作Repository的接口类为基础,它被定义为访问底层数据模型的超级接口。而对于某种具体的数据访问操作,则在其子接口中定义。public
2017-05-19 11:21:08
266
转载 spring-boot-started-logging logback常用配置之<filter>标签详解
:过滤器,执行一个过滤器会有返回个枚举值,即DENY,NEUTRAL,ACCEPT其中之一。返回DENY,日志将立即被抛弃不再经过其他过滤器;返回NEUTRAL,有序列表里的下个过滤器过接着处理日志;返回ACCEPT,日志会被立即处理,不再经过剩余过滤器。过滤器被添加到 中,为 添加一个或多个过滤器后,可以用任意条件对日志进行过滤。 有多个过滤器时,按照配置顺序执行。
2016-08-30 15:57:59
1692
转载 spring-boot-starter-logging logback配置之<configuration><logger>标签详解
logback 配置详解(一) and 一:根节点包含的属性: scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。debug:
2016-08-30 09:53:19
5600
转载 spring-boot-starter-logging logback常用配置之<appender>标签详解
原文:http://blog.csdn.net/haidage/article/details/6794529logback 常用配置详解(二) :是的子节点,是负责写日志的组件。有两个必要属性name和class。name指定appender名称,class指定appender的全限定名。 1.ConsoleAppend
2016-08-30 09:49:42
8008
1
转载 mysql常用命令+解决mysql不用用户名和密码可以直接登陆的问题
1、增加了密码后的登录格式如下: mysql -u root -p2、修改登录密码 1) mysqladmin -u用户名 -p旧密码 password 新密码 例:mysqladmin -u root password 21century 注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。 2)直接修改user表的root用户口令: mysql>
2016-08-11 17:43:49
33533
转载 maven POM.xml文档详解
POM的全称是“ProjectObjectModel(项目对象模型)”。pom.xml详解声明规范http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/
2016-08-11 09:26:55
487
转载 maven for mac 安装
1、下载http://maven.apache.org/download.cgi2、把下载到的压缩包解压到相应目录,我使用的目录结构是/usr/local/maven/maven-3.2.33、配置4个环境变量。看看~/下是否有.bash_profile文件,如果没有就创建一个,环境变量要配置在这个文件中。创建文件:touch ~/.bash_profile打开文件:open
2016-08-08 15:05:15
439
转载 git for mac安装
我们在windows上使用git的时候,有时候为了便利,直接采用git+tortoisegit的方式。这种方式可以带来很多的方便,不过在mac上,并没有tortoisegit的mac版本,不过有source tree和gitX等工具。不过,今天主要不是讲这些客户端工具的使用,而是讲通过终端命令安装git的步骤及注意事项。 1.下载git客户端程序,地址为:https://git-sc
2016-08-08 14:07:44
18236
转载 classpath路径
src不是classpath, WEB-INF/classes,lib才是classpathWEB-INF/ 是资源目录, 客户端不能直接访问, 这话是没错,不过现在的IDE编译器在编译时会把src下的文件(是文件,不是.java)移到WEB-INF/classes下。不过值得注意的是,spring配置文件里这个locations是uri表示,也就是说你写的jdbc.propertie
2016-08-04 11:06:59
320
转载 struts2请求过程源码分析(转载学习)
struts2请求过程源码分析 Struts2是Struts社区和WebWork社区的共同成果,我们甚至可以说,Struts2是WebWork的升级版,他采用的正是WebWork的核心,所以,Struts2并不是一个不成熟的产品,相反,构建在WebWork基础之上的Struts2是一个运行稳定、性能优异、设计成熟的WEB框架。 我这里的struts2源码是从官网
2016-08-02 13:54:48
464
转载 Struts2学习之OGNL表达式原理(转载学习)
一、OGNL表达式基础知识 1. 示例:第一个OGNL程序2. 示例:上下文环境中使用OGNL3. 示例:使用OGNL调用方法4. 示例:使用OGNL操作集合 5. 示例:使用OGNL过滤集合与投影集合二、OGNL与Struts2OGNL表达式OGNL,全称为Object-Graph Navigation Language,它是一个
2016-08-02 09:09:53
449
代理模型工具箱
2015-01-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人