自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(50)
  • 资源 (2)
  • 问答 (1)
  • 收藏
  • 关注

原创 MySQL安装-宝塔安装

MySQL安装-宝塔安装1、宝塔官网https://www.bt.cn/宝塔Linux面板是提升运维效率的服务器管理软件,支持一键LAMP/LNMP/集群/监控/网站/FTP/数据库/JAVA等100多项服务器管理功能。有30个人的专业团队研发及维护,经过200多个版本的迭代,功能全,少出错且足够安全,已获得全球百万用户认可安装。2、安装宝塔服务yum install -y wget && wget -O install.sh http://download.bt.cn/in

2021-09-09 23:59:02 2885

原创 MySQL安装-原生态安装

MySQL安装-原生态安装1、下载MySQL安装http://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/2、配置MySQL扩展源rpm -ivh http://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/mysql57-community-release-el7-10.noarch.rpm3、yum安装mysqlyum install mysql-community-serve

2021-09-09 22:23:49 295

原创 Redis布隆过滤器

Redis布隆过滤器01、什么是布隆过滤器缓存穿透故障、幂等性判断、今日头条,抖音的推荐相信很多小伙伴在预览的时候,头条会根据的你喜好,为你推荐一些图文信息供你阅读,比如:你喜欢汽车、喜欢美女,它就会经常推荐一些美女图或者汽车文章供你阅读。我们今天讲的内容不是推荐算法,而是:已读去重算法。推荐引擎给你推荐合适的文章,要过滤你已经阅读过的,不然就会重复给你推荐。比如你阅读了一篇文章,如果你已经阅读了,如果没有已读去重,明天又给你推荐。故为了达到更好的体验效果必须把你读过的内容去重。这种已读去重的技

2021-09-04 14:01:09 502

原创 Redis缓存穿透解决方案

