自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

SO

  • 博客(44)
  • 收藏
  • 关注

原创 05-nginx的常用变量

nginx常用变量包括如下:$uri 当前请求的uri不带请求参数$request_uri 请求的uri带完整参数$host http请求报文中host首部,如果没有则以处理此请求的虚拟主机的主机名代替$hostname nginx服务运行在主机的主机名$remote_addr 客户端ip$remote_port 客户端端口$remote_user 使用用户认证时客户端用户输入的用户名$request_filename 用户请求的uri经过本地root或alias转换后映射到本地的文件路径

2020-11-06 00:58:54 223

原创 04-mybatis 批量更新 foreach bad SQL grammar []

mybatis批量更新时,报错foreach bad SQL grammar []<update id="xxxx" parameterType="java.util.List"> <foreach collection="list" item="user" separator=";"> update t_xxx_user set is_default = #{user.isDefault} where id = #{

2020-10-28 09:34:38 658

原创 04-nginx目录结构概述与编译参数概述

一、nginx常用命令#首先进入到nginx安装路径的sbin目录下cd /usr/local/nginx/sbin#查看nginx版本号./nginx -v #启动nginx./nginx#关闭nginx./nginx -s stop#重新加载nginx 重新加载nginx./nginx -s reload 二、nginx的配置文件nginx的配置文件在nginx的安装目录的conf目录下有一个nignx.conf文件就是nginx的配置文件.nginx的配置文件由三部分组成

2020-10-25 16:25:01 108

原创 03-nginx安装

这里只介绍在Linux下的nginx安装过程下载1、访问nginx官网2、找到合适的版本,一般选择stable版本,点击下载环境准备在Linux上安装nginx需要先准备相关的环境具体包括pcre pcre(Perl Compatible Regular Expressions中文含义:perl语言兼容正则表达式)是一个用C语言编写的正则表达式函数库openssl OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份。这个

2020-10-25 15:35:42 80

原创 03-Linux下安装openssl

下载openssl#选择一个目录 下载opensslwget https://github.com/openssl/openssl/archive/OpenSSL_1_1_1-stable.zip删除原来的旧的openssl#一般Linux都默认有安装了openssl 我这里先将默认的删掉yum remove openssl 解压并编译openssl#解压unzip OpenSSL_1_1_1-stable.zip#检查配置./config --prefix=/usr/local/o

2020-10-25 14:59:16 297

原创 02-nginx基本概念

一、nignx概述nginx是一个高性能的http和反向代理服务器,特点是占用内存少,并发能力强,nginx可以作为静态页面的web服务器,同时还支持CGI协议的动态语言,比如perl、php等,但是不支持java。java程序只能通过与tomcat配合完成,nginx专为性能优化而开发。nginx最大可支持高达50000个并发连接数。nginx支持热部署二、反向代理正向代理nginx不仅可以做反向代理,也可以做正向代理来实现上网等功能。如果把局域网外的internet想象成一个巨大的资源库,则局域

2020-10-25 11:51:53 105

原创 01-nginx内容介绍

本套专题会介绍如下nginx相关内容nginx的基本概念1、nginx是什么2、反向代理3、负载均衡4、动静分离nginx的安装、常用命令和配置文件1、在liunx中安装nginx2、nginx的常用命令3、nginx的配置文件nginx的配置实例1、反向代理2、负载均衡3、动静分离4、nginx集群配置niginx原理1、nginx的基本概念...

2020-10-25 10:57:05 57

原创 14-redis的发布订阅

Redis发布订阅是一种消息通信模式,发送者(pub)发送消息,订阅者(sub)接收消息订阅发布消息图redis发布订阅的原理redis是使用C实现的,通过分析Redis源码中的pubsub.c文件,了解发布和订阅的底层实现籍此加深对Redis的理解,Redis通过PUBLISH、SUBSCRIBE、PSUBSCRIBE等命令来实现发布订阅的功能。通过SUBSCRIBE命令订阅某频道后,redis-server里维护了一个字典,字典的键就是一个个的channel,而字典的值则是一个个链表,链表中保

