1.分布式存储 1.1问题 12亿条数据需要缓存,如何设计存储案例。 1.2解决 单机单台100%不可能,肯定是分布式存储,用redis如何落地? 并且在分布式缓存服务中,经常需要对服务进行节点添加和删除操作,我们希望的是节点添加和删除操作尽量减少数据-节点之间的映射关系更新(节点数的增加与减少对数据命中节点影响不大)。 1.2.1哈希取余分区 2亿条记录就是2亿个k,v,单机不行必须要分布式多机,假设有3台机器构成一个集群,用户每次读写操作都是根据公式:hash(key)%N个机器数,计算出哈希值,用来决定数据映射到哪一个节点上。 优点 简单粗暴,直接有效,只需要预估好数据规划好节点,例如...

最近在公司接到了一个给项目整合dubbo的任务,由于自己之前没学过dubbo,同时开发经验也不足,整整弄了两天才算是弄好,写篇文章记录一下这个过程。 1.按照公司的dubbo+nacos+springboot整合文档给项目加上了相关maven依赖,启动报错,原因是依赖有冲突,通过报错信息找到了冲突的依赖,去掉之后就不报这个错了。 2.启动项目之后,可以看到控制台把该连的连上,该初始化的初始化之后,又一点点地把它们关上了,控制台最后面的报错信息就是closingxxx,xxxshutdown。一开始只关注了这几个“关闭”的提示,没有往上翻日志,导致错过了关键报错信息。这些东西关闭的原因是“xx...

  wMDCgnRK3Ovr   2023年11月27日   30   0   0 dubbodubbo

1内存分代 垃圾回收主要是在堆没有足够的内存空间来存放新创建的对象时被触发。由于堆中的对象生命周期不同,故在进行垃圾回收时,不是所有对象都需要被回收,只是回收不再可达的对象。同时在进行垃圾回收时需要暂停应用程序,故会造成应用在暂停期间不可用,垃圾回收持续的时间越长,则应用不可用越久。而垃圾回收由于要基于对象可达性分析确定需要回收哪些对象,故持续时间与需要扫描和分析的内存区域的大小相关。 基于以上分析,为了尽量减少应用停顿时间,JVM根据对象生命周期的长短,基于分代的思路,将堆进一步细分为新生代和老年代两个区域,从而缩小垃圾回收需要扫描和分析的内存范围。新生代和老年代的大小比例可以通过JVM参...

1.为什么key要设置成弱引用呢? 先来看看ThreadLocalMap对key和value的构造: staticclassEntryextendsWeakReference<ThreadLocal<?>>{ /ThevalueassociatedwiththisThreadLocal./ Objectvalue; Entry(ThreadLocal<?>k,Objectv){ super(k); value=v; } } 在set方法中,会将key和value以entry对象进行存储,key就是我们的ThreadLocal引用,value就是我们要设置...

4.Docker的基本组成 4.1镜像(image) Docker镜像就是一个只读的模板。镜像可以用来创建Docker容器,一个镜像可以创建很多容器。它也相当于是一个root文件系统。比如官方镜像centos:7就包含了一套centos:7最小系统的root文件系统。相当于容器的“源代码”,docker镜像文件类似于Java的类模板,而docker容器实例类似于java中new出来的实例对象。 4.2容器(container) 4.2.1从面向对象角度 Docker利用容器独立运行一个或一组应用,应用程序或服务运行在容器里面,容器就类似于一个虚拟化的运行环境,容器是用镜像创建的运行实例。就像...

  wMDCgnRK3Ovr   2023年11月24日   86   0   0 文件系统docker文件系统docker

一、分库分表 1.1什么是分库分表 分库:一个数据库分成多个数据库,部署到不同机器。 分表:一个数据库表分成多个表 1.2为什么需要分库分表 1.2.1为什么需要分库 如果业务量剧增,数据库可能会出现性能瓶颈,这时候我们就需要考虑拆分数据库。从这几方面来看: 磁盘存储 业务量剧增,MySQL单机磁盘容量会撑爆,拆分成多个数据库,磁盘使用率大大降低。 并发连接支撑 我们知道数据库连接是有限的。在高并发的场景下,大量请求访问数据库,MySQL单机是扛不住的。当前非常火的微服务架构出现,就是为了应对高并发。它把订单、用户、商品等不同模块,拆分成多个应用,并且把单个数据库也拆分成多个不同功...

一、单例模式 1.模式动机 对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一个系统只能有一个窗口管理器或文件系统;一个系统只能有一个计时工具或ID(序号)生成器。 如何保证一个类只有一个实例并且这个实例易于被访问呢?定义一个全局变量可以确保对象随时都可以被访问,但不能防止我们实例化多个对象。 一个更好的解决方法是让类自身负责保存它的唯一实例。这个类可以保证没有其他实例被创建,并且它可以提供一个访问该实例的方法。这就是单例模式的模式动机。 2.模式定义 单例模式(SingletonPattern):单例模式确保某一个类只有一...

一、select、poll、epoll select、poll、epoll都是IO多路复用的机制且本质上都是同步I/O。 IO多路复用就是通过一种机制,可以同时监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知进行相应的读写操作。 1.1select intselect(intn,fd_setreadfds,fd_setwritefds,fd_setexceptfds,structtimevaltimeout); select函数监视的文件描述符分3类,分别是writefds、readfds和expectfds。调用后select函数会阻塞,直到有描述符就绪(有数据...

1.JDBC 1.1JDBC是什么 高级语言的应用程序需要特定的方式访问数据库。 特定的方式:JDBC,ODBC JDBC本质上是一系列的应用程序接口(API) 通过JAVA语言访问任何结构化数据库 通过JDBCAPI写出的程序,能够将SQL语句发送到相应的任何一种数据库 通过使用JDBC,开发人员可以很方便地将SQL语句传送给几乎任何一种数据库。也就是说,开发人员可以不必写一个程序访问SyBase,写另一个程序访问Oracle,再写一个程序访问Microsoft的SQLServer。用JDBC写的程序能够自动地将SQL语句传送给相应地数据库管理系统(DBMS)。不但如此,使用J...

  wMDCgnRK3Ovr   2023年11月17日   45   0   0 数据库sqlSQL数据库

1.RabbitMQ是什么 RabbitMQ是一个广泛使用的消息服务器,采用Erlang语言编写,是一种开源的实现AMQP(高级消息队列协议)的消息中间件;RabbitMQ最初起源于金融系统,它的性能及稳定性都非常出色。 AMQP协议(http://www.amqp.org),即AdvancedMessageQueuingProtocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。 简单来说,消息中间件就是指保存数据的一个容器(服务器),可以用于两个系统之间的数据传递。 消息中间件一般有三个主要角色:生产者、消费者、消息代理(消息队列、消息服务器); 生产者发送消...

关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~