自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

黎明就要到来

IT小明的个人技术空间

  • 博客(49)
  • 资源 (4)
  • 问答 (2)
  • 收藏
  • 关注

原创 Redis 的持久化有哪几种方式?不同的持久化机制都有什么优缺点?持久化机制具体底层是如何实现的?

如果 Redis 挂了,服务器上的内存和磁盘上的数据都丢了,可以从云服务上拷贝回来之前的数据,放到指定的目录中,然后重新启动 Redis,Redis 就会自动根据持久化数据文件中的数据,去恢复内存中的数据,继续对外提供服务。持久化主要是做灾难恢复、数据恢复,也可以归类到高可用的一个环节中去,比如你 Redis 整个挂了,然后 Redis 就不可用了,你要做的事情就是让 Redis 变得可用,尽快变得可用。很可能说,大量的请求过来,缓存全部无法命中,在 Redis 里根本找不到数据,这个时候就死定了,出现。

2024-05-24 20:00:00 674

原创 Redis 主从架构

不建议用 slave node 作为 master node 的数据热备,因为那样的话,如果你关掉 master 的持久化,可能在 master 宕机重启的时候数据是空的,然后可能一经过复制, slave node 的数据也丢了。,slave node 可以自动接管 master node,但也可能 sentinel 还没检测到 master failure,master node 就自动重启了,还是可能导致上面所有的 slave node 数据被清空。没法写数据了,写缓存的时候,全部失效了。

2024-05-24 18:00:00 822

原创 Redis 集群模式的工作原理能说一下么?

这两年,Redis 不断在发展,Redis 也不断有新的版本,现在的 Redis 集群模式,可以做到在多台机器上,部署多个 Redis 实例,每个实例存储一部分的数据,同时每个 Redis 主实例可以挂 Redis 从实例,自动确保说,如果 Redis 主实例挂了,会自动切换到 Redis 从实例上来。Redis 维护集群元数据采用另一个方式, gossip 协议,所有节点都持有一份元数据,不同的节点如果出现了元数据的变更,就不断将元数据发送给其它的节点,让其它节点也进行元数据的变更。增加一个节点也同理。

2024-05-24 17:56:51 455

原创 Redis 的过期策略都有哪些?内存淘汰机制都有哪些?手写一下 LRU 代码实现?

而往往最常读取的,也就是读取次数最多的,所以利用好 LRU 算法,我们能够提供对热点数据的缓存效率,能够提高缓存服务的内存使用率。假设 Redis 里放了 10w 个 key,都设置了过期时间,你每隔几百毫秒,就检查 10w 个 key,那 Redis 基本上就死了,cpu 负载会很高的,消耗在你的检查过期 key 上了。如果你连这个问题都不知道,上来就懵了,回答不出来,那线上你写代码的时候,想当然的认为写进 Redis 的数据就一定会存在,后面导致系统各种 bug,谁来负责?内存淘汰机制都有哪些?

2024-05-24 16:00:00 291

原创 Redis 哨兵集群实现高可用

sentinel,中文名是哨兵。哨兵用于实现 Redis 集群的高可用,本身也是分布式的,作为一个哨兵集群去运行,互相协同工作。哨兵集群必须部署 2 个以上节点,如果哨兵集群仅仅部署了 2 个哨兵实例,quorum = 1。配置quorum=1,如果 master 宕机, s1 和 s2 中只要有 1 个哨兵认为 master 宕机了,就可以进行切换,同时 s1 和 s2 会选举出一个哨兵来执行故障转移。但是同时这个时候,需要 majority,也就是大多数哨兵都是运行的。

2024-05-24 15:50:50 666

原创 Redis 都有哪些数据类型?分别在哪些场景下使用比较合适?

直接基于 set 将系统里需要去重的数据扔进去,自动就给去重了,如果你需要对一些数据进行快速的全局去重,你当然也可以基于 jvm 内存里的 HashSet 进行去重,但是如果你的某个系统部署在多台机器上呢?比如可以通过 lrange 命令,读取某个闭区间内的元素,可以基于 list 实现分页查询,这个是很棒的一个功能,基于 Redis 实现简单的高性能分页,可以做类似微博那种下拉不断分页的东西,性能高,就一页一页走。这是最简单的类型,就是普通的 set 和 get,做简单的 KV 缓存。

2024-05-24 11:38:06 222

原创 Redis 和 Memcached 有什么区别?

