精华
文章平均质量分 81
衡与墨
福建98生人,爱好GO、Java、JS、TS、Python、Rust、C语言,前后端均精通,熟悉linux、docker、k8s使用,擅长Vue、Java Web开发、GO 微服务和web开发,兴趣广泛,爱好开源,目标是2025年前具有百万级别系统的架构师能力,我是一个追求纯粹的程序员,欢迎工作邀请
展开
-
redis实现消息队列的几种方式及其优劣
概述常用的消息队列有,rabbitMq、kafka、RocketMq、ActiveMq等。这些消息队列需要独立安装部署,作为一个中间件来提供服务,虽然有着高性能、高可靠的优点,但是额外部署这些中间件也会增加运维成本,和服务器成本。本篇文章探讨了一下如何使用redis实现消息队列。使用redis无需额外的部署,如果原先就有使用redis的话。此外redis更为轻量也更容易维护。但是redis实现消息队列有多种方案,这些方案有其优点也有其缺点,适用于不同的应用场景。以下从“实时性”、“可靠性”、“功能性”这原创 2022-04-27 18:45:56 · 19067 阅读 · 4 评论 -
JAVA利用多线程进行异步接口调用的模型
收录于墨的2020~2021开发经验总结前言在日常开发中,我们常常会遇到这样的业务场景,业务在执行完某项操作之后,需要通知其它子系统。例如客户下单完成之后,订单系统需要通知数据分析系统,记录下单数据;通知发货系统,开始处理发货;通知会员回馈系统,客户下了单增加了积分,可以适当的发个红包。这些通知和客户下单这件事有关系。但是和下单是否成功并无关系。客户希望能快速得到下单成功的页面。这些通知该如何处理呢?比较简单的方法是,利用多线程进行异步的接口调用。简单版例如,业务需要调用A、B、C三个业务,原创 2021-07-13 19:19:13 · 2094 阅读 · 0 评论 -
查询速度起飞之Java利用多线程进行并发数据查询
收录于墨的2020~2021开发经验总结前言在当前的系统中,我们可能会在一个事务中,执行多项操作,调用多个外部服务,查询数据或者更新数据,进行一系列逻辑处理之后返回给客户一个结果。例如,以下是一个顾客下单的流程模拟:1、获取基本产品信息(此处查询数据库)2、获取每一个产品的价格(假设此处需要通过第三方服务平台进行实时定价,产品不同调用的平台亦不同,所有此处是挨个获取)3、计算产品总价4、获取用户余额(此处也是调取第三方服务,获取用户账户余额)5、比对余额是否充足6、如果余额充足则提示购买成原创 2021-07-13 14:41:41 · 15662 阅读 · 7 评论 -
java 实现的数据查询缓存通用模型——SPEL表达式支持(6)
收录于墨的2020~2021开发经验总结接续上文(java 实现的数据查询缓存通用模型——那些我在缓存模型中用到的工具类(5))7、SPEL表达式支持spel表达式,SpEL(Spring Expression Language),即spring 表达式语言,它是一种轻量的、灵活的语言,通过spring的解析工具进行解析。在前文中,我们搭建实现的数据查询缓存通用模型,是通过cacheKeyCreater的机制来生成key的,这种方式可以实现很高的定制化,但是也有个缺点,那就是要写的代码更多,也不够直原创 2021-07-13 11:37:54 · 502 阅读 · 0 评论 -
Redis 分布式锁的两种写法你会吗
1、概述在并发编程中,锁是用来保证数据同步的重要举措,Java 自带了多种锁的实现,如synchronized、ReentrantLock、ReentrantReadWriteLock等。但这些锁只在该进程内有效。一但跨进程就会不起作用。然而在当下的技术趋势下,微服务,单服务多实例,多实例间负载均衡已经成为常见的架构基础。在这样的多进程情况下,要保证同步,那么分布式锁就尤为重要。这篇文章,描述了两种Redis分布式锁的实现方式。希望对大家有用。2、原理锁的原理来自于其“唯一持有性”,因此只要能保证这原创 2021-06-16 00:15:58 · 494 阅读 · 0 评论 -
java 实现的数据查询缓存通用模型——那些我在缓存模型中用到的工具类(5)
收录于墨的2020~2021开发经验总结接续上文(Redis 实现的数据查询缓存通用模型(5))6、那些我在缓存模型中用到的工具类本篇是这个系列的最后一篇,Redis 实现的数据查询缓存通用模型这个系列,标题虽然是Redis 实现的数据查询缓存通用模型,但是实际上却不是以Redis为主,如果再取一个更合适的标题,我觉得是Java的通用数据查询缓存模型会更为恰当一些。使用到的工具类,主要是Ehcache的工具类和Redis的工具类为主。6.1 Ehcache的工具类Ehcache的工具类6.2原创 2021-06-13 21:36:02 · 280 阅读 · 0 评论 -
java 实现的数据查询缓存通用模型——缓存组件设计(4)
收录于墨的2020~2021开发经验总结接续上文(Redis 实现的数据查询缓存通用模型(3))5、缓存组件设计5.1 整体架构先上一张类图,这张类图包含了Dawn缓存架构设计的整体结构:其中DawnCache是一个缓存组件的通用接口,包含了获取缓存、设置缓存、清除缓存三个方法,而DawnRedisCache是它的Redis实现,DawnEhcacheCache是它的Ehcache实现,DawnSimpleCache是它的基于Java Map 的实现。三种缓存组件分别适用不同情况下的使用。Da原创 2021-06-13 20:47:16 · 1985 阅读 · 1 评论 -
java 实现的数据查询缓存通用模型——缓存模型核心AOP实现(3)
收录于墨的2020~2021开发经验总结接续上文(Redis 实现的数据查询缓存通用模型(2))4、缓存模型核心AOP实现4.1 概述在上两篇文章中,我们主要分析了 @DawnCacheable 实现的缓存,和@DawnCacheEvict实现的缓存清除,之前是从模型上分析的,还没有介绍如何实现这个模型,这篇文章就是分析这两个注解背后的实现。Spring拥有两个核心,一个是IOC,控制反转和依赖注入,还有一个就是AOP,面向切面编程。在我这几年的编程生涯中,确实也意味到了,AOP是大部分框架的实现原创 2021-06-13 14:23:00 · 440 阅读 · 0 评论 -
java 实现的数据查询缓存通用模型——缓存清除cacheEvict(2)
收录于墨的2020~2021开发经验总结接续上文(Redis 实现的数据查询缓存通用模型(1))3、缓存清除cacheEvict3.1 基本原理在实际应用中,缓存并非是一成不变的,我们写入缓存之后还需要更新缓存。这常常存在于一些更新操作和删除操作中。例如我们查询了一个产品列表的第一页,之后缓存写入了这一页,在缓存中我们有这样一个映射:key : DAWN-CACHE.cn.hengyumo.dawn.example.service.ProductService.searchProduct.siz原创 2021-06-11 21:12:27 · 1092 阅读 · 0 评论 -
java 实现的数据查询缓存通用模型——概述和注解设计(1)
1、缓存的意义在经济学中,有一个定律叫做二八定律,含义是社会上百分之20的人却占了百分之80的财富。这一定律同样在计算机学科中适用,少部分的资源在计算中会被频繁使用,因此计算机的存储设计中,从低到高,从快到慢,设计了多级缓存。从CPU的一级、二级、三级缓存,到内存,到磁盘,到远程的分布式文件系统。它们的容量从小到大,速度从快到慢。常用的数据会被优先存放在高速的缓存上。在网站的架构设计中,也要考虑到缓存的使用,因为大部分网站的实际运行中,对数据的访问也是呈现出二八定律,百分之八十的业务会集中到百分之二原创 2021-06-10 22:49:18 · 815 阅读 · 0 评论 -
墨的2020~2021开发经验总结
1、Redis相关1、Redis 实现的数据查询缓存通用模型2、Redis 实现的分布式锁3、利用 Redis 记录运行日志数据2、Java相关1、利用多线程进行并发数据查询2、利用多线程进行异步接口调用的模型3、利用注解和反射自动生成表和数据同步接口4、Java8的日常使用总结5、结合iview表格控件配置实现的后端表格数据导出模型6、基于配置的查询语句生成模型7、基于配置的前端表格字段生成模型8、跨域问题的深入理解和解决9、基于注解的操作日志记录模型10、基于日期区分的大量数原创 2021-05-18 21:38:52 · 629 阅读 · 1 评论 -
Web技术溯源&进入微服务
前言说学微服务说了一年半了,一直都没有真的去做,我是要反思的。其实微服务的基础理论、结构,思想和意义都已经了解的很熟悉了,所差的就是实际的应用学习。选择学习的目标是spring cloud。dubbo太大太繁杂,而且应用不如cloud广泛。从长远来看,spring cloud的发展空间也更大。spring cloud构建微服务的基础是spring boot,要学习spring cloud之前...原创 2020-05-04 17:14:02 · 832 阅读 · 1 评论