自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(70)
  • 资源 (1)
  • 收藏
  • 关注

原创 Redis实现分布式锁

redis分布式锁使用set(key,value,60,NX),当key不存在set返回1,就相当获取到锁,然后就可以执行业务逻辑.如果返回的是0,则获取锁失败。设置key的过期时间过期就相当于释放锁,其他线程这时候可以获取该锁。在释放锁时,首先判断ke对应的值是否在同一线程中,如果在则执行完成后将删除key来释放锁,这样的好处就是一旦业务逻辑没有执行完而过期时间到了,这样可能会删除其他线程的锁的。

2023-05-08 15:16:03 118 1

原创 Java中几种office文档转pdf的方式

Java中几种office文档转pdf的方式:https://www.cnblogs.com/excellencesy/p/11603892.html

2023-02-17 13:40:36 387

原创 开源容器-Docker

1. 虚拟化技术虚拟化技术可以将一台物理服务器虚拟为多台逻辑服务器,每台逻辑服务器可运行不同的操作系统,系统内的应用程序也相互隔离不受影响,从而显著提高服务器的运行效率。常用的虚拟化技术有:...

2021-11-16 16:16:40 2316

原创 15.JDK8新特性之Stream流

什么是 StreamStream(流)是一个来自数据源的元素队列并支持聚合操作1)元素是特定类型的对象,形成一个队列。 Java中的Stream并不会存储元素,而是按需计算。2)数据源 流的来源。 可以是集合,数组,I/O channel, 产生器generator 等。3)聚合操作 类似SQL语句一样的操作, 比如filter, map, reduce, find, match, sorted等。和以前的Collection操作不同, Stream操作还有两个基础的特征:1)Pipelin..

2021-11-10 17:40:55 586

原创 10.MySQL 支持的锁

MySQL 的所级别有三种行级锁、表级锁、页级锁。类型开销加锁速度死锁锁定粒度锁冲突概率行级锁大慢会最小最低表级锁小快不会最大最高页级锁适中适中会适中适中MySQL InnoDB 既支持行级锁,也支持表级锁,默认行级锁。...

2021-10-12 15:59:17 487

原创 9.MySQL 相关优化

SQL查询优化1)不在索引列上上使用表达式计算;2)不要再索引列上使用 is null 和 is not null;3)避免子查询,用 exists 替代 in、用 not exists 代替 not in;4)尽量避免全表扫描,首先应考虑在where 及 order by 涉及的列上建立索引;5)不要 select * ;6)尽量别使用外键;7)索引字段不要使用范围查询(<,>,between,like);8)尽量避免大事务操作,提高系统并发能力;9)where 判断 nu.

2021-09-26 16:38:26 92

原创 8.MySQL 一些常见的关键字的区别

char 和 varchar 的区别1)char 是固定长度的,而 varchar 是可变长度的2)char 最多可以存放 255 个字节,varchar 的最大长度为 65535 个字节,varchar 可存放的字符数跟编码有关(字符类型若为gbk,每个字符最多占 2 个字节,最大长度不能超过 32766 个字符)...

2021-09-26 14:51:01 81

原创 7.MySQL 索引的数据结构(四)

MySQL 不同的引擎对于索引有不同的支持。InnoDB 和 MyISAM 索引使用的是 B + Tree,而Mermory 索引使用的是 Hash。MySQL 一个表最多创建 64 个索引,索引最多包含 16 个列。MySQL 索引选用 B+树的原因1)提高索引查询时的磁盘 IO效率,还可以提高范围查询的效率;2)查询 IO 次数更少,特别是范围查询;3)所有查询都有查找到叶子节点,查询性能稳定;4)B+ 树里的元素也都是有序的;...

2021-09-25 22:13:31 75

原创 6.MySQL常用的创建索引以及Explain详解(三)

一、索引创建普通索引这是最基本的索引,它没有任何限制,比如上文中为title字段创建的索引就是一个普通索引,MyIASM中默认的BTREE类型的索引,也是我们大多数情况下用到的索引。1)创建方式:直接创建索引CREATE INDEX index_name ON table(column(length))修改表结构的方式添加索引ALTER TABLE table_name ADD INDEX index_name ON (column(length))创建表的时候同时创建索引CREA

2021-09-24 17:08:01 287

原创 5.MySQL8.0新特性(二)

MySQL8.0 新特性1)性能:MySQL 8.0 的速度要比 MySQL 5.7 快 2 倍。MySQL 8.0 在以下方面带来了更好的性能:读写工作负载、IO 密集型工作负载、以及高竞争("hot spot"热点竞争问题)工作负载。2)NoSQL:MySQL 从 5.7 版本开始提供 NoSQL 存储功能,目前在 8.0 版本中这部功能也得到了更大的改进。该项功能消除了对独立的NoSQL 文档数据库的需求,而 MySQL 文档存储也为 schema-less 模式的 JSON 文档提供了多文档事.