Redis 选择使用单线程模型处理客户端的请求主要还是因为 CPU 不是 Redis 服务器的瓶颈,所以使用多线程模型带来的性能提升并不能抵消它带来的开发成本和维护成本,系统的性能瓶颈也主要在网络 I/O 操作上;多个 socket 可能会并发产生不同的操作,每个操作对应不同的文件事件,但是 IO 多路复用程序会监听多个 socket,会将产生事件的 socket 放入队列中排队,事件分派器每次从队列中取出一个 socket,根据 socket 的事件类型交给对应的事件处理器进行处理。

2024-05-24 11:36:44 445

原创 ES 在数据量很大的情况下(数十亿级别)如何提高查询效率啊?

举个例子吧,假如你每页是 10 条数据,你现在要查询第 100 页,实际上是会把每个 shard 上存储的前 1000 条数据都查到一个协调节点上,如果你有个 5 个 shard,那么就有 5000 条数据,接着协调节点对这 5000 条数据进行一些合并、处理,再获取到最终第 100 页的 10 条数据。里面了,就可以确保热数据的访问性能是很高的。举个例子,拿微博来说,你可以把一些大 V,平时看的人很多的数据,你自己提前后台搞个系统,每隔一会儿,自己的后台系统去搜索一下热数据,刷到。

2024-05-24 11:34:52 524

原创 ​ES 写入数据的工作原理是什么啊?

每隔 5s,将数据写入 translog 文件(这样如果机器宕机,内存数据全没,最多会有 5s 的数据丢失),translog 大到一定程度,或者默认每隔 30mins,会触发 commit 操作,将缓冲区的数据都 flush 到 segment file 磁盘文件中。translog 其实也是先写入 os cache 的,默认每隔 5 秒刷一次到磁盘中去,所以默认情况下,可能有 5 秒的数据会仅仅停留在 buffer 或者 translog 文件的 os cache 中,如果此时机器挂了,会。

2024-05-24 11:25:20 402

原创 ES 的分布式架构原理能说一下么(ES 是如何实现分布式的啊)?

有些订单是虚拟商品的订单,比如游戏点卡,话费充值。实际上你往 index 里的一个 type 里面写的一条数据,叫做一条 document,一条 document 就代表了 mysql 中某个表里的一行,每个 document 有多个 field,每个 field 就代表了这个 document 中的一个字段的值。,比如你数据量是 3T,3 个 shard,每个 shard 就 1T 的数据,若现在数据量增加到 4T,怎么扩展,很简单,重新建一个有 4 个 shard 的索引,将数据导进去;

2024-05-24 11:22:07 494

原创 如何解决消息队列的延时以及过期失效问题?

某些业务流程如果支持批量方式消费,则可以很大程度上提高消费吞吐量,例如订单扣款类应用,一次处理一个订单耗时 1 s,一次处理 10 个订单可能也只耗时 2 s,这样即可大幅度提高消费的吞吐量,通过设置 consumer 的 consumeMessageBatchMaxSize 返个参数,默认是 1,即一次只消费一条消息,例如设置为 N,那么每次消费的消息数小于等于 N。关于这个事儿,我们一个一个来梳理吧,先假设一个场景,我们现在消费端出故障了,然后大量消息在 mq 里积压,现在出事故了,慌了。

2024-05-24 11:16:30 679

原创 如何保证消息的可靠性传输?

(对原始消息的封装),该消息对消费者不可见,MQ 通过 ACK 机制返回消息接受状态, 生产者执行本地事务并且返回给 MQ 一个状态(Commit、RollBack 等),如果是 Commit 的话 MQ 就会把消息给到下游, RollBack 的话就会丢弃该消息,状态如果为 UnKnow 的话会过一段时间回查本地事务状态,默认回查 15 次,一直是 UnKnow 状态的话就会丢弃此消息。这样就可以保证 RabbitMQ 持久化 queue 的元数据,但是它是不会持久化 queue 里的数据的。

2024-05-24 10:00:00 548

原创 如何保证消息的顺序性?

如何保证消息的顺序性?其实这个也是用 MQ 的时候必问的话题,第一看看你了不了解顺序这个事儿?第二看看你有没有办法保证消息是有顺序的?这是生产系统中常见的问题。我举个例子,我们以前做过一个 mysql 同步的系统,压力还是非常大的,日同步数据要达到上亿,就是说数据从一个 mysql 库原封不动地同步到另一个 mysql 库里面去(mysql -> mysql)。常见的一点在于说比如大数据 team,就需要同步一个 mysql 库过来,对公司的业务系统的数据做各种复杂的操作。你在 mysql 里增删改一条数