Redis缓存穿透解决方案1、什么是缓存穿透查询的key在redis中不存在,对应的ID在数据库也不存在,此时被非法用户进行攻击,大量的请求会直接冲入数据库上造成宕机,从而影响整个系统,这种现象称之为:缓存穿透@GetMapping("/findCategory/{cid}") public List<Category> findCategory(@PathVariable("cid") Integer cid) { // 判断分类id是否传入,如果没有传入那么直接

2021-09-04 13:59:54 1800

原创 基于Redis的List实现特价商品列表

基于Redis实现特价商品列表1、场景分析淘宝京东的特价商品列表,商品特点:商品有限,并发量非常的大。考虑分页传统解决方案:数据库db,但是在如此大的并发量的情况下,不可取。一般会采用redis来处理。这些特价商品的数据不多,而且redis的list本身也支持分页。是天然处理这种列表的最佳选择解决方案。2、分析采用list数据,因为list数据结构有:lrange key 0 -1 可以进行数据的分页。127.0.0.1:6379> lpush products p1 p2

2021-08-29 19:27:28 760 2

原创 Redis操作数据结构-List

Redis操作数据结构-List1、分析Redis类型list是一个双端链表的数据结构。容量是:2的32次方减1个元素,即可以存储40亿个元素。其主要功能有:push、pop、lrange 获取元素等,一般应用在栈、队列、消息队列等场景。2、命令2.1 LPUSH key element [element …]以开头插入或者尾部插入的方式指定放入到key队列中,可以存放1个或者多个元素。127.0.0.1:6379> lpush user:list xiaowu xiaozhang xi

2021-08-29 19:26:57 305

原创 基于Redis的Set实现黑白名单的过滤校验器

基于Redis实现黑白名单的过滤校验器黑白名单过滤器在实际开发中有很多种,比如:用户黑名单,IP黑名单等。在一些场景下,如果仅仅通过数据库DB来进行过滤处理。在并发量小的情况下是没有问题。但是如果在高并发的场景下,可能会出现性能瓶颈,这时采用redis来实现是最佳的选择方案。如何进行开发和处理呢?答案:redis中的数据结构 set。把黑名单的用户数据放入到redis的集合中。在登录、评价或在一些需要限制的地方,通过sismember命令来查询用户是否在黑名单列表中,如果存在就返回1,不存在就返

2021-08-21 16:44:52 2393

原创 基于Redis的Set实现关注和粉丝列表分析

基于Redis实现关注和粉丝列表分析1、定义相关的关注逻辑、我的关注列表、我的粉丝列表package com.example.service;import com.example.entity.User;import com.example.utils.ObjectUtils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.redis.core.HashO

2021-08-21 16:43:53 892

原创 基于Redis的Set实现共同好友微关系

基于Redis实现共同好友微关系1、概述使用redis的set集合实现共同好友在开发中,我们可能需要计算出关羽和张飞共同关注的人有哪些?也就是关注关羽的人和关注张飞的人。我们如何通过计算把两个人的关注相同的人找出来。如果我们使用SQL如何进行编写呢?比如:关羽关注了10个人,张飞关注了50个人,怎么计算两个人共同关注了那些人。SQL一般采用in或者not in来实现,但是对于高并发的情况下in和not in是不可取的,就算优化使用了索引,性能也会很差。一般解决方案:RedisRedi

2021-08-21 16:43:03 1327

原创 基于Redis的Set实现抽奖功能

基于Redis实现抽奖功能1、分析公司年底要做年会所有的员工都要参与抽奖的环节平台的产品要进行抽奖活动这个时候我们可以利用redis中的set集合中的spop来实现。特征:抽奖成功的人会自动从集合中删除,即获取到奖品的人不再继续参与抽奖。spop命令:随机返回元素,元素从集合中删除该元素2、初始化名单数据package com.example.service;import lombok.extern.slf4j.Slf4j;import org.springframework.

2021-08-21 16:42:06 2512 1

原创 SpringBoot+Redis+Hash存储课程信息和相关API学习

SpringBoot+Redis+Hash存储信息和相关API学习1、设置hash的key乱码和value的序列化问题package com.example.config;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.redis.connection.Redis

2021-08-21 16:40:41 295

原创 分布式限流解决方案-Redis+Lua

分布式限流解决方案-Redis+Lua1、分析黑客或者一些恶意的用户为了攻击网站或者APP,通过并发用肉机并发或者死循环请求接口,从而导致系统出现宕机。针对新增数据的接口,会出现大量的重复数据,甚至垃圾数据会将数据库和CPU或者内存磁盘耗尽,直到数据库撑爆为止。针对查询的接口。一般是重点攻击慢查询,比如一个SQL是2S。只要一致攻击,就必然造成系统被拖垮,数据库查询全都被阻塞,连接一直得不到释放造成数据库无法访问。一个用户在1秒钟之内,只允许请求n次。2、Redis + Lua实现限流解决方

2021-08-20 12:19:14 339

原创 Redis操作数据结构-Hash

Redis操作数据结构-HashRedis中的数据结构hash,它是String数据结构的升级版。类似于*java中的Map一样Map<String,Map<String,String>> hash = new HashMap<String,HashMap<String,String>>();每个hash存储的大小,可以存储2的(32-1)次方个键值对(40多亿条)。hset key field value [field value …]

2021-08-20 12:18:25 255

原创 基于Redis的Hash实现用户注册

用户注册流程:注册用户填写用户信息,先写入到db中在存储数据到redis的hash结构中 key=”reg:user:id”1、定义user实体package com.example.entity;import lombok.Data;/** * @Auther: 长颈鹿 * @Date: 2021/08/17/17:19 * @Description: */@Datapublic class User implements java.io.Serializable {

2021-08-20 12:16:54 274

原创 基于Redis的Hash实现购物车搭建工作

Redis的Hash实现购物车搭建工作1 、目标使用redis的hash数据结构完成小米购物车2、技术架构后端的数据架构:SpringBoot + Redis + MYSQL前端使用的技术栈:vue + axios3、具体实现商品的添加购物车购物车商品的数量的递增和递减商品的删除商品的总计和小计具体效果如下:3.1 导入相关依赖<dependency> <groupId>org.springframework.boot</groupId&g

2021-08-20 12:15:47 1901 1

原创 Redis操作数据结构-Set

Redis操作数据结构-Setsadd语法:sadd key member member1 membe2…membern给集合key中添加元素,如果添加相同元素就会自动过滤127.0.0.1:6379> sadd users u1(integer) 1127.0.0.1:6379> sadd users u2(integer) 1127.0.0.1:6379> sadd users u3 u4 u5smemberssmembers key返回集合中所有的元素

2021-08-20 12:13:03 247

原创 SpringBoot+Redis+Lua防止IP重复防刷攻击

SpringBoot+Redis+Lua防止IP重复防刷攻击分析黑客或者一些恶意的用户为了攻击网站或者APP,会通过并发用肉机并发或者死循环请求接口,从而导致系统出现宕机。针对新增数据的接口,会出现大量的重复数据,甚至垃圾数据将数据库和CPU或者内存磁盘耗尽,直到数据库撑爆为止。针对查询的接口,一般是重点攻击慢查询,比如一个SQL是2s。只要黑客一致攻击,就必然造成系统被拖垮,数据库查询全部被阻塞,连接一直得不到释放造成数据库无法访问。具体实现需求:在10秒内,同一IP 127.0.0.1

2021-08-13 10:48:44 519

原创 Lua脚本

Lua脚本1、概念Lua是一个轻量、简洁、可扩展的脚本语言特点:轻量:编译后体积很小简洁:由C编写,启动快,运行快可扩展:可内嵌到各种编程语言或者系统中运行;提升静态语言的灵活性;不需要担心语法问题2、优点原子性:将Redis的多个操作合成一个脚本,然后整体执行,在脚本的执行中,不会出现资源竞争的问题。减少网络通信:把多个命令合并成一个lua脚本,redis统一执行脚本。复用性:client发送的脚本会永久存储在Redis中,其他客户端可以复用这个脚本来完成同样的逻辑。3、re

2021-08-13 10:48:11 1103

原创 分布式全局ID

分布式全局ID1、概述在项目开发中,随着业务的不断发展数据日增大。这个时候就会出现数据表的分库分表的操作。一旦进行了分库和分表操作。传统的id就失去了意义。所以需要分布式全局ID2、特点全局唯一性,不能出现重复的ID单调递增,保证下一个ID一定大于上一个ID范围趋势递增。在一个时间段内,生成的ID是递增趋势的比如:202012120001 202012120002….第二天的时候又要从1开始计数。202012130001 202012130002……安全性,在不同的领域中我们有些业务不要出

2021-08-13 10:46:49 131

原创 分布式订单编号

分布式订单编号1、案例分析系统需要生成根据业务类型生成流水号,每天从0开始生成,第二天会清零继续从0开始流水号格式: bizCode + date + incr如:KS-20171123 -000000、 KS-20171123 -000001、KS-20171123 -000002……如:KS-20171124 -000000、 KS-20171124 -000001、KS-20171124 -000002……好处:可以根据订单编号里面得知今天有多少个订单信息2、具体实现利用Redis

2021-08-13 10:45:54 610

原创 基于Redis的String实现文章PV统计

Redis String数据类型实战开发 - 文章的PV统计1、场景分析使用redis的计数器来完成文章的统计计数新浪的文章访问微信公众号的文章访问都有一个浏览数、评论数、转发数等,数量的统计,可以使用string数据结构中的命令incr来进行处理和累加。2、具体实现分析每篇文章都有一个文章ID :可以用作为的key值就是每篇文章的浏览数即可redisTemplate.incrment("文章ID")3、具体实现3.1 使用Redis的计数命令 incr key采用inc

2021-08-10 00:12:23 973

原创 Redis操作数据结构-String

Redis操作数据结构-String查看类型:type key查看所有的keykey *Set命令语法:SET key value [expiration EX seconds|PX milliseconds] [NX|XX]必填参数key: 带设置的键;value: 带设置的值可选参数;[NX]: key不存在时才设置,如果存在就返回null (存在不做任何操作);[XX]: key存在时设置,如果不存在就返回null(替换原则);[EX <seconds>]:

2021-08-10 00:11:52 105

原创 SpringBoot连接Redis服务

SpringBoot连接Redis服务1、前期准备redis环境服务的安装redis服务器防火墙端口的开放redis配置文件redis.conf中bind修改开发工具:idea2、目标快速构建Springboot+SSM+Redis+Swagger集成框架3、具体流程3.1 pom.xml整合SSM+Redis+Swagger相关依赖<dependency> <groupId>org.springframework.boot</groupId&g

2021-08-09 09:48:21 1066 2

原创 Redis的安装注意事项

Redis下载和安装redis各个版本下载:http://download.redis.io/releases/1、概述Redis是一个高性能的基于Key-value设计的内存数据库,它支持常见的五种数据格式:String类型、Hash、List列表、Set集合、ZSet有序集合、 bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询等。作用性能通常数据库的操作,一般都要几十毫秒,而Redis的读操作一般仅需要不到1毫秒。所以一般在开发中我们会把一些

2021-08-09 09:46:53 427

原创 SpringBoot源码分析

SpringBoot源码分析1、Spring和springboot是关系是什么?Springboot是spring就是最核心的产品之一(是spring的分支项目),当然就包含springmvc。springmvc 只是spring 处理web层请求的一个模块。Springboot是构建在spring基础之上的一个产品,其主要目的就是简化spring框架中繁复的配置问题,用什么方式来解决的呢?用注解和类完成的无论使用spring还是springboot开发,其本质来说,springboot都是在做一

2021-08-04 16:42:37 2089 1

原创 SpringBoot实战开发后台管理-架构说明和开发

SpringBoot实战开发后台管理-架构说明和开发1、架构模式单体架构技术结构springboot + mybatisplus + mysql前端技术:jquery / layui字体图标库:iconfont2、后台开发的架构模式有哪些?纯企业开发(全部由公司自己内部去设计后台的页面和功能控制,动画,js、css的编写)使用开源一些开发模式 (layui、bootstrap、jui、extjs)等等。这些有什么好处呢?快速和方便,里面提供大量的组件和模块。比如:

2021-07-31 13:28:32 922 2

原创 SpringBoot实战开发后台管理-静态资源的导入

SpringBoot实战开发后台管理-静态资源的导入架构模式单体架构springboot + mybatisplus + mysql1、概述把后台所需要的html、CSS、 js、 fofts导入到项目中templates目录下。着重引入: jquery & layerui2、导入静态资源和动态模板静态资源是放入在resources/static目录中。页面视图模板: templates下方静态资源:所谓的js、css、 fonts、 html.视图模板: html(动态模板)

2021-07-28 13:16:10 398

原创 SpringBoot快速整合Mybatis&MybatisPlus

SpringBoot快速整合Mybatis&MybatisPlus1、目标整合mybatis和mybatis-plus实现数据库的增删改查 。官方文档mybatis-plus官方手册:https://mp.baomidou.com/guide/2、整合mybatis2.1 引入mybatis-plus依赖<dependency> <groupId>mysql</groupId> <artifactId>mysql-co

2021-07-23 11:36:54 1769 1

原创 Validator自定义校验器正则参考

Validator自定义校验器正则参考package com.example.common;import org.springframework.util.StringUtils;import java.util.regex.Pattern;/** * @Auther: 长颈鹿 * @Date: 2021/07/22/16:28 * @Description: 常用的一些验证,如手机、移动号码、联通号码、电信号码、密码、座机、 邮政编码、邮箱、年龄、身份证、URL、QQ、汉字、字母、数字

2021-07-22 17:11:54 646

原创 SpringBoot的参数校验器-Validator

SpringBoot的参数校验器-Validator1、分析在日常的开发中,服务端对象的校验是非常重要的一个环节,比如注册的时候:校验用户名,密码,身份证,邮箱等信息是否为空,以及格式是否正确,但是这种在日常的开发中进行校验太繁琐了,代码繁琐而且很多。Validator框架应运而生,它的出现就是为了减少开发人员在开发时的代码,提升开发效率。它有专门用来做接口的参数校验,比如:密码长度、是否为空等。Spring的validator校验框架遵守的是JSR-303的验证规范(参数校验规范),JSP全称

2021-07-22 17:07:35 1985 1

原创 SpringBoot封装全局异常处理器

SpringBoot封装全局异常处理器1、原因全局异常处理就是指把整个系统的异常统一自动处理,可以做到不用些try/catch就能进行处理项目中出现的异常。不用强制写try/catch,异常交由统一异常的处理机制进行捕获。@GetMapping("/error1") public String error1() { int i = 1 / 0; return "success";}在开发中,如果不用try/catch进行捕获的话。客户端就会跳转到springboot默认的异常页面。报

2021-07-22 13:30:56 581 1

原创 SpringBoot统一接口返回的标准格式R.java

SpringBoot统一接口返回的标准格式R.java1、分析前后端分离的开发方式,通过swagger来进行接口测试。每个开发者,对自己的代码都有一套自己的逻辑和哲学,返回值就千变万化。接口的调用者,对于返回值的不理解。解决方法:统一返回处理2、格式# 成功的状态{ code:200, data:{id:"1",name:"yykkk"}, message:"success"}# 失败{ code:401, data:"", message:"用户名

2021-07-21 13:45:28 1092 1

原创 SpringBoot中的异步处理框架@Async

SpringBoot中的异步处理框架@Async1、分析在SpringBoot的日常开发中,一般都是同步调用的,但经常有特殊业务需要做异步来处理。比如:注册用户、需要送积分、发短信和邮件、或者下单成功、发送消息等等。第一个原因:容错问题,如果送积分出现异常,不能因为送积分而导致用户注册失败。第二个原因:提升性能,比如注册用户花了30毫秒,送积分划分50毫秒,如果同步的话一共耗时:70毫秒,用异步的话,无需等待积分,故耗时是:30毫秒就完成了业务。场景:用户注册 发送短信和添加积分packa

2021-07-21 10:22:57 718 1

原创 SpringBoot和在线文档Swagger的整合

SpringBoot和在线文档Swagger的整合1、分析在开发中,现在主流开发方式都前后端分离的开放方式,面临问题:如何校验接口的有效性采用工具:比如:postman、swagger 和 小幺鸡 等。2、swagger使用swagger:依赖内嵌在项目中的一款在线文档测试工具2.1 在项目的pom.xml导入swagger的依赖<!-- Swagger --><dependency> <groupId>io.springfox</grou

2021-07-20 17:00:26 108

原创 SpringBoot日志存储路径和设置日志格式

SpringBoot日志存储路径和设置日志格式1、分析1.1 需求在开发过程这种,我们经常要调试和打印一些信息,这样的帮助和我辅助我们进行问题排查和数据的跟踪。一般传统的方式是使用System.out.printltn("xxxxx")1.2 存在问题仅仅只是一种控制台打印的方式。不方便后续生产环境的调试和查看。性能角度,存在一定性能问题。会影响方法的执行速度。虽然影响很小,但也不容小觑。1.3 解决方案考虑:把打印的信息写入文件中。也就所谓的日志2、Springboot的日

2021-07-20 14:08:05 4502

原创 SpringBoot中使用lombok&注意事项

SpringBoot中使用lombok&注意事项Lombok需求在传统的开发过程中,一个javabean开发非常琐碎和麻烦,如下:package com.example.entity;public class User { // 用户编号 private Integer id; // 用户昵称 private String nickname; // 用户密码 private String password; // 用户头像

2021-07-19 23:07:48 338 1

原创 Spring和Springboot中容器注入那些事

Spring和Springboot中容器注入那些事spring容器如何去存储我们的bean底层:每一个bean对应了一个BeanDefinition对象,每个bean注册到Map中。如何证明呢?答案是:使用BeanDefintionMap来存储的所有的bean。 也就是说springioc就是一个map,仅此而已。springioc负责:对象的初始化,对象管理,对应的依赖注入,对象的生命周期,对象的获取等(对象的生命周期的管理)一般情况下,JVM不会回收这块空间,因为它是一个强引用,除非调用了

2021-07-17 15:48:30 483

原创 SpringBoot父子工程模块化开发

SpringBoot父子工程模块化开发准备工作开发工具:idea / spring tool suitjdk环境:jdk1.8+maven的:3.5+搭建的过程创建一个父工程创建子工程(模块化工程)创建一个父工程父工程作用:统一管理所以的子工程以及相关版本统一管理和依赖,可以统一编译。创建一个maven工程创建成功父工程的注意事项:1、删除src目录2、把pom.xml中的的packaging修改成pom<packaging>pom<

2021-07-17 12:41:50 683 1

原创 @ConfigurationProperties注入属性

@ConfigurationProperties注入属性概述获取到了自定义属性还是官方的属性,都通过==@Value(“${key}”)==来获取。除了这种方式外,springboot还提供一种 @ConfigurationProperties 属性注入的机制。这也是如下配置的原理# 环境激活spring: profiles: active: dev分析@Value(“${key}”) 存在的问题:不具有面向对象的特征。比如:#自定义属性ksd: weixin: a

2021-07-16 20:51:54 1139

原创 SpringBoot常见配置说明

SpringBoot常见配置说明配置文件核心点配置: application.properties 或者 application.yml在开发中如果两者同时存在:application.properties > application.yml ,但是前提是:相同的配置,如果不配置的取并集(不同的综合一起加载到内存中)。== 虽然有这样的机制,但在开发中,不建议两者同时存在,没有必要 ==比如配置随机端口:server: port: ${random.int[8080,8999]}

2021-07-16 19:00:37 181

简易springboot项目-商城系统

简单的springboot项目,可以参考一下,欢迎大佬给出意见

2021-02-22

简易springboot项目-社区管理

简单的springboot项目,可以参考一下,欢迎大佬给出意见

2021-01-27

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

TA关注的人

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