2021-09-24 09:33:36 172

原创 4.MySQL索引(一)

索引在关系数据库中,索引是一种单独的。物理的对数据库中一列或多列的值进行排序的一种存储结构,索引的作用相当于图书的目录,可以根据目录中页码快速找到所需的内容。数据库使用索引可以使 SQL 语句执行得更快,可快速访问数据库中的特定数据。索引作用优点:1)可以大大加快数据的检索速度,这也是创建索引的最主要的原因;2)通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性;3)可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义;缺点:1)索引需要占物理空间,除了数据表占数据.

2021-09-23 14:04:15 133

原创 3.MySQL 相关命令

MySQL 切换数据库命令use javastack;MySQL 查看所有数据库命令show databases;MySQL 查看当前库所有表命令show tables;

2021-09-18 15:24:18 61

原创 2.数据库事务

事务特性数据库事务 4 个特性(ACID),一个支持事务的数据库,必须要具有这四种特性,否则在事务过程当中无法保证数据的正确性,交易过程极可能达不到交易方的要求。1)原子性事务要么全部全部被执行,要么就全部不被执行。2)一致性事务必须始终保持系统处于一致的状态,不管在任何给定的时间并发事务有多少。3)隔离性在事务正确提交之前,不允许把该事务对数据的任何改变提供任何其他事务。4)持久性在事务完成以后,该事务对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。脏读、幻读和不可重..

2021-09-18 15:15:56 102

原创 1.范式化和反范式化

范式化所谓的范式化,就是一系列设计数据库模型的规则,范式化的目的是减少数据冗余,提高数据完整性。反范式化所谓反范式化,是一种对范式化设计的数据库的性能优化策略,通过在表中增加冗余或重复的数据来提供数据库的读取性能。没有冗余的数据库不一定是最好的数据库,有时为了提高查询效率,就必须降低范式标准,适当保留冗余数据。具体操作就是在一个表中增加别一个表的冗余字段,减少了两个表查询时的关联,从而提高查询效率。三范式第一范式:是对属性的原子性约束,要求属性具有原子性,不可再分解。第二范式:是对..

2021-09-18 10:15:29 3749

原创 18.Redis 如何统计独立用户访问量

Hash哈希是 Redis 的一种基础数据结构,Redis 底层维护的是一个开散列,会把不同的key映射到哈希表上,如果是遇到关键字冲突,那么就会来出一个链表出来。当一个用户访问的时候,如果用户登陆过,那么我们就使用用户的 ID ,如果用户没有登陆过,那么我们也能够前端页面随机生成一个 key 用来标识用户。当用户访问的时候,我们可以使用 HSET命令 1,key 可以选择 URI 与对应的日期进行拼凑,field 可以使用用户的 ID 或者随机标识,value 可以简单设置为 1。当我们要统计.

2021-09-17 14:49:13 361

原创 17.Redis 一些危险命令

Redis 的危险命令主要有一下几个:keys客户端可查询所有的存在的键。flushdb删除 Redis 中当前所在数据库中的所有记录,并且此命令从不会执行失败。flushall删除 Redis 中所有数据库中的所有记录,不只是当前所在数据库,并且此命令从不会执行失败。config客户端可修改 Redis 配置。防范措施:在 redis.conf 默认配置文件,找到 SECURITY 区域,添加 rename-command 配置可以禁用和重命名命令,经过以下的配置以后,危险命令就不

2021-09-17 09:52:31 584

原创 16.解决 Redis 和数据库双写一致的问题

当数据时效性要求很高时,需要保证缓存中的数据和数据库中保持一致,而且需要保证缓存节点和副本中的数据也保持一致,不能出现差异现象,这就比较依赖缓存的过期和更新策略。一般会在数据发生更改的时候,主动更新缓存中的数据或者移除对应的缓存。#mermaid-svg-4YexqIZeTTAlWQ3M .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333

2021-09-17 09:21:50 73

原创 15.Redis 缓存击穿

缓存击穿:实际上是缓存雪崩的一个特例,大家使用过微博的应该都知道,微博有一个热门话题的功能,用户对于热门话题的搜索量往往在一些时刻会大大的高于其他话题,这种我们称为系统的“热点”。由于系统中对这些热点的数据缓存也存在失效时间,在热点的缓存到达失效时间时,此时可能依然会有大量的请求到达系统,没有了缓存层的保护,这些请求同样的会到达 DB 从而可能引起故障。击穿与雪崩的区别即在于击穿是对于特定的热点数据来说,而雪崩是全部数据。解决方案:对于热点数据进行耳机缓存对于不同级别的缓存设定不同的失效时间