2024-05-23 18:45:44 509

原创 如何保证消息不被重复消费?

假设你有个系统,消费一条消息就往数据库里插入一条数据,要是你一个消息重复两次,你不就插入了两条,这数据不就错了?但是你要是消费到第二次的时候,自己判断一下是否已经消费过了,若是就直接扔了,这样不就保留了一条数据,从而保证了数据的正确性。能不能避免重复消费?(定时定期),会把自己消费过的消息的 offset 提交一下,表示“我已经消费过了,下次我要是重启啥的,你就让我继续从上次消费到的 offset 来继续消费吧”。幂等性,通俗点说,就一个数据,或者一个请求,给你重复来多次,你得确保对应的数据是不会改变的,

2024-05-23 18:31:05 501

原创 如何保证消息队列的高可用?

实际上 RabbitMQ 之类的,并不是分布式消息队列,它就是传统的消息队列,只不过提供了一些集群、HA(High Availability, 高可用性) 的机制而已,因为无论怎么玩儿,RabbitMQ 一个 queue 的数据都是放在一个节点里的,镜像集群模式下,也是每个节点都放这个 queue 的完整数据。第二,这么玩儿,不是分布式的,就。,指定的时候是可以要求数据同步到所有节点的,也可以要求同步到指定数量的节点,再次创建 queue 的时候,应用这个策略,就会自动将数据同步到其他的节点上去了。

2024-05-23 18:21:53 769

转载 为什么使用消息队列?

那么 A 系统连续发送 3 条消息到 MQ 队列中,假如耗时 5ms,A 系统从接受一个请求到返回响应给用户,总时长是 3 + 5 = 8ms,对于用户而言,其实感觉上就是点个按钮,8ms 以后就直接返回了,爽!所以消息队列实际是一种非常复杂的架构,你引入它有很多好处,但是也得针对它带来的坏处做各种额外的技术方案和架构来规避掉,做好之后,你会发现,妈呀,系统复杂度提升了一个数量级,也许是复杂了 10 倍。但是问题是,要是 BCD 三个系统那里,BD 两个系统写库成功了,结果 C 系统写库失败了,咋整?

2024-05-23 18:14:13 15

原创 爆火AI美女跳舞制作全流程-SD插件Ebsynth_Utility(附带所有工具包)

Stable Diffusion XL 能够生成几乎任何艺术风格的高质量图像,是用来生成写实图像的最佳开放模型。Stable Diffusion是一个可以和MJ相媲美的AI出图工具,简称SD它是一个开源的、免费的项目,没有公司在经营,如果你想用,是需要安装到自己电脑上的,用自己的电脑来渲染出图,同时需要很多数据模型来训练这个工具,让它更加智能。它的优点很明显,免费!除此之外,如果你懂电脑技术,那SD的可定制化会更高,你可以通过训练自己的数据,更好的控制AI出图的构图和姿势。

2024-05-21 18:06:10 1116

原创 ElasticSearch新手教程

一.ES原理分析 1.1 全文检索的一般过程 1.2 反向索引 1.3 和nosql相比 1.4 ES的优缺点分析: 1.5 ES的特点: 二.讲讲Segment 2.1 什么是segment 2.2 segment流程图 2.3 删除和更新 2.4 实时索引 2.5更新持久化 2.6 Segment合并 Segment 三.全文检索的基本原理 3.1 对数据分类 3

2017-12-09 22:18:06 6565 1

原创 maven简介

一、maven简介 1.什么是maven? 2.什么是构建? 3.ant,maven的比较 4.maven软件安装目录结构 5.maven项目的目录结构 6.maven的特点 7.插件介绍 8.名词解释 8.1 Pom 8.2 Artifact 8.3 Repositories 9. mvn常用参数 10.与前端项目管理工具的简单比较 二、maven基本原理 1.m

2017-12-09 22:02:27 447

转载 JavaWeb学习笔记之自定义数据库连接池

一、应用程序直接获取数据库连接的缺点  用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长。假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大的浪费数据库的资源,并且极易造成数据库服务器内存溢出、拓机。如下图所示:      二、使用数据库连接池优化程序性能2.1、数据库连接池的基本概念  数据库连接是一种关键的有限的昂贵的资源,这一点

2016-06-18 11:59:47 2023

翻译 Javaweb学习之SpringMVC视图解析器的分析

