author avatar

guqing

毕生所求无它,爱与自由而已

模板方法模式实现Redis缓存查询简化

简述 在高并发场景下查询缓存时很容易出现缓存击穿(本文针对单机没有使用分布式锁),这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大,造成过大压力,因此查询缓存需要进行加锁,但这种代码每次写多了很烦,而且容易写错,因此本文采用模板方法模式简化缓存查询及并发处理 快速开始 Redis Dependency: Redis Service Redis Service Impl Redis Key Util: Cache Enum CacheTemplate: LoadCallback Example:

vue 计算属性传参

使用JavaScript闭包,进行传值操作。 使用计算属性传参

SpringBoot如何优雅的处理参数校验

解决方案 对于以上问题,SpringBoot项目我列举了三种处理方式: 对于前端传参的实体我们可以写这样一个类例如UserParam,然后使用javax.validation提供的注解进行参数条件限制 基于这样一个类,提出了两种关于aop的方式和一种异常处理的方式 AOP参数校验方式一 写一个AOP参数校验的类: 然后在controller中使用如下,只需要在参数UserParam前添加@Valid即可完成参数校验 AOP参数校验方式二 同样写一个aop参数处理类 在controller中使用 如上,不同点在于不仅需要在UserParam参数前写@Valid,还需要多添加一个参数BindingResult result才可以 全局异常处理参数校验 写这样一个异常处理类 在controller中使用 只需要在需要进行参数校验的参数UserParam前添加@Valid即可,当校验不通过时会被ValidExceptionAdvice类拦截处理 @Valid注解说明 java的JSR303声明了@Valid这类接口,而Hibernate-validator对其进行了实现,因此具体注解使用参考Hibernate Validator,下面列举一些常见注解的使用说明: 注解 备注 @Null 只能为null @NotNull 必须不为null @Max(value) 必须为一个不大于 value 的数字 @Min(value) 必须为一个不小于 value 的数字 @AssertFalse 必须为false @AssertTrue 必须为true @DecimalMax(value) 必须为一个小于等于 value 的数字 @DecimalMin(value) 必须为一个大于等于 value 的数字 @Digits(integer,fraction) 必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction @Past 必须是 日期 ,且小于当前日期 @Future 必须是 日期 ,且为将来的日期 @Size(max,min) 字符长度必须在min到max之间 @Pattern(regex=,flag=) 必须符合指定的正则表达式 @NotEmpty 必须不为null且不为空(字符串长度不为0、集合大小不为0) @NotBlank 必须不为空(不为null、去除首位空格后长度不为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格 @Email 必须为Email,也可以通过正则表达式和flag指定自定义的email格式

通俗解释JAVA设计模式之观察者模式

3、使用场景例子 有一个微信公众号服务,不定时发布一些消息,此时,用户关注公众号那么用于就相当于观察者而公众号则是被观察者,当被观察者状态改变时(有新文章)则观察者会观察到状态改变(收到文章) 4、观察者模式具体实现 1、定义一个抽象被观察者接口 2、定义一个抽象观察者接口 3、定义被观察者,实现了Observerable接口,对Observerable接口的三个方法进行了具体实现,同时有一个List集合,用以保存注册的观察者,等需要通知观察者时,遍历该集合即可。

给你的Arch Linux 清理空间腾出地方

我将清理的内容分成三部分,清理安装包缓存,清理孤立的软件包,以及清理日志。 清理安装包缓存 使用如下命令 不仅会删除未安装或旧版本的包文件缓存,也会将安装着的包的包文件缓存也一并删除。 清理孤立的软件包 使用如下命令 就可以删除孤立的软件包。 什么是孤立的软件包呢? 如果我再也不想要吃西餐了,那么已经买来的刀叉也没用了。 这个刀叉即孤立的软件包。 清理日志 使用如下命令 可以限制日志记录大小在50M,我使用一年没清理过,日志记录大概在2G左右。

如何使用自有数据创建大规模路网拓扑结构

完成之后,用鼠标点击路网可以看出已经从交叉口处断开了,到此数据处理完毕 安装Postgresql数据库 建议安装稳定版9.6版本 postgresql下载地址 window64位版下载地址 下载完成后,安装过程省略,无脑安装即可,比mysql简单多了 安装完成之后,需要安装postgis插件: 打开如下软件 然后选择数据库点下一步: 安装该插件之后就会有一个可以将shp的数据导入到postgres的工具了 创建数据库并增加gis功能 可以使用命令行或者是图形化界面创建数据库(我是用的Navicat) 有了数据库之后,需要给该数据库增加gis功能,在数据库中允许以下命令: 如Navicat新建查询: 或者命令行的方式: 然后导入shp的数据到数据库中,会自动建表,注意:存放shp文件的路径不要包含中文,文件名称不要包含中文,否则会导入失败。

Spring Boot2 开发:从入门到核心原理

.yml是YAML (Yet Another Markup Language另一种标记语言)的缩写 以前的配置文件按大多数都是用的是xxx.xml文件 而YAML是以数据为中心的,比json,xml等更适合做配置文件 YAML配置实例: 可以看到非常的简洁 7.2 YAML语法 k:(空格)v:表示一堆键值对(空格必须有); 以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的 属性和值也是大小写敏感的 7.3 值的写法 字面量:普通值(数字、字符串、布尔) 对象、Map(属性和值,键值对) 行内写法: 数组(List、Set) 用- 值表示数组中的一个元素 行内写法: 7.4 获取配置文件值(配置文件注入) 创建一个Person类 其中引用到一个Dog类 使用@ConfigurationProperties注解需要导入maven配置,编写yaml文件时就有提示 使用yaml配置文件给Person注入值: 然后写测试类 可以看到输出结果: 而对于application.properties的配置方式为: 如果输出结果出现乱码需要在IDEA编辑器设置编码 如果不使用@ConfigurationProperties注解,也可以使用@Value的方式获取配置文件中的值,@Value的key读取的是配置文件中的key 7.5 @Value获取值和@ConfigurationProperties获取值比较 测试功能 @ConfigurationProperties @Value 注入数据 批量注入配置文件中的属性 一个一个指定 松散绑定(松散语法) 支持 不支持 SpEL 不支持 支持 JSR303数据校验 支持 不支持 复杂类型封装 支持 不支持 JSR303数据校验(例如校验Email地址): 运行: 7.6 @PropertySource&@ImportResource 7.6.1 @PropertySource @PropertySource: 加载指定的配置文件 当配置比较多时如果全部放在全局的配置文件application中就会很乱,那么这时可以将一些配置文件抽取出来放在另一个配置文件中使用@PropertySource来加载,它接收一个value数组String[] value();可以同时指定多个配置文件,例如 @PropertySource(value={"classpath:person.properties"}) 7.6.2 @ImportResource @ImportResource: 导入Spring的配置文件,让配置文件里面的内容生效。

Manjaro 安装 MySQL 提示 loading libicuuc.so.65错误

安装Mysql 初始化Mysql 到了这一步报错了: 提示这一错误的原因是Manjaro系统中自带的libicu版本是64.2,而Mysql默认安装的是8版本需要libicuuc65版本。 这时候去github下载并编译安装进系统,并软链接到/usr/lib/目录下即可 安装libicuuc 创建软连接 之后再执行 看到下面的输出就表示初始化完成了 最后的er.aavg? dh6kZ是root用户的临时密码 配置 启动成功后,继续往下执行,如果启动失败,看status的日志,可能是数据目录权限不够,分配权限,或者可能报数据目录不是空的,修改/etc/mysql/my.cnf中的datadir为一个新的空目录。

如何为Linux新增swap交换空间

对于我使用manjaor linux作为日常操作系统用的就没有上述的考虑了,根据自己的使用情况,8G内存我设置8G或者2G其实都够用 分配swapfile作为交换空间步骤如下: 步骤 首先运行 查看一下物理内存大小和swap 我的显示8G并没有分配swap空间所以为0 创建swapfile文件 mkswap创建交换文件 swapon激活 查看增加后swap空间 设置开机自动挂载 在其中添加一行 添加之后我的完整fstab文件如下,自行参考: 其中/dev/sdb3一行是因为我挂载了磁盘的缘故 然后执行,自动挂载所有在fstab中的文件系统 到此就可以使用swapfile了 去掉swap 如果不想使用swap空间了,可以使用如下方法删除swapfile

在 Linux 终端下使用默认应用快速打开文件或文件夹

概述 一般我们想要打开文件夹的方法都是首先打开文件管理器,然后找到想打开的文件夹并双击打开它,或者想使用某个应用打开某个文件,比如用图片查看器打开一张图片,但是这样做的速度实在太慢了而且很不爽,比如我的鼠标左键就打游戏打坏了,哈哈哈哈。 xdg-open 对于上述这样的操作,有更简单而快速的方法,使用xdg-open xdg-open就是用来替代上述操作的,比如: 就像双击打开这个文件夹一样。 使用 描述 选项说明 为了方便使用,可以配置一个别名,zsh shell的用户配置~/.zshrc,默认shell用户配置~/.bashrc,在其中添加 这样就可以用open来替代xdg-open了,比如: 甚至你可以使用它来打开一个url 需要注意的是,url需要带上协议比如http/https