- 博客(50)
- 收藏
- 关注
原创 Linux安装redis、配置及卸载
一、安装1、我们通过在官网下载tar.gz的安装包,或通过wget的方式下载[root@centos101 opt]# wget http://download.redis.io/releases/redis-4.0.1.tar.gz--2017-09-03 09:51:27-- http://download.redis.io/releases/redis-4.0.1.tar.gz正在...
2019-09-22 11:07:28 901
原创 redis内存打满了怎么办?
使用的时候,对 key设置过期时间,这样它不会永久占用内存。如果使用大量的key的话,记得设置过期时间要随机一点,避免缓存雪崩。我们需要给 Redis设置maxmemory的大小,如果不设置的话,它会受限于系统的物理内存和系统对内存的管理机制。内存的淘汰策略分为 8 种,从淘汰范围来说分为从所有的key中淘汰和从设置过期时间的key中淘汰。
2024-10-27 16:13:52 262
原创 mybatis/mybatis-plus报错Invalid bound statement (not found): com.coco.mapper.EduCourseMapper.getPublis
1、把xml文件复制到target目录中,这种可以但是不可以取。2)、application.yml中加配置(路径写自己的)这个错误的原因是maven默认加载机制造成的。2、把xml文件放到resources目录中。3、通过配置实现(推荐使用)1)、pom.xml加配置。
2024-08-06 10:41:10 212
原创 通过Lua脚本手写redis分布式锁
setnx可以实现分布式锁,但是无法实现可重入锁,所以用hset来代替setnx实现可重入的分布式锁。此功能实现采用 Lua脚本实现,Lua脚本可以保证原子性。
2024-07-25 11:13:23 393
原创 Java中 AQS面试题
AQS 是通过一个int类型的变量state来控制同步状态的。AQS 既可以实现共享锁,也可以实现互斥锁,state根据锁的类型的不同表示的含义不同。以互斥锁为例,多个线程 通过竞争 state变量的值来判断锁的状态,并通过 CAS 操作来保证同步状态 state 变更的原子性。获取同步状态失败的线程会存储到一个双向链表中进行等待,并通过park()方法来阻塞自己,从而释放 CPU 的资源。AQS 通过这 2 种机制来完成一个抽象的队列同步器,实现多线程之间同步访问。
2024-06-13 15:08:42 327
原创 初识 AQS
AQS是一个用来构建锁和同步器的框架。JUC 的同步器底层都是用了 AQS,例如ReentrantLock,Semaphore,CountDownLatch,CyclicBarrier,ReentrantReadWriteLock。
2024-06-12 18:20:01 841
原创 JUC之LockSupport
LockSupport类使用了Permit(许可)的概念来阻塞和唤醒线程的。每个线程都有一个许可。wait和notify方法,必须要在同步块或者方法里面,且成对出现使用,先wait后notify。唤醒和阻塞没有顺序,LockSupport一样支持,因为它是通过许可来进行阻塞和唤醒的。Condition中的线程等待和唤醒方法,需要先获取锁,且先await后signal。LockSupport是通过park()和unpark()实现线程等待唤醒。调用unpark()时:有许可,唤醒被阻塞的线程。
2024-06-12 09:21:27 173
原创 聊一聊ThreadLocal
这样ThreadLocalMap中会出现 key为null的Entry,就没有办法访问到key为null的Entry的 value,当前线程不结束的话,这些key为null的Entry的 value就会一直存在一条强引用链:ThreadRef —> Thread —> ThreadLocalMap—>Entry—>value永远不会被回收,造成内存泄露。顾名思义,形同虚设,如果一个对象仅持有虚引用,那么它就和没有引用一样,任何时候都可被垃圾回收。对于弱引用对象来说,只要垃圾回收,弱引用对象就会被回收。
2024-06-11 13:24:56 924
原创 CAS 的 ABA 问题-AtomicStampedReference
CAS 出现 ABA 问题,就是在多线程的场景下,一个线程把值由 A 改成 B,再由 B 改成 A,其他线程读取该变量的时候依然是 A,无感知该变量的修改,这里引入AtomicStampedReference通过版本号来解决这个问题。单线程下AtomicStampedReference通过版本号来解决 ABA 问题。
2024-06-11 10:57:51 168
原创 自定义CAS自旋锁
A 线程先抢占资源,B 线程只能自旋着,等 A 线程释放锁后,B 线程才获取锁,然后释放锁。利用AtomicReference实现自定义自旋锁。
2024-06-10 20:42:34 147
原创 初识 CAS理论
6、CAS 并发原语体现在 Java 的Unsafe的各个方法,调用Unsafe的各个方法,JVM 会帮我们实现CAS汇编指令,这完全依赖于硬件来实现原子操作,由于 CAS 是一种系统原语,是由若干条指令组成,用于完成某个功能的一个过程,原语执行是连续的,不允许中断,CAS 是一条 CPU 原子指令,不会造成数据的不一致问题。4、Java 中的 CAS 操作依赖于Unsafe方法,Unsafe类中所有的方法都是native修饰的,Unsafe的方法直接调用操作系统底层资源。
2024-06-10 20:23:39 511
原创 CountDownLatch闭锁
说明:当前有 5 个线程做运算处理,主线程要计算这 5 个子线程执行所消耗的时长。那么CountDownLatch在主线程中一直等待这这 5 个线程执行完后,才执行主线程。每个子线程执行完后执行latch.countDown();也就是线程-1 的操作,直到线程数为 0 的时候,主线程才会执行,主线程执行latch.await();CountDownLatch类是一个同步工具类,在完成某些运算时,只有其他所有的运算全部完成,当前运算才继续执行。
2024-06-10 11:18:54 563
原创 Java文件断点续传
断点续传实现思路:将大文件均分成几块后,每个线程分别处理一块数据的读取和写入。每次写入都要更新记录的日志文件,断网或暂定后重新开始传输时,根据日志文件的信息,可以接着读取写入数据,不用重头开始传输。
2023-03-04 14:52:14 2992 1
原创 idea springboot devtools热部署设置
idea springboot devtools热部署设置首先说明下,就是感觉优点慢,但是好使。因为以前在工程中加热部署maven坐标,不起作用,今天找到答案了,需要进行设置,设置如下。1、在父工程的pom文件中添加如下代码<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spri
2021-01-10 10:39:22 138
原创 mybatis-plus自动生成器
1、引入maven坐标依赖<dependencies> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>2.2</version> </dependency> &l
2020-11-17 19:26:33 276 2
原创 springmvc流程
springmvc的具体流程如下:1、客户端请求发给前端控制器DispacherServlet2、DispacherServlet接到请求调用处理器映射器HandlerMapping3、处理器映射器根据注解或配置文件找到具体的处理器,生成处理器对象及处理器拦截器一并返给DispacherServlet4、DispacherServlet调用HandlerAdapter处理器适配器5、Handler Adapter经过试配调用具体的Handler处理器(Controller后端控制器)6、后端控制
2020-11-09 14:03:08 125
原创 docker搭建rabbitmq集群---镜像集群模式
前提在centos7中已经装好了docker环境。1、先创建文件夹做准备$ mkdir /mydata/rabbitmq$ cd /mydata/rabbitmq/$ mkdir rabbitmq01 rabbitmq02 rabbitmq032、利用docker命令创建3个rabbitmq实例并启动$ docker run -d --hostname rabbitmq01 --name rabbitmq01 -v /mydata/rabbitmq/rabbitmq01:/var/lib/ra
2020-11-05 21:29:37 271
原创 FATAL: kernel too old CentOS 6.8升级内核
CentOS 6.8升级内核本人是在docker运行容器的时候失败的,需要升级内核的1、查看宿主机的内核版本信息uname -r2、更新nss(网络安全服务)yum -y update nss3、升级内核需要elrepo的yum源,所有安装其源时,先导入elrepo的key rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org rpm -Uvh http://www.elrepo.org/elrepo-release
2020-10-29 18:02:40 524
原创 centos6.8环境配置docker阿里云镜像加速器
第一步:获取阿里云加速器地址第二步:配置本机Docker运行镜像加速器vi /etc/sysconfig/docker修改配置文件other-args="--registry-mirror=https://0o*****2.mirror.aliyuncs.com"第三步:重启dockerservice docker restart...
2020-10-29 16:12:24 140
原创 centos6.8安装docker
centos6.8也可以安装docker的,步骤如下:1、查看系统版本[root@bigdata103 ~]# uname -aLinux bigdata103 2.6.32-642.el6.x86_64 #1 SMP Tue May 10 17:27:01 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux[root@bigdata103 ~]# cat /etc/redhat-releaseCentOS release 6.8 (Final)[root@bigda
2020-10-29 15:24:07 389
原创 通过lambda实现菜单树形结构
public List listWithTree() {//1、查出所有分类List list = baseMapper.selectList(null);//2、组装树形结构List level1Menus = list.stream().filter(t -> t.getParentCid() == 0).map((menu) -> {menu.setChildren(this.getChildren(menu,list));return menu;}).sorted((
2020-10-28 15:51:03 1763 2
原创 MySQL触发器
触发器作用:是一种特殊的存储过程。当当前表的数据发生改变的时候,会触发某个表的某数据也发生改变。有一种数据同步的样子。咱们拿案例说话吧:下面是一个测试表,想要做的是当某个库的这个表的数据发生变化,那么另一个库的这个表的数据也会改变。(前提是在同一个数据库服务器上的2个数据库实例的表)CREATE TABLE `cc_command_url`( `id` VARCHAR(36) NOT NULL COMMENT '主键 ', `title` VARCHAR(200) NULL COMMENT '
2020-08-18 15:56:54 121
原创 Java8 lambda list转map
1、list转Map<String,String>public Map<String, String> getIdNameMap(List<Account> accounts) { return accounts.parallelStream().collect(Collectors.toMap(Account::getUserId, Account::getUsername));}2、list转Map<String,Account>publ
2020-08-11 14:52:46 216
原创 Java8 stream一些用法
1、map、reduce的用法 List<TestsObject> list = new ArrayList<TestsObject>(); TestsObject object1 = new TestsObject(1,"tom","beijing",12,20.8); list.add(object1); TestsObject object2 = new TestsObject(2,"jack","shanghai",15,21.8); list.add(o
2020-07-02 15:14:51 126
原创 Java8 Lambda list去重及排序
1、list根据对象中某元素去重根据集合中对象中的ID属性去重<T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) { Map<Object,Boolean> seen = new ConcurrentHashMap<>(); return t -> seen.putIfAbsent(keyExtractor.apply(t)
2020-06-22 09:24:14 980
翻译 logstash原理和使用
1、概述1.1 logstash简介logstash是一个数据分析软件,主要目的是分析log日志。整一套软件可以当作一个MVC模型,logstash是controller层,Elasticsearch是一个model层,kibana是view层。首先将数据传给logstash,它将数据进行过滤和格式化(转成JSON格式),然后传给Elasticsearch进行存储、建搜索的索引,kibana提供前端的页面再进行搜索和图表可视化,它是调用Elasticsearch的接口返回的数据进行可视化。logstas
2020-05-29 10:30:38 1402
原创 springboot整合freemarker导出Word
1、首先引入maven坐标<!--引入freemarker 模板依赖--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId></dependency>2、接口代码 @PostMapping(path = "/exportTot
2020-05-19 15:11:40 735
原创 poi读word内的表格内容案例
poi读word内的表格内容案例代码如下:import org.apache.poi.xwpf.usermodel.*;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;import java.util.ArrayList;import java.util.List;/**...
2020-02-21 20:36:39 555
原创 Linux下Nginx负载均衡多个tomcat配置
Linux下安装nginx和安装多个tomcat的方法Linux系统,jdk1.8已安装好一、Linux下nginx的安装与配置1、安装gcc安装redis需要先将官方下载的源码进行编译,编译依赖gcc环境,若没有gcc环境,需要安装。查看版本gcc -v未安装,执行安装gcc命令。yum -y install gcc2、pcre、pcre-devel安装yum install...
2020-02-17 21:34:38 343
原创 mongodb安装配置
mongodb1、下载wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.4.4.tgz2、解压tar包3、在/usr/local/software/mongodb-linux-x86_64-4.0.7/下创建datas和logs文件夹,并且在logs文件夹内创建mongodb.log文件4、配置mongodb环境...
2020-02-09 22:58:44 163
原创 事务的四大特性、隔离级别、七大传播特性
事务的四大特性ACID(1)原子性(Atomicity):事务的最小单位,且不可分割。事务的原子性确保执行要么全部成功,要么全部失败。(2)一致性(Consistency):使数据库从一个一致性状态到另一个一致性状态。(3)隔离性(Isolation):并发访问数据库时,一个用户的事务不被其他事务所干扰。(4)持久性(Durability):一个事务提交后,它对数据库的改变是持久的。事务...
2020-02-08 23:10:20 1494 2
原创 CAP定理和BASE理论
CAP定理和BASE理论一、CAP定理1、Consistence(一致性):分布式系统数据的备份,多副本之间数据保持一致。2、Availability(可用性):集群一部分出现故障后,集群整体还能响应客户端的请求。3、Network partitioning(分区容错性):分区相当于对通信的时限要求。系统若不能在有效时限内达成数据一致性,就意味着发生了分区,必须在C、A之间做出选择。CA...
2020-01-06 14:43:25 122
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人