在这篇博客中将接着介绍一下SpringMVC视图解析器。当我们对SpringMVC控制的资源发起请求时,这些请求都会被SpringMVC的DispatcherServlet处理,接着Spring会分析看哪一个HandlerMapping定义的所有请求映射中存在对该请求的最合理的映射。然后通过该HandlerMapping取得其对应的Handler,接着再通过相应的HandlerAdapter处理该H

2016-06-16 22:01:10 3073

转载 JavaWeb学习之HibernateDaoSupport使用

看到一篇很好描述HibernateDaoSupport类使用的例子,特此在这和大家分享一下 核心提示:1、 继承了HibernateDaoSupport类的类获取session时,已不可用SessionFactory.OpenSessioon的形式来获 取Session了,由于HibernateDaoSupport本身已有获取session的方法getSession(),所以直接用Session

2016-06-15 21:24:06 545

翻译 JavaWeb学习之Servlet3.0新特性详解

异步处理支持:有了该特性,Servlet 线程不再需要一直阻塞,直到业务处理完毕才能再输出响应,最后才结束该 Servlet 线程。在接收到请求之后,Servlet 线程可以将耗时的操作委派给另一个线程来完成,自己在不生成响应的情况下返回至容器。针对业务处理较耗时的情况,这将大大减少服务器资源的占用,并且提高并发处理速度。新增的注解支持:该版本新增了若干注解,用于简化 Servlet、过滤器(Fi

2016-06-15 20:52:13 3726

翻译 JavaWeb学习笔记之Mybatis实用sql语句汇总

一、批量插入/更新/删除批量操作主要使用的是Mybatis的foreach,遍历参数列表执行相应的操作,所以批量插入/更新/删除的写法是类似的,只是SQL略有区别而已。MySql批量操作需要数据库连接配置allowMultiQueries=true才可以。 (1)批量插入 insert into user (name, age,dept_code

2016-06-11 20:44:09 1241

原创 JavaWeb学习笔记之spring mvc处理方法支持如下的返回方式

一 返回值类型ModelAndViewModelModelMapMapViewStringvoid二 返回值详细讲解ModelAndView@RequestMapping("/show1") public ModelAndView show1(HttpServletRequest request, HttpServletResponse response) t

2016-06-11 20:20:53 341

原创 JavaWeb学习笔记之图解Struts和SpringMVC区别

个人心得:springmvc可以精确控制到方法上,controller可以单例开发,Struts2的action则是多例prototype开发,基于类进行拦截请求的。springmvc的速度一般比Struts2要快,主要是s标签的原因。所以建议使用jstl表达式。Struts2曾经爆出重大漏洞,就是ognl表达式URL注入的漏洞。目前springmvc还没有发现什么漏洞。怎么说呢,你需要去了

2016-06-11 17:29:55 1289 1

转载 Javaweb学习笔记之Spring的依赖注入方式

平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中。依赖注入的另一种说法是“控制反转”,通俗的理解是:平常我们new一个实例,这个实例的控制权是我们程序员,而控制反

2016-06-11 17:19:36 978

翻译 JavaWeb学习笔记之Spring中bean的作用域

Bean简介: 在Spring中,那些组成你应用程序的主体(backbone)及由Spring IoC容器所管理的对象,被称之为bean。 简单地讲,bean就是由Spring容器初始化、装配及管理的对象,除此之外,bean就与应用程序中的其他对象没有什么区别了。 而bean定义以及bean相互间的依赖关系将通过配置元数据来描述。 Bean的作用域 创建一个bean定义,其实质是用该b

2016-06-11 17:15:05 850

转载 JavaWeb学习笔记之SSM三大框架整合详细教程

1、基本概念1.1、SpringSpring 是一个开源框架, Spring 是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作 Expert One-On-One J2EE Development and Design 中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。 Spring 使用基本的 JavaBean 来完成以前

2016-06-11 16:58:42 6030

原创 JavaWeb学习笔记之SSM框架搭建配置文件

/WEB-INF/web.xml:-----------------<?xml version="1.0" encoding="UTF-8"?><web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xs

2016-06-11 16:52:33 6380

原创 JavaWeb学习笔记之Servlet九大内置对象

1.request对象:  客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例。  2.response对象:  response对象包含了响应客户请求的有关信息,但在JSP中很少直接用到它。它是HttpServletResponse类的实例。  3.session对象: 代表用户的一次会话,浏

2016-06-11 16:09:29 620

原创 JavaWeb学习笔记之Mybatis关键对象

SqlSessionFactoryBuilder 用来创建SqlSessionFactory的,一旦创建完SqlSessionFactory实例之后,这个类就不需要存在了,所以可以把它作为一个局部变量使用。String resource = “org/mybatis/example/mybatis-config.xml”;InputStream inputStream = Resources.ge

2016-06-11 16:02:43 366

翻译 Java学习笔记之RMI远程方法调用

RMI 应用通常有两个分开的程序组成,一个服务端程序和一个客户端程序。一个典型的服务端程序创建一些远程对象,使得对这些远程对象的引用可以被访问,等待客户端调用这些远程对象提供的方法。一个典型的客户端程序获取远程引用,指向一个或者多个服务端上的远程对象,然后调用这些远程对象所提供的方法。通常我们称这为分布式对象应用程序。3.1 RMI的工作方式分布式对象应用程序需要做的事情:l 查找(

2016-06-11 15:11:56 3563 1

翻译 Java线程池使用说明

Java线程池使用说明一简介线程的使用在java中占有极其重要的地位,在jdk1.4极其之前的jdk版本中,关于线程池的使用是极其简陋的。在jdk1.5之后这一情况有了很大的改观。Jdk1.5之后加入了java.util.concurrent包,这个包中主要介绍java中线程以及线程池的使用。为我们在开发中处理线程的问题提供了非常大的帮助。 二:线程池线程池的作用: 线程池作用就是限制系统中执行

2016-06-11 14:58:39 321

原创 java学习笔记之可变长参数

可变长参数的定义void print (String ... args ){}2.可变长参数的使用规则 a.参数列表中只能有一个可变长参数 void print(String ...args1 ,String ...args2 ){//错误的参数列表.....}b.可变长参数只能是最后一个参数 c.如果有重载函数,不能发生歧义,否则调用不了 void print (String

2016-06-11 13:54:22 253

原创 Java学习笔记之多线程操作

以前学习基础的时候学习了一段时间的多线程,上课的时候老师也讲过一遍,那时候感觉学的似懂非懂。因为到现在很长一段时间没有用到多线程的知识,所以现在基本上忘了差不多了。但是下个星期要面试了,所以今天特意又研究了一下多线程,免得被问到多线程问题时什么都不记得了那就麻烦了。现在对java比较熟悉了,所以再一次学习多线程知识,感觉没有那么难了(记得刚接触多线程的时候,感觉非常吃力)。  首先讲一下进程和线程的

2016-06-11 13:42:48 358

翻译 JavaWeb学习笔记之Log4j使用教程

一、入门实例1.新建一个JAva工程,导入包log4j-1.2.17.jar,整个工程最终目录如下 2、src同级创建并设置log4j.properties ### 设置### log4j.rootLogger = debug,stdout,D,E输出信息到控制抬log4j.appender.stdout = org.apache.log4j.ConsoleAppender lo

2016-06-11 11:19:57 5924

原创 java学习笔记之集合框架

上述类图中,实线边框的是实现类,比如ArrayList,LinkedList,HashMap等,折线边框的是抽象类,比如AbstractCollection,AbstractList,AbstractMap等,而点线边框的是接口,比如Collection,Iterator,List等。  发现一个特点,上述所有的集合类,都实现了Iterator接口,这是一个用于遍历集合中元素的接口,主要包含hash

2016-06-11 11:02:10 305 1

翻译 java学习笔记之内存模型

Java内存分配原理的时候一定要牢记这一切都是在JVM中进行的,JVM是内存分配原理的基础与前提。 简单通俗的讲,一个完整的Java程序运行过程会涉及以下内存区域: l 寄存器:JVM内部虚拟寄存器,存取速度非常快,程序不可控制。 l 栈:保存局部变量的值,包括:1.用来保存基本数据类型的值;2.保存类的实例,即堆区对象的引用(指针)。也可以用来保存加载方法时的帧。 l 堆:用来存放动态产生

2016-06-11 11:00:33 273

原创 java学习笔记之jdbc连接数据库

步骤如下:1. 加载jdbc驱动程序 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.lang.Class类的静态方法forName(String className)实现。 例如: try{ //加载MySql的驱动类 Class.forName(“com.mysql.jdbc.Driver”)

2016-06-11 10:39:17 320

SSH开发的一个在线服装商店

SSH (Spring+Struts2+Hibernate)开发的一个在线服装商店

2016-06-11

仿安卓美团界面源码

用安卓开发的一个模仿美团界面的源码实例

2016-06-11

CRM淘宝平台之客户关系管理系统

基于淘宝业务模型设计的UML设计

2016-06-11

JavaWeb接入微信公众号

Java后台接入微信平台源码

2016-06-11

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除