![](https://img-blog.csdnimg.cn/20190918135101160.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java
文章平均质量分 83
在入门Java后台开发后,随之而来的就是消息队列、分布式搜索、Redis、分布式缓存、分布式Session等等技术,本专栏也是围绕这些技术进行学习
黑白键的约定
做一个心无旁骛的搬砖人
展开
-
设计模式之单例模式(指令重排,DCL)
虽然单例模式被认为是设计模式中最简单的一种模式,但是在面试的时候也是最容易被问到的知识点。单例模式属于创建型设计模式中的一类,专注于提供一种专属类自己负责创建对象的一种方式。之所以有这种方式,是因为有的场景下需要整个运行环境中只存在一个对象,例如Redis的连接、Mysql的发号器(全局生成唯一ID)以及我们常用Windows的任务管理器。实现单例模式方式也很简单,主要分为两步骤——私有化构造函数以及提供获取单例的方法。但是具体实现中又分为两类——饿汉模式和懒汉模式。两者...原创 2022-03-08 17:15:26 · 840 阅读 · 0 评论 -
SpringSecurity中的集群会话Session存在的问题以及解决方案(保持、复制、共享)
在初步了解Session的时候,我们就知道Session通常是保存在服务器的内存当中的。每一次客户访问都会携带SessionId,然后在服务器的内存中寻找。虽然这种方式简单快捷,但是仍存在比较明显的缺点。服务器的内存是有限的,所以留给Session的空间不多,因此一旦用户的访问量比较多时内存就会捉襟见肘。而且因为session是存在内存当中,并不是持久化存储,就算服务器性能特别好,但是也不免存在服务器的异常停止和重启,这个时候就会导致会话状态的丢失。原创 2021-12-21 11:48:44 · 3396 阅读 · 0 评论 -
Spring Security中的会话【Session】管理与防御以及会话的并发控制
众所周知,HTTP本身是没有任何关于当前用户状态的内容,也就是两个HTTP请求之间是没有任何的关联可言,用户在和服务器交互的过程中,站点无法确定是哪个用户访问,也因此不能对其提供相应的个性化服务。Session的诞生就是为了解决这一个难题,提供了无状态的HTTP请求实现用户状态维持的方案——服务器和用户之间约定每个HTTP请求携带一个ID信息【代表当前用户信息】 服务器通过与用户约定每个请求都携带一个id类的信息,从而让不同请求之间有了关联,而id又可以很方...原创 2021-12-17 10:48:54 · 4063 阅读 · 1 评论 -
SpringSecurity的记住登录实现过程———【RememberMeServices】分析过程
在上一篇文章《SpringSecurity的认证流程分析(各个组件之间的关联)》介绍认证的基本流程时,其中的AbstractAuthenticationProcessingFilter有这样一个属性——RememberMeService引起我的注意,虽然从字面上很容易理解这个属性是和记住登录有关。但是其中的实现过程又是如何不深入还真不清楚,所以秉着学习的态度专门了解一下Security中对这个功能的实现。 在了解之前,先要清楚为什么会需要这个类来实现?当我们在很多网站上注册...原创 2021-12-09 10:35:45 · 1453 阅读 · 0 评论 -
如何用Lua脚本基于OpenResty、Redis实现数据的缓存?
也许有人对于OpenResty不太熟悉,但是一说到Nginx,可能都有所了解。作为控制速率和并发量控制的Nginx被很多公司所采用,而OpenResty就是在Nginx的基础上升级的,提供了Lua扩展,大大提升了Nignx对并发的处理能力,可以达到10K~1000K。OpenResty其实和Tengine一样,都是基于Nginx的衍生版本,融入了各自一些业务的新特性。这里用一个例子来说明使用Lua脚本,通过OpenResty和Redis实现业务数据的缓存。一般商城系统都会包括各种各样的广告,对于首页的广原创 2021-04-08 15:40:11 · 499 阅读 · 0 评论 -
基于FastDFS的文件管理服务
文件管理是每一个部分不可缺少的一部分,特别是一些相册网站、视频网站登过,文件管理服务是非常重要的一部分。开源的分布式文件系统有很多包括HDFS、MooseFS、FastDFS等,每个分布式系统各有各自的特点,但大体上的功能包括:文件存储、文件访问、文件同步,并且有些系统会帮我们解决大容量存储和负载均衡的问题。在这繁多的分布式系统中,我只了解过HDFS和FastDFS,两者的侧重点不同,HDFS是适合存储和管理大文件,不太适合存储海量的小文件、频繁的修改文件以及大量的随机读,HDFS经常用于大数据分析领域,而原创 2021-04-09 15:11:25 · 533 阅读 · 0 评论 -
基于Canal实现数据库与Redis缓存中的数据同步问题
在之前文章《如何用Lua脚本基于OpenResty、Redis实现数据的缓存?》中介绍了一种简洁实现数据缓存的一种方式。但是对于数据缓存还有一个重要的事就是可能存在数据的不一致问题。就拿上篇文章中的广告来说,临时更换广告内容或者下架广告的场景下,如果不立刻更新缓存中的数据而是任由其等到失效时间过后重新获取,这就有可能造成很严重的后果。所以要在极短的时间内实现缓存与数据库中的数据相一致。这里又介绍一种有局限性的解决方案——基于Canal。所谓的局限性就是因为Canal本身只是针对于Mysql,所以也只能实现M原创 2021-04-08 18:20:27 · 659 阅读 · 0 评论 -
Spring中的IOC和DI
IOC与DIIOC(Inversion of Control)——控制反转。即将设计的对象交给容器管理,而不是由我们手动在对象里面控制。通俗的说就是,在一个XML配置文件中,配置对象的名字、属性等内容,然后通过程序由容器自己创建。对于IOC其实并不是一门技术,而是一种思想,将各种统一管理,其实现的基本依靠就是反射。IOC的核心代码DI(Dependency Injection)——依...原创 2020-03-06 17:57:10 · 248 阅读 · 0 评论 -
SpringSecurity的认证流程分析(各个组件之间的关联)
我一开始对于SpringSecurity也不是很熟悉,但是Security 作为一个Spring家族中的安全管理框架,而且每个项目都有授权、认证、鉴权等功能,所以很有必要对Spring Security了解清楚。在说明各个流程之前,找了一张关于它的架构,我只截取了其中关于认证这一部分的内容。由上图可以清楚的看到在Security 认证的过程涉及到的对象,以及各个对象之间的关联。对于刚入门Java Web开发的时候,Filter作为JavaWeb的三大组件之一给我们留...原创 2021-11-22 15:13:13 · 4051 阅读 · 2 评论 -
开发过程采坑记录_持续更新
UTF8编码占三个字节,而UTF8MB4占四个字节【支持表情】原创 2021-05-07 16:43:51 · 80 阅读 · 0 评论 -
消息队列那些事——MQ的选择
在说如何选择消息队列之前?首先要明白一个问题,那就是为什么要使用消息队列?可不可以将消息队列用其他的技术代替? 为什么使用消息队列? 对于为什么使用消息队列可以从三个方面来看,也就是从消息队列的三个核心特点来看:解耦、削峰、异步。解耦对于耦合性,可以先来看这么一例子:现在有A、B、C、D四个系统,其中A系统要分别向BCD三个系统发送消息,进行相应的操作。刚一开始这样的场景是O...原创 2020-04-10 16:21:27 · 1213 阅读 · 2 评论