- 博客(38)
- 资源 (1)
- 收藏
- 关注
原创 Redis支撑秒杀场景应用
秒杀是一个非常典型的常见,比如像双11,618这样的网络购物节,一些平台会提供限时限量的是商品,而且这些商品也是物美价廉,吸引大量的用户,redis经常用于这种秒杀场景我们先来谈谈秒杀场景的特点对支持系统的要求秒杀场景的特点及redis对秒杀场景的支持瞬时并发访问量非常高秒杀最明显的特哥特点就是瞬时访问量巨大,对于数据来说,所能够支撑的访问量也就是每秒千级别,而redis本身的特点就是高性能的读写,可以处理每秒万级别的请求,甚至更高。所以我们可以使用redis拦截绝大部分的请求,这样数据库的压
2021-02-03 15:49:42 692 1
原创 缓存数据库同步策略
在我们的项目中,修改数据后,考虑缓存数据更新的及时性,我们可能会采用主动更新缓存的策略。主要有如下几种策略:先更新缓存,再更新数据库 先更新数据库,再更新缓存 先删除缓存,再更新数据库,访问时按需加载数据到缓存中 先更新数据库,再删除缓存,访问时按需加载数据到缓存中上面4中策略我们应该怎么选择呢?已下我们就逐一分析这4中策略:“先更新缓存,再更新数据库” 策略不可行。数据库设计负责,压力集中,数据库因为超时等原因,操作失败的可能性会很大。此外还会涉及到事务,很有可能因为数据库更新失败,导致缓
2020-05-19 15:02:50 1149 1
原创 datafaker(大批量生成测试数据)windows安装教程
当我们开发完成后,可能需要进行压测,压测就需要大量的数据,一般我们采用的方法可能是使用存储过程。但是使用存储过程,就会带来很多不方便的地方,你自己写过就会知道有多不方便。今天介绍的datafaker就让我们轻轻松松创建大批量的测试数据。下面给出github地址:https://github.com/gangly/datafakerdatafaker使用需要安装python和...
2019-12-24 19:46:57 2915 1
转载 git rebase
gti rebase命令做了什么?1:先将test分支的代码checkout出来,作为工作目录2:然后将master分支从test分支创建起的的所有改变的补丁,依次打上。如果打补丁的过程没有遇到问题,rebase就成功了3:如果在打补丁的过程中出现了冲突。冲突处理好之后,运行git rebase -continue继续直到完成4:如果不想处理,可以有两种选择。一:直接放弃rebas...
2019-09-19 16:18:09 226
原创 使用zookeeper实现分布式队列设计思路
设计:使用路径为/queue的znode下的节点表示队列中的元素。/queue下的节点都是顺序持久化的znode。这些znode的名字后缀数字表示了对应队列元素在队列中的位置。znode名字后缀数字越小,对应队列元素在队列中的位置越靠前。如下图所示:介绍队列操作中的各个方法:offer方法向队列中添加一个元素offer方法在/queue下面创建一个顺序znode。因为z...
2019-09-11 23:29:40 341
原创 使用zookeeper实现分布式锁思路
设计:使用临时顺序znode来表示获取锁的请求,创建最小后缀数字znode的用户成功拿到锁。上图中znode为lock,在lock底下保存锁请求,后缀数字最小的可以获得锁,成为锁的持有者。上图中有三个锁请求,从上到下人呗是后缀数字1-3,因为1是最小的,所以可以成为锁的持有者。避免羊群效应:把锁请求者按照后缀数字进行排队,后缀数字小的锁请求先获取锁。如果所有的锁请求者都watc...
2019-09-10 23:17:16 258
原创 kafka相关术语/名词解释
kafaka主要的功能就是提供一套完备的消息发布与订阅的解决方案。主题(Topic):发布订阅的对象是主题。每个业务,每个消息或者是每类数据都能创建专属的主题。生产者(Producer):向主题发布消息的客户端叫做生产者。生产者程序通常持续不断的向一个或者多个主题发送消息。消费者(Consumer):订阅这些主题的客户端程序叫做消费者。消费者可以同时订阅多个主题的消息。客户端(Cl...
2019-06-15 17:30:48 509
原创 如何通过Redis实现分布式锁
分布式锁分布式锁是控制分布式系统或不同系统之间共同访问共享资源的一种锁的实现分布式锁需要解决的问题如下:互斥性任意时刻只有一个客户端获取锁安全性锁只有持有该锁的客户端删除,不能由其他客户端删除死锁获取锁的客户端因为某些原因而宕机,而未能释放锁,其他客户端再也不能或得到该锁,而导致死锁,此时需要机制来容错容错部分节点,如redis节点宕机的时候,客户端仍然可以获取到锁...
2019-01-21 22:50:27 217
原创 Redis常用数据类型
使用过的redis的数据类型供用户使用的数据类型:String:最基本的数据类型,二进制安全就是我们经常使用的KV键值对,他的值最大可以存储512M。二进制安全:redis的String可以包含任何数据,比如jpg图片,或者是序列化的对象,String支持这么多的数据类型,离不开底层的动态字符串sdshdr Hash:String元素组成的字典,适合存储对象 List:列表,按...
2019-01-17 21:33:22 198
原创 Redis简介
一般为了提升性能,会在存储层和客户端之间添加一个缓存层,当客户端向后端发送请求的时候,会先去缓存层查,看看是否有相应的数据,如果有则直接返回,这样就减轻存储层的压力,如果缓存层没有相关数据,才会去到存储层去查询,这就是我们行业里所说的穿透。如果存储层有数据则会将数据返回给缓存层,以便客户端下次请求同样的数据时,可以直接从缓存层取数据,回写的过程就是回种,回种之后将结果返回给客户端,完成一次请...
2019-01-15 22:05:58 183
原创 锁模块之MyISAM与InooDB关于锁方面的区别
锁模块常见问题:MyISAM与Innodb关于锁方面的却别是什么MyISAM默认使用的是表级锁,不支持行级锁 InnoDBmoren用的是行级锁,也支持表级锁MyISAM引擎在进行查询的时候,会自动为表加上一个读锁,而对数据进行增删改的时候,会为我们操作的表,加上一个表级别的写锁,当读锁没有被释放,另外一个session想要对同一个表加上写锁,他就会被堵塞,知道所有的读锁被释放位置。...
2019-01-08 21:32:30 740 1
原创 联合索引最左匹配原则的成因+索引为什么不是越多越好
联合索引多列组成的索引最左匹配原则假设我们有两列a,b,a和b是联合索引,他的顺序是a,b,我们在where语句中调用a=? and b=?的时候就会走联合索引,如果调用where a = ?的时候也会走索引,但是当我们使用where b = ?的时候就不会走这个联合索引成因:mysql创建复合索引的规则是首先会对复合索引的最左边,也就是索引中的第一个字段进行排序,在第一个...
2019-01-07 21:49:22 6014 1
原创 如何调优sql
如何定位并优化慢sql根据慢日志定位慢查询sql慢日志就是用来记录我们查询比较慢的sqlshow variables like %quer%;11:slow_query_log off 慢日志关闭2:slow_query_log_file 文件记录慢日志3:long_query_time sql执行多长时间会记录到慢日志文件中show status like '...
2019-01-07 21:23:54 868
原创 密集索引和稀疏索引的区别
区别秘籍索引文件中的每个搜索码值都对应一个索引值 稀疏索引文件只为索引码的某些值建立索引项密集索引的定义:叶子节点保存的不只是键值,还保存了位于同一行记录里的其他列的信息,由于密集索引决定了表的物理排列顺序,一个表只有一个物理排列顺序,所以一个表只能创建一个密集索引稀疏索引:叶子节点仅保存了键位信息以及该行数据的地址,有的稀疏索引只保存了键位信息机器主键mysam存储引擎,不管...
2019-01-03 20:59:43 18900
原创 数据库-优化索引-hash索引 BitMap索引
Hash索引有的数据库存储引擎还支持hash这种数据结构作为其索引,理论上hash索引的索引效率理论上要高于B+树索引 Hash索引的缺点仅仅能满足“=”,“in”,不能使用范围查询由于hash索引比较的是hash运算之后的hash值,所以只能用于等值的过滤,不能用于基于范围的查询,因为经过相应的hash算法处理之后的hash值的大小关系并不能保证与hash运算前的完全一样,比如上图...
2019-01-02 21:57:32 1003
原创 二叉查找树
二叉查找树每个节点最多只有两个子树的树结构,通常子树被称为左子树或者右子树,二叉查找树的重要性质是:对于树中的每个节点x,左子树任意节点的值都小于X ,右子树任意节点的值均大于X。注意:索引的存储块和之前说的数据库最小存储单位块或者页实际上并非一一对应,只是为了方便我们的理解将其一一对应起来。索引的每个存储块存储的是关键字+指向子树的指针,像下图中的树,不仅仅是二叉树还是平衡二叉树。什...
2019-01-02 21:11:36 288
原创 数据库相关知识
关系型数据库主要考点:如何设计一个关系型数据库了解数据库的各个模块:数据库最终的目的就是存储我们的 数据,因此数据库会有一个存储模块,来负责存储我们的数据,存储模块就类似我们的os系统,当数据持久化,存储到磁盘,如存储到机械硬盘说着ssd固态硬盘。有了存储系统之后,我们还有组织,使用这些数据,因此需要程序的实例,用逻辑结构映射出物理结构来,并且在程序中提供获取管理数据的方式,还有必...
2019-01-01 20:21:10 193
原创 socket简介
socket是对tcp/ip协议的抽象,是操作系统对外开放的接口socket和tcp/udp没有必然的联系,socket编程接口再设计的时候,就希望能适应其他的网络协议,所有socket的出现只是使得程序员更容易使用tcp/ip协议栈,是对tcp/ip协议的抽象,从而实现的我们最为常见的函数接口,比如listen,send,read,write。socket是基于打开到读和写,在到关闭的这种模...
2018-12-30 23:49:09 240
原创 HTTP与https的区别
https介绍以计算机网络安全通信为目的传输协议 SSL(Sercurity sockets Layer,安全套接层)为网络通信提供安全及数据完整性的一种安全协议 是操作系统对外的API,SSL3.0后更名为TSL 采用身份验证和数据加密保证网络通信的安全的数据完整性加密的方式对称加密:加密和解密使用相同的秘钥非对称加密:加密使用的秘钥和解密使用的秘钥是不相同的哈...
2018-12-28 22:52:20 322
原创 HTTP简介
超文本传输协议HTTP主要特点他是基于请求与响应模式的无状态的应用层协议支持客户服务器模式简单快速客户端向服务器请求服务的时候,只需要传输请求方,路径和参数灵活http允许传输任意类型的数据对象,传输的数据类型以content-type标记无连接限制每次连接只处理一次请求无状态是指协议对于事务处理没有记忆能力,缺少状态就意味着后续处理需要前面的信息,则必须重传,这...
2018-12-28 21:56:27 241
原创 UDP简介
UDP的报文结构 UDP的特点简单的报文结构,也就意味着UDP不想TCP那样有错误重传,滑动窗口等精细控制面向非连接传输数据之前和终端无建立连接,当想传输数据时,就简单的抓取来自应用程序的数据,并尽可能快的将其扔到网路上,在发送端UDP发送数据的速度仅仅受应用程序生产数据的速度,计算机的能力和传输带宽的限制,在接收端UDP将每个接收段放在队列中,应用程序每次从队列中读取一个消息段...
2018-12-27 22:35:16 300
原创 TCP的滑动窗口
RTT和RTORTT:指发送一个数据包到接受对应的ACK,所花费的时间RTO:重传时间间隔。tcp在发送一个数据包之后,会启动一个定时器,RTO就是这个定时器的重传时间。如果发送一个数据包之后没有收到ACK,并且RTO的时间也到了,就会重新发送一次包。由于RTO是发送当前数据包,所预估的超时时间,那么RTO就需要一个很好的算法来统计,来更好的预测这次超时时间,RTO不是固定写死的配置,而是...
2018-12-27 21:49:02 230
原创 TCP的三次握手
ip协议是无连接的通信协议,他不会占用两个正在通信的计算机通信线路,这样ip就降低了对网络线路的需求,每条线都可以满足计算机不同的通信需要,通过lp其他消息或者数据,会被分割成较小的独立的包,并通过internet在网络之间传送,ip负责将包路由到目的地,但是ip协议没有确认数据包是否按顺序发送,或者包是否被破坏,所以ip数据包不可靠,需要由他的上层协议作出控制传输控制协议tcp(Transm...
2018-12-26 23:21:07 177
原创 OSI开放式互联参考模型
OSI开放式互联参考模型七层协议:第一层:物理层机器,电子,定时接口通信信道上的原始比特流传输。定义的物理设备的标准,如网线的类型,光纤的接口类型,各种传输介质的传输速率,主要作用是传输比特流(我,们所说的010101数据,将他们转换成电流强弱进行传输,到达目的地之后,在转换成010101的机器码,也就是我们所说的数模转换,模数转换),这层的数据叫做比特,网卡就是工作在这一层。第二...
2018-12-24 23:44:49 2068
转载 centos7使用rpm安装jdk8
1:下载rpm包到官网下载rpm包:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html2:安装rpm -ivh jdk-8u131-linux-x64.rpm3:配置环境变量(高数机器jdk在哪里)vim /etc/profile //打开环境变量文件...
2018-08-31 15:17:19 11137
原创 HashMap工作原理
Hash表的概念散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表几种数据结构在新增,查找,删除上的性能对比数组:采用一段连续的存储单元来存储数据。对于指定下标的查找,时间复杂度为O(1);通过给定值进行查找...
2018-07-19 18:39:59 2958
原创 log4j与log4j2的区别
log4j是Apache的一个开源项目,我们不去考究它的起源时间,但是据我了解,log4j 1已经不再更新了。1.配置文件类型log4j是通过一个*.properties的文件作为主配置文件的,而现在的log4j 2则已经弃用了这种方式,采用的是*.xml,*.json或者*.jsn这种方式来做,可能这也是技术发展的一个必然性,毕竟properties文件的可阅读性真的是有点差
2016-12-22 14:35:29 5626
原创 log4j配置文件(.properties)详解
一、简介Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局)。这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出。综合使用这三个组件可以轻松地记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置。
2016-12-06 17:41:21 510
转载 同一台机器上部署(启动)两个tomcat服务
最近一个项目需要在同一台机器上部署两个tomcat。如果直接将两个启动,你会发现只能启动其中一个。要想实现一台机器上启动两个tomcat,你需要以下几个步骤:1:修改server.xml中的 我修改为(根据个人可以选择其他端口): 这个端口定义在Server标签中,port代表端口号,而shutdown代表关闭服务器的请求命令。2:修改server.
2016-11-23 10:21:14 8971
原创 添加tomcat为启动服务/删除tomcat服务
在很多生产把环境下,tomcat的启动要随着windows的启动一起启动,这个时候就需要将tomcat添加成服务。步骤如下:1:环境配置 配置jdk环境变量: JAVA_HOME:jdk路径 配置path: 在 path 环境变量最前面加入:%JAVA_HOME%\bin;2:安装服务 进入t
2016-11-22 11:52:54 30491
原创 java代码LDAP操作(增删改查)AD(活动目录)- 修改
修改用户连接LDAP的类package cn.com.wilcom.main;import java.util.Hashtable;import javax.naming.Context;import javax.naming.NamingException;import javax.naming.ldap.InitialLdapContext;import javax.na
2016-11-21 11:17:36 1575
原创 java代码LDAP操作(增删改查)AD(活动目录)- 删除
删除用户连接ldap的类package cn.com.wilcom.main;import java.util.Hashtable;import javax.naming.Context;import javax.naming.NamingException;import javax.naming.ldap.InitialLdapContext;import javax.na
2016-11-21 11:12:54 3966
原创 java代码LDAP操作(增删改查)AD(活动目录)- 搜索
搜索用户package cn.com.wilcom.main;import java.util.Hashtable;import javax.naming.Context;import javax.naming.NamingEnumeration;import javax.naming.NamingException;import javax.naming.directory.Se
2016-11-21 11:11:04 1968
原创 java代码LDAP操作(增删改查)AD(活动目录)- 添加
增加用户 package cn.com.wilcom.main;import java.util.Arrays;import java.util.Hashtable;import javax.naming.Context;import javax.naming.NamingException;import javax.naming.directory.Attribute;i...
2016-11-21 10:51:43 4361
原创 String类型的路径转换成带有转译符的String
从数据库中读到的路径是:c:\2016\1101\6811\20161101163316_912.wav直接对读取到的字符创进行处理的时候,因为字符串中含有转译字符'\',所以会出现问题用org.apache.commons.lang3.StringEscapeUtils.escapeJava("")方法可以讲之前的字符串转换为:ceshi191:2016\\1101\\681
2016-11-15 13:37:41 3526
转载 关于LOG4J 按照级别输出日志
log4j自动加载配置文件说明:如果采用log4j输出日志,要对log4j加载配置文件的过程有所了解。log4j启动时,默认会寻找source folder下的log4j.xml配置文件,若没有,会寻找log4j.properties文件。properties不能实现这个功能,要用log4j.xml文件log4j.xml配置文件:<param name="Convers
2016-11-15 12:29:45 453
转载 java发送http的get、post请求
Http请求类package wzh.Http;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.URL;import java.net.URLConnection;
2016-11-09 12:31:52 387
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人