2021-09-16 16:22:42 58

原创 14.Redis 缓存穿透

缓存穿透:指在高并发场景下,如果某一个key被高并发访问,没有被命中,处于对容错性考虑,会尝试去从后端数据库中获取,从而导致了大量请求达到数据库,而当该key对应的数据本身就是空的情况下,这就导致数据库中并发的去执行了很多不必要的查询操作,从而导致巨大冲击和压力。缓存穿透解决方案:缓存空对象对查询结果为空的对象也进行缓存,如果是集合,可以缓存一个空的集合(非null),如果是缓存单个对象,可以通过字段标识来区分。这样避免请求穿透到后端数据库。同时,也需要保证缓存数据的时效性。这种方式实现起来成本

2021-09-16 15:26:18 42

原创 13.Redis 缓存雪崩

缓存雪崩就是指由于缓存的原因,导致大量请求到达后端数据库,从而导致数据库崩溃,整个系统崩溃,发生灾难。缓存雪崩解决方案:给缓存的失效时间加上一个随机值,避免集体失效。双缓存,我们有两个缓存,缓存 A 和缓存 B 。缓存 A 的失效时间为 20 分钟,缓存 B 不设失效时间。自己做缓存预热操作。然后细分一下几个小点:从缓存 A 读取数据,有则直接返回;A 没有数据,直接从 B 读取数据,直接返回,并且异步启动一个更新线程,更新线程同时更新缓存 A 和缓存 B 。...

2021-09-16 10:20:41 40

原创 12.Redis 缓存预热和缓存热备

缓冲预热新的缓存系统没有任何缓存数据,在缓存重建数据的过程中,系统性能和数据库负载都不太好,所以最好是在系统上线之前就把要缓存的热点数据加载到缓存中,这种缓存预加载手段就是缓存预热。缓存热备缓存热备即当一台缓存服务器不可用时能实现切换到备用缓存服务器,不影响缓存使用。集群模式下,每个主节点都会有一个或多个从节点来当备用,一旦主节点挂掉,从节点立即充当主节点使用。...

2021-09-15 16:25:38 377

原创 11.Redis 支持的客户端

支持 Java 客户端Redisson、Jedis、lettuce、aredis 等等,官方推荐使用的 Java 客户端是:Redisson。Redisson 框架1)Redisson 简介Redisson 是 Redis 官方推荐的一个高级的分布式协调 Redis 客服端。Redisson 在基于 NIO 的Netty 框架上,充分的利用了Redis键值数据库提供的一系列优势,在Java实用工具包中常用的接口基础上,为使用者提供了一系列具有分布式特性的常用工具类。使得原本作为协调单机多线程并发.

2021-09-14 15:06:48 702

原创 10.Redis 的哈希槽

Redis 集群Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点。Redis 集群没有使用一致性hash, 而是引入了哈希槽的概念。Redis 集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决.

2021-09-13 16:50:16 215

原创 9.Redis 管道(pipe mode)

Redis 2.6 开始 redis-cli 支持一种新的被称之为 pipe mode(管道)的新模式用于大量数据插入工作。Redis 中的管道技术是指:Redis Pipelining,用于提高 Redis 服务的性能。管道技术可以在服务端还未响应时,客户端任然可以继续向服务端发送请求,即客户端可以发送多个命令到服务端,而不用等待服务器的响应,客户端会在最后再一次性读取所有的服务端的响应。redis的pipeline(管道)功能在命令行中没有,但是redis是支持管道的,在java的客户端(jed.

2021-09-13 16:21:54 739

原创 8.Redis 淘汰策略

淘汰策略相关问题1)如何保证 Redis 中数据都是热点数据?比如,现在 MySQL 数据库里有2000万数据,Redis 中只能存20万数据,如何保证 Redis 中的数据都是热点数据呢?答:在这里就用到了 Redis 的淘汰策略了,首先计算一下 20 万数据大概占用的内存大小,然后设置一下 Redis 的最大内存容量大小,并将淘汰策略为 volatile-lru 或者 allkeys-lru ,Redis 会根据自身数据进行淘汰策略,即淘汰最近最少使用的数据,最后留下来的都是热点数据。2)Re.

2021-09-13 15:05:43 281

原创 7.Redis 持久化

