自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 问答 (1)
  • 收藏
  • 关注

原创 spring-data-elasticsearch使用笔记

二、手动put es mapping(类似于建表,定义表结构)ES自带有自动建表的功能,那为什么还要手动put?因为字段的类型可能不会合你意,比如时间格式只有yyyy-MM-dd’T’HH:mm:ss,但实际上还可能需要yyyy-MM-dd方法定义类似JPA(虽然我也没用过JPA,大概意思就是按照一定规范定义犯法,框架就自动帮你实现,比如findByName)这个不太好用,因为用这个就不知道怎么分页,怎么排序了。我的需求是把mysql的数据转移到ES,功能不变。所以需要把Mybatis-plus的

2022-06-06 10:02:18 568

原创 多线程基础-synchronized

文章目录一、使用方法二、名词解释1.管程(monitor)2.临界区(cirtical section)三、锁升级概念1.偏向锁(只做标记,把自己的线程id放到markword中)2.轻量级锁(自旋锁)。每个线程在自己线程栈中生成一个LR(Lock Record,锁记录),然后把LR贴到markword中,cas贴上去的标识抢到锁,其他线程继续CAS。3.重量级锁(OS,markword中记录的是objectMonitor)四、用户态和内核态五、和Lock的区别六、乐观锁与悲观锁一、使用方法synchr

2022-05-24 21:09:15 306

原创 多线程基础-volatile的作用

一、保证可见性多线程基础-并发编程3大特性-可见性二、禁止指令重排序多线程基础-并发编程3大特性-有序性

2022-05-24 20:40:43 163

原创 多线程基础-并发编程3大特性-原子性