2020-10-20 00:08:35 115

原创 13-redis持久化RDB和AOF

RDB简介RDB是Redis Database的缩写,是redis持久化的一种方式,具体指的是在指定的时间间隔内,将数据集快照写入磁盘,也就是行话将的Snapshot快照,它恢复时是将快照直接读到内存中。redis会单独的fork(派生)出一个子进程来进行持久化,会将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件来替换上一次的持久化文件。整个过程中主程是不会进行任何IO操作的(持久化全部交给子进程),这样就保证了极高的性能,如果需要进行大规模的数据恢复,且对于数据恢复的完整性不是很

2020-10-19 23:09:39 109

原创 12-redis的配置文件详解

单位需要注意的是redis中1k 和 1kb是不一样的 1k就是1000字节 而1kb指的是1024字节 以此类推 redis配置文件单位对大小写是不敏感的# 1k => 1000 bytes# 1kb => 1024 bytes# 1m => 1000000 bytes# 1mb => 1024*1024 bytes# 1g => 1000000000 bytes# 1gb => 1024*1024*1024 bytes包含(include)incl

2020-10-18 18:38:30 78

原创 11-自定义redisTemplate

在工程中新建一个配置类,手动装配redisTemplate@Configurationpublic class RedisConfig { /** * 不用springboot自己的redisTemplate 改用自己自定义的redisTemplate * @param redisConnectionFactory * @return * @throws UnknownHostException */ @Bean public

2020-10-18 17:36:19 255

原创 10-springboot整合redis

在springboot 2.x之后spring 连接redis 底层已经由jedis变更为lettuce。jedis与lettuce的却别jedis底层采用的是直连redis 来一个请求就会创建一个连接 这样是不行的,当并发量大的时候会造成redis连接数过多,所以实际生产环境中国一般采用jedispool(jedis提供的redis连接池) 但是这样当并发量过高时,连接池会将请求放入队里中等待,效率相对于lettuce来说太低了。(阻塞式IO BIO)lettuce底层采用的netty(非阻塞式I

2020-10-18 16:17:42 159 2

原创 09-jedis操作redis

jedis 是redis官方推荐的java连接开发工具。pom依赖<dependencies> <!-- jedis客户端 --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.2.0</version>

2020-10-18 15:06:56 47

原创 08-redis实现乐观锁

一简介redis本身自带有一个watch命令,利用它也可以实现乐观锁,和redis的setnx 不一样,watch命令的作用就是监听某个key,当redis的某个事物对该key进行操作时,如果发现该key状态发生了变更,则整个事物会失败。set money 100 #设置初始化的值为100watch money #监听这个keymulti #开启事务incr money #新增余额#此时启动另外一个客户端 执行下面的命令 将money的值改变decr money #此时money已经变成了

2020-10-18 10:54:48 137

原创 07-redis事务

一 简介通常我们说的事务都具有四个特性 ACID(原子性、一致性、隔离性、持久性)但是redis的事务是不能保证原子性的(要么同时成功 要么同时失败)redis事务的本质: redis中的事务实际上相当于将一组命令先放入一个队列中,当执行事务的时候才开始执行这一组命令,在执行事务时候会根据入队的先后顺序执行。由于redis是单线程的,所以redis中的事务没有隔离级别(脏读、幻读、不可重复读)的概念 也就是说redis中不会存在脏读、幻读、不可重复读这些,这些情况都是在事务并发执行的时候出现的问题。

2020-10-13 23:17:12 68

原创 06-redis的三种特殊类型

一 geospatial(地理位置)geospatial类型可以用在以下场景中 1、朋友的地位 2、附近的人 3、打车距离计算城市经纬度查询 这个网站可以查询城市的经纬度,用于测试geospatial数据类型# geoadd key 精度 维度 名称 将给定的空间元素(纬度、经度、名字)添加到指定的键里面 需要注意的是地球两极无法直接添加geoadd china:city 116.405285 39.904989 beijing #将北京市的经纬度添加到china:city集合中#geopos

2020-10-08 21:52:08 300 1

原创 01-mybatis简介

一简介Mybatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射Mybatis3中文文档MybatisGitHub地址<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --><dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId&gt

2020-09-25 01:24:35 84

原创 05-redis的基本数据类型

一 简介redis的数据类型主要包括5种基本数据类型和三种特殊数据类型二 redis key的常用命令1、判断一个key是否存在# 判断key=name的这个key是否存在 如果存在返回1 否则返回0exists name2、将key从当前db迁移到另外一个db中去#表示将key为name的这个可以 迁移到db=1的db中去move name 13、为key设置过期时间#设置key为name的key的过期时间为30秒 单位是秒expire name 304、查看某个key剩余

2020-09-21 07:52:46 82

原创 04-redis基本知识说明

redis默认有16个数据库,默认使用的是第0个数据库,redis是一个单线程的数据库。官方表示redis是基于内存操作的,其性能瓶颈不在于CPU而在于网络带宽和内存大小,所以能用单线程实现就用单线程实现。1、切换数据库#切换到下标为3的数据库(第四个)select 32、查看当前数据库的大小#通过dbsize命令查看当前数据库的大小dbsize3、查看所有的key#只能查看当前db的所有的key 生产环境慎用keys * 4、清空当前db的数据flushdb5、清空整个re

2020-09-20 16:09:16 80

原创 03-redisbenchmark性能测试工具

一 简介redis-benchmark 是redis自带的一个性能测试工具,用来测试redis的性能的二 benchmark 命令参数序号选项描述默认值1-h指定redis服务器主机名127.0.0.12-p指定redis服务器的端口63793-s指定服务器的socket4-c指定并发连接数505-n指定每个连接的请求数100006-d以字节的形式指定GET/SET的数据大小7-k值为1 表示keep

2020-09-20 00:53:31 74

原创 02-redis简介与安装

一 redis 简介redis又叫 REmote DIctionary Serve(远程字典服务) 它是一个使用C语言编写的支持,支持网络、可基于内存亦可持久化的日志型、key-value数据库,并提供多种语言的API 不仅仅只是java二 redis能干嘛1、支持内存存储和持久化(rdb、aof)2、效率高可以用于高速缓存3、支持发布订阅4、用来做地图信息分析5、计时器、计数器三 windows下安装redisredis并不建议在windows下使用,但是有些比较古老的企事业单位,还有用

2020-09-20 00:13:01 84

原创 01-NoSql简介

一 简介NoSql(Not only Sql) 泛指非关系型数据库,随着web2.0的诞生,传统的关系型数据库很难对付web2.0时代,尤其是超大规模或者是高并发的社区,传统的关系型数据库已经不能满足需求了。二 Nosql 特点方便扩展大数据量、高性能 redis 一秒可以写8万次读11万次数据类型多样三 Nosql 四大分类键值对存储 redis列存储 hbase文档存储 mongodb 文档型数据库底层是二进制的json(也叫bson)图形数据库...

2020-09-19 13:14:56 77

原创 02-spring mvc 中文乱码问题

一 问题利用springmvc 做了一个文件上传的demo,发现通过浏览器请求服务器进行文件上传时,提交的中文,到了服务器后台变成了乱码。其中已经在Controller层已经对请求头设置了编码字符集为utf-8request.setCharacterEncoding("UTF-8")但仍然还是乱码public class UploadController { @RequestMapping("/upload") public void download(MultipartFile

2020-09-17 23:28:07 100 1

原创 19-spring声明式事务详解

一 简介@Transactional注解包含众多的属性,下面会依次介绍这些属性的作用isolation 事务的隔离级别propagation 事务的传播行为timeout 事务超时时间 当事务执行超时后,会自动终止并回滚 秒为单位readOnly 设置事务为只读事务rollbackFor 哪些异常需要进行回滚(class 数组)rollbackForClassName 哪些异常需要进行回滚(String 数组)noRollbackFor 哪些异常事务可以不回滚(class 数组)noR

2020-09-16 23:39:50 96

原创 18-spring声明式事务

一、简介事务是数据库操作的最小单元,是作为单个逻辑工作单元执行的一系列操作。事务本身具有原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Isolation)原子性(Atomicity) 事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做一致性(Consistency) 事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。 一致性是事务的最终目的,其他三个特性是保证一致性的约束隔离性(Isolation) 事务之间是

2020-09-12 17:02:17 161

原创 17-spring jdbcTemplate和namedParameterJdbcTemplate

一、简介下面的代码是jdbcTemplate的部分源码,包含了jdbcTemplate的部分常用API,熟悉使用即可。public class JdbcTemplate extends JdbcAccessor implements JdbcOperations { public JdbcTemplate() { } public JdbcTemplate(DataSource dataSource) { setDataSource(dataSource); afterProper

2020-09-12 16:45:54 76

原创 01-spring jdbcTemplate 写入数据库乱码

一、问题用spring jdbcTemplate 向mysql写数据时,中文在数据库中是乱码,mysql库的字符集是utf-8二、解决方案仔细检查了代码,发现mysql配置dataSource时没有指明数据库的字符集解决方案是将url后添加上数据库的字符集为utf-8至此问题解决...

2020-09-12 15:44:32 384

原创 01-SRA加密验签说明

一简介实际工作中经常遇到与第三方进行数据交互的场景,这个时候,处于安全的考虑,通常会对数据进行加密,RSA+BASE64是常见的加密验签的算法组合。所谓RSA就是一种非对称的加密算法,他会生成一组秘钥公钥、私钥公钥 公钥负责加密和验签的工作。公钥是给对方使用的,对方用我方的公钥 对我方传输到对方的数据 进行验签,我方利用对方的公钥,对我方传输到对方的数据进行加密。私钥 私钥负责解密和加签工作。私钥是给自己用的,己方利用私钥 对我方传递到对方的数据进行加签,对对方传递到我方的数据进行解密。一般加签的

2020-09-10 23:05:57 469

原创 16-spring jdbcTemplate

一、简介jdbcTemplate 是spring提供的,用于操作数据库的一个模板类。二、java操作数据库jdk本身支持数据库的相关操作,相关的api在java.sql包下,下面的示例是一个java操作mysql数据库的示例(也是最原始的jdbc的写法)public class DBUtil { public void query(String sql){ Connection connection = null; PreparedStatement ps

2020-09-10 00:43:47 67

原创 15-spring aop 补充

一、简介之前几篇文章简单了说明了aop的一些基本的配置及使用,可以发现前面的文章中并没有给出aop获取方法执行结果和获取异常栈的方法,其实AOP中本身自带了两种通知,用来获取方法执行结果与异常栈。(一)@AfterReturning不同于@After注解,@AfterReturning注解虽然也是在方法执行之后执行,但是利用它可以获取方法的执行结果。@AfterReturning有一个returning的属性,用来标识,接收方法执行结果的变量,如下面的示例所示,用result(这个变量名是自定义的)

2020-09-06 21:37:23 124

原创 14-spring aop表达式详解

一、简介本文接上一篇13-spring aop配置详解,主要说明aop的切点表达式execution表达式的语法如下execution(modifiers-pattern? ret-type-pattern declaring-type-pattern?name-pattern(param-pattern) throws-pattern?)modifiers-pattern 表示方法的可见性,如public,protected;ret-type-pattern 表示方法的返回值类型,如int,

2020-09-06 11:23:22 500 1

原创 13-spring aop 配置详解

一、aop相关依赖要使用spring的aop功能需要导入如下依赖(理论上只需要导入aop和aspects就行了,但是如果只有aop和aspects可以使用aop的基本功能,但是此时只能代理接口,所以还需要导入外部依赖)<!--spring aop相关 --> <!-- https://mvnrepository.com/artifact/org.springframework/spring-aop --> <dependency> <groupId

2020-09-06 01:23:06 435

原创 12-spring aop简介

一、AOP简介AOP(Aspect Oriented Programming)也即面向切面编程,指在程序运行期间,将某段代码动态的织入到指定的方法的指定位置。AOP的底层是基于动态代理来实现的,作用就是丰富方法的功能、解耦;应用场景有很多如:作链路监控的时候,可以动态的为方法织入日志,这样每个方法出入口的时候,都有日志可寻,从而实现全链路的一个日志打印,从而达到链路监控的目的。而开发人员不需要关心这些日志打印的实现,可以保证每个方法的一个纯粹性。还有一个就是声明式事务的实现也是基于AOP的一个实现。二、

2020-09-05 22:07:21 67

原创 11-JDK动态代理

一、简介jdk的动态代理主要是依靠java反射中的Proxy类来实现的,且目前jdk的动态代理只能代理接口,无法代理类(因为Proxy.newProxyInstance(loader, interfaces, h)第二个入参传递的就是接口,反射过来也只能执行对应接口中的方法)。优缺点优点 能够扩展接口方法的功能,更加解耦,缺点 被代理的真实对象必须要实现接口,否则无法实现动态代理,而且代码编写复杂度相对较高实现步骤(一)创建接口跟真实对象示例中的接口是Learn接口,真实对象(被代理的对

2020-09-05 21:39:56 245

原创 10-spring的单元测试

一、依赖配置spring的单元测试需要导入如下依赖spring-test和junit<dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>4.3.9.RELEASE</version></dependency><dependency&g

2020-09-05 17:20:55 91

原创 09-@Autowired、@Qualifier、@Resource的区别

一、@Autowired流程分析当利用@ComponentScan注解配置了自动扫描后,类上带有对应注解(@Component、@Service…)的类,会被装配到spring容器中。此时如果需要调用这些bean可以通过@Autowired或者@Resource来实现将bean作为属性,注入到其他的bean中,方便调用。示例如下这样在UserService中就可以调用helloService的方法@Servicepublic class UserService { @Autowi

2020-09-05 16:58:20 89

原创 08-spring注解扫描补充

一、说明本文是对07-spring基于注解的配置的一个补充,在上一篇中,提到了spring注解配置的时候用到了一个注解扫描的配置<context:component-scan> or @ComponentScan,component-scan会有两个属性一个是exclude-fliter 一个是include-fliter这两个属性用来对component-scan进行一个扩展二、exclude-fliter(一) 对<context:component-scan>的扩展配置

2020-09-05 13:20:45 83

原创 07-spring基于注解的配置

一、简介spring 虽然可以通过xml配置,来实现对bean的管理,但是xml的配置还是太过繁琐,所以实际开发中更多的是基于注解的模式。spring提供了4个注解,用来注入bean(代替<bean id =“xx” class=“xxx.xxx.xx”>这种xml配置);分别为:@Controller 这个注解用来标识spring web工程的controller(控制器)层@Service 用来标识业务逻辑的处理类@Repository 用来标识dao层@Component 这个

2020-09-05 12:21:26 204

原创 06-spring 配置数据库连接池

一、依赖本示例数据库为mysql,连接池选用druid(现在基本不用c3p0了),要配置连接池需要除了spring的核心依赖外还需要另外导入mysql的驱动包以及druid的包<!-- 数据库连接池相关配置 --><dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.2

2020-09-02 23:58:52 558

原创 05-spring bean的后置处理器BeanPostProcessor

一、BeanPostProcessor 概述spring为我们提供了一个BeanPostProcessor接口,该接口扩展了bean创建时指定的init-method方法的功能。BeanPostProcessor接口有两个方法,用于在bean的初始化方法前后执行对应的方法 且相对于bean的init方法来说,BeanPostProcessor更具有通用性,它对spring中所有的bean都有效。二、示例MyBeanPostProcessor类MyBeanPostProcessor是自己新建的类,实

2020-09-02 00:05:23 58

空空如也

空空如也

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

TA关注的人

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