作用持久化就是把内存的数据写到磁盘中去,防止服务器宕机了内存数据丢失。持久化方式Redis 提供两种持久化机制:RDB(默认)和 AOF 机制。RDB(Redis DataBase)是 Redis 默认的持久化方式。按照一定的时间将内存的数据以快照的形式保存到硬盘中,对应产生的数据为 dump.rdb。通过配置文件中的 save 参数来定义快照的周期。AOF(Append Only File)是将 Redis 执行的每次写命令记录到单独的日志文件中,当重启 Redis 会重新持久化的日志中文件.

2021-09-10 16:23:19 101

原创 6.Redis 和 Memcache 的区别

存储方式Redis 支持数据持久性,可以持久化数据到硬盘上。Memcache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小。数据类型Redis 有丰富的数据结构,Memcache 只支持简单的字符串类型。数据大小Redis 单个 value 的最大限制是 1GB,Memcache 最大限制是 1MB。但是 Memcache 在存储 100K 以上的数据,性能稍微好一点。...

2021-09-08 16:26:15 53

原创 5.Redis 到底是单线程还是多线程?

Redis 是单线程。Redis 单线程到底指什么?Redis 单线程是指的是执行 Redis 命令的核心模块是单线程的,而不是整个 Redis 实例就一个线程,Reids 其它的模块还有各自模块的线程。Redis 基于 Reactor 模式开发了网络事件处理器,这个处理器被称为文件事件处理器。它的组成结构为4部分:多个套接字、IO多路复用程序、文件事件分派器事件处理器。因为文件事件分派器队列的消费是单线程的,所以Redis才叫单线程模型。Redis 不仅仅是单线程一般来说 Redis 的瓶颈

2021-09-08 15:31:25 240

原创 4.Redis 所消耗的资源

物理资源Redis 是内存数据库,所以主要消耗的是内存。数据放在内存中的原因因为Redis 定位就是一个内存数据库。内存的读取速度是最快的,如果放到硬盘,磁盘IO的速度势必会严重影响 Redis 的性能,那就和一般的关系数据库相比没有什么优势可言,而是随着现在内存硬件成本的降低,内存已经不是问题,性能才是关键,现在硬盘只是成为了一种持久化方案而已。...

2021-09-08 10:59:56 1324

原创 3.Redis 有什么优势

性能高、速度快Redis 命令执行速度非常快,官方给出的读写性能可以达到10w/s。性能高、速度快的原因:1)数据存储在内存中,直接与内存连接;2)由相对底层的C语言实现,离操作系统更近;...

2021-09-08 10:34:09 105

原创 2.Redis 的应用场景

缓存缓存现在几乎时所有中大型网站都在用的必杀技,合理的利用缓存不仅能够提升网站访问的速度,还能大大降低数据库的压力。Redis 提供了键过期功能,也提供了灵活的键淘汰策略,所以,现在 Redis 用在缓存的场合非常多。排行榜很多网站都有排行榜应用的,如京东的月度销量榜单、商品按时间的上新排行榜等。Redis 提供的有序集合数据类型能实现复杂的排行榜应用。计数器什么是计数器,如电商网站商品的浏览器、视频网站视频的播放数等。为了保证数据实时效每次浏览都得给+1,并发量高时如果每次都要请求数据库操作无.

2021-09-07 15:07:33 61

原创 3.Spring Cloud Netflix Eureka

1. 主流的注册中心2.Spring Cloud 怎么实现服务注册和发现Spring Cloud 通过 Eureka 完成服务注册和发现。Spring Cloud 所有服务都注册到 Eureka Server,并通过 Eureka Server 发现服务,而不需要关注服务地址的变化。3.Eureka 保护机制自我保护背景首先对 Eureka 注册中心需要了解的是Eureka 各个节点都是平等的,没有 ZK中的角色的概念,即使N-1个节点过掉也不会影响其他节点的正常运行。默认情况下,如果

2021-09-06 18:18:22 51

原创 2.Spring Cloud 的优势

Spring Cloud 的优势1)与分布式系统相关的复杂性:这里包括网络问题,延迟,贷款问题,安全性问题。2)服务发现:服务发现工具管理群集中的进程和服务如何查找相互通信。它涉及服务目录,在该目录中注册服务,然后能够在该目录中查找并连接到服务。3)冗余:分布式系统中的冗余问题。4)Loadbalancing:负载平衡改善跨多个计算机资源的工作负荷,诸如计算机,计算机集群,网络链路,中央处理单元,或磁盘驱动器的分布。5)性能问题:由于各种运营开销而导致的性能问题。6)部署复杂性:对 Devop.

2021-09-06 14:51:27 1939

原创 1.Spring Cloud 的简介