一、先看一个程序public class T1 { static int p=0; public static void main(String[] args) throws InterruptedException { CountDownLatch count = new CountDownLatch(3); for(int i=0; i<3; i++) { Thread t = new Thread(()->{

2022-05-24 20:35:16 140

原创 多线程基础-并发编程3大特性-有序性

文章目录一、先看一个程序二、指令重排序三、示例代码四、出现有序性问题时如何解决一、先看一个程序public static void main(String[] args) { Object o = new Object();}看他的字节码0 new #2 <java/lang/Object>3 dup // 先忽略4 invokespecial #1 <java/lang/Object.<init> : ()V>7 astore_18 retu

2022-05-24 10:58:43 260

原创 多线程基础-并发编程3大特性-可见性

文章目录一、先看一个程序二、问题产生的原因三、解决的办法四、volatile原理五、三级缓存六、缓存行概念一、先看一个程序public class VisibilityDemo { static boolean check = false; public static void main(String[] args) throws InterruptedException { new Thread(()->{ while(!check) {

2022-05-24 09:50:21 96

原创 多线程基础-如何结束一个线程

文章目录一、stop() --不推荐二、suspend() 和 resume() --不推荐三、interrupt() --推荐四、volatile变量控制 --推荐一、stop() --不推荐示例代码:public static void main(String[] args) throws InterruptedException { Thread thread = new Thread(() -> { while (true) {

2022-05-23 23:33:24 436

原创 多线程基础-关于打断方法

文章目录一、打断的三个方法二、代码示例三、什么方法被打断会抛出InterruptedException四、能否打断BLOCK状态五、能否打断Lock.lock()一、打断的三个方法boolean isInterrupted();获取线程是否被打断void interrupt();打断线程static boolean interrupted();获取线程是否被打断,如果被打断,复位。二、代码示例1.3个方法使用示例:public static void main(S

2022-05-23 23:14:59 589

原创 多线程基础-线程状态

一、线程状态一、线程状态1.NEW2.RUNNABLE(READY/RUNNING)3.WAITING4.TIMED WAITING5.BLOCKED6.TERMINATED关系图:二、代码演示状态public class StateDemo { public static void main(String[] args) { Thread t1 = new Thread(() -> { while(true) { .

2022-05-23 22:47:31 137

原创 多线程基础-创建线程的5种方法

一.继承Thread类二.实现runnable接口三.lambda表达式四.线程池五.callable与future1.线程池启动2.用Thread包装启动一.继承Thread类public class ThreadDemo extends Thread{ @Override public void run() { System.out.println("启用多线程。。。"); } public static void main(St.

2022-05-23 21:32:46 201

原创 多线程基础-why为什么使用多线程,what什么是线程,通俗回答

一、为什么使用多线程?二、什么是线程?什么是程序?什么是进程?什么是线程?什么是纤程?三、多线程相关问题什么是线程的切换单核CPU设定多线程是否有意义线程是不是越大越好那么线程数设多少最合适一、为什么使用多线程?生活中的场景:cpu比作理发师,顾客比作线程。理发师在对顾客A烫发,染发时需要等待一定时间(比如染发需要等10分钟燃料着色),这些空余时间可以对顾客B也进行烫发和染发操作。使用多线程意义就是对CPU资源的压榨,使cpu利用率更高(理发师:!@#&¥)二、什么是线程?什么.

2022-05-23 17:13:36 319

原创 mysql调优-服务器参数篇

一、文件配置二、字符集三、连接四、日志五、缓存六、INNODB相关一、文件配置datadir=/var/lib/mysql --数据文件目录socket=/var/lib/mysql/mysql.sock --mysql.socket表示server和client在同一台服务器,并且使用localhost进行连接,就会使用socket进行连接pid_file=/var/lib/mysql/mysql.pid --存储mysql的pidport=3306 --端口号default_storag.

2022-05-17 10:12:04 156

原创 mysql调优-架构篇

一、分区表1.分区表的使用场景2.分区表的限制3.分区表的原理4.分区表的类型5.在使用分区表的时候需要注意的问题二、分库分表一、分区表1.分区表的使用场景表非常大以至于无法全部都放在内存中,或者只在表的最后部分有热点数据,其他均是历史数据分区表的数据更容易维护(根据逻辑分区,批量删除大量数据可以使用清除整个分区的方式,也可以对一个独立分区进行优化、检查、修复等操作)分区表的数据可以分布在不同的物理设备上,从而高效地利用多个硬件设备可以使用分区表来避免某些特殊的瓶颈(比如锁和IO速度)可以.

2022-05-17 09:54:13 359

原创 mysql调优-sql篇

一、执行计划idselect_typetabletypepossible_keyskeykey_lenrefrowsextra二、sql优化避免不必要的查询count()的优化关联查询的优化优化子查询优化limit分页优化union查询使用自定义变量一、执行计划语法:sql前加explain,如explainexplain select * from employees各字段的含义:idselect查询的序列号,如果id相同,从上往下执行,如果id不同,从下往上执行。如1,1,2,.

2022-05-17 09:29:09 212

原创 mysql调优-设计篇

一、数据类型设计1.整形2.字符和字符串类型3.时间类型4.枚举代替字符串5.数值类型代替字符串类型二、范式的选择三、主键的选择四、字符集的选择五、存储引擎的选择六、适当的拆分七、索引1.索引的优点2.索引的用处3.索引的分类4.索引的原理原理图:索引进化流程(从上往下进化)5.面试高频名词回表覆盖索引最左匹配索引下推页分裂与页合并6.索引匹配方式7.索引使用的注意事项一、数据类型设计原则:1.更小通常更好,如能用tinyint就不用int2.避免使用null,如账号密码字段设置非空3.简单就好.

2022-05-16 03:23:32 699

原创 mysql调优-监控篇

一、profile相关命令1.问题:一句sql执行到底花了多少时间?获取更精确的时间二、performance_schema0、performance_schema的介绍1、performance schema入门2、performance_schema表的分类3、performance_schema的简单配置与使用4、常用配置项的参数说明5、重要配置表的相关说明6、performance_schema实践操作一、profile相关命令1.问题:一句sql执行到底花了多少时间?#打开profile.

2022-05-14 19:06:39 330

原创 mysql调优-目录篇

mysql调优分为5个维度一、监控层面-有多慢?-哪里慢?如:一条sql执行了多少秒,慢在哪里(cpu消耗时间,还是IO消耗时间)二、设计层面-数据类型?-索引?-执行计划?如:好的数据类型能让储存量更小,速度更快。索引能让数据过滤更高效。三、sql层面(重点)-缓存优化?-关联查询优化?-各种关键字优化?(count,union,limit,子查询)-自定义变量?如:同一个sql逻辑,结果集一样,但不同的写法会让查询效率更高(是否走索引,是否全表查询,查询行数更低)四、架构

2022-05-14 16:38:10 207

原创 redis学习笔记(十七)redis+springboot API使用

一、API介绍API是使用spring data redis可以选择拿同步连接和异步连接可以选择优先从从库里读数据redisTemplate是高级APIjedisConnection是低级API高级API依赖于低级API二、maven<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis

2022-05-02 15:50:49 539

原创 redis学习笔记(十六)分布式锁

一、简介:Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务。Redisson提供了使用Redis的最简单和最便捷的方法。Redisson的宗旨是促进使用者对Redis的关注分离(Separation of Concern),从而让使用者能够将精力更集中地放在处理业务逻辑上。二、基本使用语法:1、获取锁RLock lock = redisson.getLock(“an

2022-05-02 15:44:51 5809

原创 redis学习笔记(十五)redis问题及解决方案:击穿、穿透、雪崩

一、击穿问题描述:KEY的过期造成并发访问数据库问题前置条件:肯定发生了高并发解决方案:添加分布式锁(如setNX),只有获得锁的才去访问数据库解决方案又会引发什么问题?1.如果第一个人挂了?(变死锁了)可以设置锁的过期时间2.没挂,但是锁超时了,结果锁被别人抢了?多线程,一个线程取DB,一个线程监控并刷新锁二、穿透问题描述:从物业接收查询的是你系统不存在的数据解决方案:布隆过滤器布隆过滤器的3种实现:client自己实现client算法+redis的bimapredis继承

2022-05-02 15:31:09 500

原创 redis学习笔记(十四)redis代理及实操

一、redis代理升级模型一般实际用第二种就行,第三种考虑到代理高可用的问题。二、proxy主流技术twemproxypredixycluster(redis自带的)codis三、cluster1.预分区模型z轴问题并非只能从client端解决,也可以从代理层解决如图,预分区的意思是总量数据区分为10份,如果原来只有2个客户端则一人分5份。如果拓展了新的客户端,2个客户端各取2份到新的客户端即可。2.redis cluster模型3.相关问题1.数据是分治了,事务如何解决?

2022-05-02 15:25:23 1857

原创 redis学习笔记(十三)z轴:sharding分片

一、sharding分片模型升级图z轴解决数据膨胀问题,拓展性也比较好二、Ketama一致性算法原理如图所示,hash环是一个虚拟的环,每个redis在环上都对应一个节点(称为物理点)。set数据时也通过一次hash找到一个节点(虚拟点),然后向后找到最近的一个物理点,set到这个物理点上。三、hash环新增节点时的问题hash环新增节点时优点:是可以分担其他节点压力,也不会造成全局洗牌缺点:会造成一小部分数据不能命中解决方案:hash后取2个物理节点旧数据可以通过LRU和LFU淘

2022-05-02 15:06:28 480

原创 redis学习笔记(十二)x轴:主从复制及哨兵实战

一、主从复制1.先起3个redis实例,端口分别是6389、6380、6381cd /root/soft/redis-6.2.6/utils./install_server.shservice redis 6381 stopcp /etc/redis/* ./vi 6379.confappendonly nodeamonize novi 6380vi 6381同样操作cd /var/lib/redis/rm -rf ./*mkdir 6379mkdir 6380mkdir 6

2022-05-02 14:44:23 341

原创 redis学习笔记(十一)AKF、CAP理论

一、AKF原则1.redis单节点有什么问题?(1) 单点故障(2) 容量有限(3) 压力大2.什么是AKF原则?AKF网上查不到是什么的缩写。。说穿了,就是从3个维度解决单以上3个问题(不止redis,所有分布式系统都遵循)。x轴:全量,镜像一般用主从、主备来解决。主备解决单点故障问题,读写分离解决读压力问题y轴:业务,功能多个不同实例解决如redis实例1储存用户相关的数据redis实例2储存订单相关的数据解决容量有限和压力大的问题z轴:再拆分,可用优先级或逻辑拆分如r

2022-05-02 14:25:33 832

原创 redis学习笔记(十)AOF

全称:Append Only File一、AOF原理AOF的原理就是以日志的形式记录所有命令。那么恢复时只需要重新执行所有命令即可。二、与RDB对比写入速度恢复速度是否丢失数据数据量AOF快,即时写入慢,日志会很大很少丢失数据无限变大RDB慢,全量写入快因为时点性原因,如果宕机会丢失最近的数据基本跟即时数据容量差不多三、redis恢复方案问题:如果只用RDB恢复,那会丢失最近的数据。只用AOF恢复,会很慢。怎么恢复才是最好的?解决方案:re

2022-04-27 15:40:13 99

原创 redis学习笔记(九)RDB

全称:Redis DB的简称一、原理RDB是一种持久化技术,可以把redis现有的缓存数据持久化成一个文件。问题:时点性问题:持久化肯定不是一瞬间完成的,数据量大的话持久几十分钟都很正常。那么问题来了,比如8点开始RDB,8点30分完成,那么这个RDB的文件到底是8点的,还是8点30分的?回答:分两种情况:1.即是8点也是8点30,因为这30分钟阻塞了,不再对外提供服务(调用save就是这样,很少用这种方式)2.是8点的(bqsave,异步储存)。原理是创建一个调用内核API:fork()

2022-04-27 10:52:06 1183

原创 redis学习笔记(八)布隆过滤器

一、为什么要使用布隆过滤器?问题场景:如果你有张user表,id以自增方式储存,有个接口可以get(id)获取用户信息。这时有个黑客想搞崩你的网站,不停的调用get(-1),get(-2)之类的不存在的id,导致你缓存命中不了用户缓存数据,穿透到数据库承受不住这个并发量。你如何解决这个问题?(这个问题也叫缓存穿透)思考:1.负数直接返回,是一种解决方案,但无法解决传正数但也不存在的大id。而且写死规则也不是一种好的方案。2.如果从数据库中查到不存在,也缓存在redis中,但这样就会占用大量的red

2022-04-27 00:16:43 968

原创 redis学习笔记(七)管道、事务、发布订阅

一、管道1.管道的意义?啤酒瓶理论:怎么喝啤酒最舒服?是去超市买一瓶,喝一瓶,再去超市买一瓶。还是去超市买一箱回来慢慢喝?答案一般是后者,这就是管道的意义:减少通信成本,只需要TCP握手一次,就能执行多条命令。2.实际命令(yum install nc) nc localhost 6379 //连接redis,建立socket连接 echo -e “setk2 99\nincre k2\n get k2” | nc localhost 6379 // 连接6379,并发送3条命令,分别是

2022-04-26 23:36:30 531

原创 redis学习笔记(六)淘汰机制

一、redis作为缓存和数据库的区别1.缓存数据不"重要",不是全量数据,缓存应该随着访问变化,存的都是热数据2.redis里的数据应该能随着业务变化,只保留热数据,因为内存大小是有限的,也就是瓶颈3.删除优先级:业务逻辑->key的有效期 业务运转->随着访问变化,淘汰调冷数据因此能业务删除最好不用淘汰机制二、redis的淘汰算法不配置淘汰策略时,内存满了后再访问时返回错误redis淘汰策略分两个维度:所有键/有过期时间的键+淘汰策略(lru、lfu、random、ttl)所

2022-04-26 22:08:56 1103

原创 redis学习笔记(五)encoding模型和原理

一、总体图二、为什么要区分encoding?encoding实际上就是redis的内部实现,比如list,到底是LinkedList还是ArrayList?encoding就表示LinkedList和ArrayList。encoding存在key中,有2个好处:1.执行命令时,比如对一个list类型的key执行了incrby,则立刻返回错误,不需要去到value中效验value是否是int类型。2.节省内存,理论上所有string类型都可以用raw储存,但比较小的string(小于44字节)用e

2022-04-26 15:35:24 1345

原创 redis学习笔记(四)redis基本使用(基本命令)

一、基本命令1.redis-cli -p {port} -n {1-16} // 连接端口和指定库例子:redis-cli -p 6379 -n 12.exit // 退出redis客户端3.help 、 help @string 查看帮助文档4.select 8 //换库5.keys * // 获取所有的键6.FLUSHDB //清空库中数据二、string的命令1.help @string 查看string的帮助文档2.set {key} {value} {过期时间,秒为单位} {N

2022-04-26 00:17:04 756

原创 redis学习笔记(三)NIO模型

redis使用epoll模型一、模型演进过程:1.BIO模型一个线程处理一个文件描述符,调用read是同步阻塞的2.NIO模型与BIO的区别:只需要一个线程轮训,调用read是异步的,可以立刻返回ture和false3.多路复用(select)模型与NIO的区别:可以一次传入n(最多为1024个)个文件描述符到内核,然后内核告诉客户端哪些文件描述符可用4.多路复用(epoll)模型与多路复用(select)模型的区别:用户态与内核态有一个共享空间,拷贝数据时可以少一次内核态到用

2022-04-25 16:43:16 385

原创 redis学习笔记(一)了解redis

一:为什么要用redis?1.先看硬盘和内存的对比磁盘内存寻址速度ms级别ns级别带宽100M/s以上10GB/s以上I/0 buffer成本扇区512byte,索引4K。就是无论读多少,最少4K据说是512B由图可见,内存寻址速度和带宽远超硬盘。2.mysql是关系型数据库,redis是nosql3.也有内存级别的关系型数据库:HANA,但是太贵了。redis是一种折中方案,既不会太贵,也不会太慢(硬盘瓶颈)4.数据在硬盘和内存的体积不一样,因为数据再硬盘中无论多小都至少占

2022-04-25 14:59:36 357

原创 redis学习笔记(二)安装redis

redis学习笔记

2022-04-25 14:49:11 871

空空如也

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

TA关注的人

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