spring cloud的简介Spring Cloud 是目前主流的微服务技术框架,它利用 Spring Boot 的开发便利性巧妙地了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均载、断路器、数据监控等,都可以用 Spring Boot 的开发风格做到一键启动和部署。Spring 并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过 Spring Boot 风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者流出了一套简单易懂。已部.

2021-09-06 10:23:52 52

原创 架构设计(四)之OAuth2

1.OAuth2OAuth 2.0(/'əu 'ɔːθ/)是一个用于授权的行业标准协议,它是一种协议,而不是指具体的框架。2.为什么需要 OAuth2?用户密码不行吗?微信管理了上亿用户,别的公司如果需要通过微信来登录应用,就需要获取微信用户的信息,腾讯不可能把微信内部系统用户名和密码告诉第三方,更不可能把数据库提供出去。所以,不管是用户密码,还是使用key,都不太好管理,安全性都不高,这个时候需要通过 OAuth2 协议进行资源授权,通过 OAuth2 进行统一管理,颁发,吊销令牌。3.OAut

2021-09-03 10:35:20 226

原创 架构设计(三)之微服务

1.微服务微服务是一种架构模式或者说是一种架构风格,它是提倡单一应用程序划分成一组小的服务,每个服务运行在其独立的自己的环境中,可以单独构建和部署,服务之间互相协调,互相配合,各项服务在工作(和出现故障)时不会相互影响,服务之间采用轻量级的通信机制互相沟通,通常是基于 Http 的 RESTful API 。2.微服务架构的优势可扩展性在增加业务功能时,单一应用架构需要在原先架构的代码基础上做比较大的调整,而微服务架构只是要增加新的微服务节点,并调整与之有关联的微服务节点即可。在增加业务响应能力时

2021-09-02 17:24:13 122

原创 架构设计(二)之读写分离

1.读写分离在 MySQL 主从同步架构中,传统的只有“主”数据库才提供读写操作服务,“从”数据库只作为备用。

2021-09-02 10:51:29 251

原创 架构设计(二)之分库分表

1.分库分表特点优点:提升查询的效率方便了表的扩展缺点:分表以什么切分如果弄的不好,导致多次查询,而且有时候要跨库操作,甚至导致join无法使用,对排序分组等有性能影响之前的原子操作被拆分成多个操作,事务处理变得复杂多个DB维护成本增加2.分库分表常用的工具MyCatTDDLsharding-spherehttps://www.cnblogs.com/tellerfuliye/articles/13292076.html3.MySQL达到什么量需要分库分表单表行数超过

2021-09-01 10:54:30 200

原创 架构设计(一)

1.前后端分离前后端分离是指将一个web 系统的动态内容和静态内容进行分离,包括其开发、部署等。比如传统的 MVC 架构,HTML、JS、CSS… 等前端代码和 Java、spring、mybatis… 等后端代码是在同一个项目中进行开发、部署的。那前后端分离后,就可以分多个项目进行开发、部署、多个前端、多个后端,通过 http restful api 接口的形式进行交互。前后端分离的好处:前端和后端互不影响,实现高内聚低耦合,提升工作效率。静态资源不占用后端资源,可维护性,扩展性更好。静态资

2021-08-31 11:13:17 978

原创 代码管理工具-Git

1. Git 与 SVN 的区别最大的区别:Git是分布式的,不需要服务器统一管理,而SVN是集成中式的,需要服务器统 一管理;分支管理不同,Git有很强大的分支管理功能,而SVN中的分支就是另外一个包含完整代码的目录;Git内容是按元数据的方式进行存储,而SVN是按文件存储,所有内容都是按文件形式存储在 .svn这个隐藏文件夹中;Git没有SVN中全局版本号的概念;2. Git 和 GitHub 以及 Gitlab 的区别Git 是一个开源的分布式版本控制工具。GitHub 和 Git

2021-08-30 14:20:30 289

文件的压缩和解压的工具类

使用Java实现文件的压缩和解压的工具类,包括zip、tar、tar.gz、gz、rar等结尾的工具类

2023-02-17

java实现sftp的上传下载

sftp是Secure FileTransferProtocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的加密方法。sftp与 ftp有着几乎一样的语法和功能。SFTP为 SSH的一部分,是一种传输档案至Blogger伺服器的安全方式。其实在SSH软件包中,已经包含了一个叫作SFTP(Secure File TransferProtocol)的安全文件传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP。

2023-02-17

java实现的上传大文件以及压缩包,并且支持断点续传-上传大文件.zip

java实现的上传大文件以及压缩包,并且支持断点续传

2021-08-19

空空如也

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

TA关注的人

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