<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[bag2016的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/bag2016</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; bag2016]]></copyright><item><title><![CDATA[Shiro实现登录认证和权限认证（笔记，自己看的）]]></title><link>https://blog.youkuaiyun.com/bag2016/article/details/132009893</link><guid>https://blog.youkuaiyun.com/bag2016/article/details/132009893</guid><author>bag2016</author><pubDate>Sun, 30 Jul 2023 18:32:35 +0800</pubDate><description><![CDATA[【代码】Shiro实现登录认证和权限认证（笔记，自己看的）]]></description><category></category></item><item><title><![CDATA[并发编程（1）]]></title><link>https://blog.youkuaiyun.com/bag2016/article/details/124772582</link><guid>https://blog.youkuaiyun.com/bag2016/article/details/124772582</guid><author>bag2016</author><pubDate>Sat, 14 May 2022 19:48:34 +0800</pubDate><description><![CDATA[进程与线程

进程
 程序由指令和数据组成，但这些指令要运行，数据要读写，就必须将指令加载至 CPU，数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理IO的。
 当一个程序被运行，从磁盘加载这个程序的代码至内存，这时就开启了一个进程。
 进程就可以视为程序的一个实例。大部分程序可以同时运行多个实例进程（例如记事本、画图、浏览器等），也有的程序只能启动一个实例进程（例如网易云音乐、360 安全卫士等。

线程
一个进程之内可以分为一到多个线程。
一个线程就...]]></description><category></category></item><item><title><![CDATA[RabbitMQ的基本使用]]></title><link>https://blog.youkuaiyun.com/bag2016/article/details/124701910</link><guid>https://blog.youkuaiyun.com/bag2016/article/details/124701910</guid><author>bag2016</author><pubDate>Wed, 11 May 2022 08:12:59 +0800</pubDate><description><![CDATA[同步和异步通讯



微服务间通讯有同步和异步两种方式：

同步通讯：就像打电话，需要实时响应。

异步通讯：就像发邮件，不需要马上回复。



1.同步通讯

我们之前学习的Feign调用就属于同步方式，虽然调用可以实时得到结果，但存在下面的问题：





总结：

同步调用的优点：


	时效性较强，可以立即得到结果
	
同步调用的问题：


	耦合度高
	
	
	性能和吞吐能力下降
	
	
	有额外的资源消耗
	
	
	有级联失败问题
	
2.异步通讯

异步调用则可以避免上述问题：



我们以购]]></description><category></category></item><item><title><![CDATA[Gateway网关的使用]]></title><link>https://blog.youkuaiyun.com/bag2016/article/details/124674246</link><guid>https://blog.youkuaiyun.com/bag2016/article/details/124674246</guid><author>bag2016</author><pubDate>Mon, 09 May 2022 20:26:22 +0800</pubDate><description><![CDATA[为什么需要网关



Gateway网关是我们服务的守门神，所有微服务的统一入口。

网关的核心功能特性：


	请求路由
	
	
	权限控制
	
	
	限流
	
架构图：



权限控制：网关作为微服务入口，需要校验用户是是否有请求资格，如果没有则进行拦截。

路由和负载均衡：一切请求都必须先经过gateway，但网关不处理业务，而是根据某种规则，把请求转发到某个微服务，这个过程叫做路由。当然路由的目标服务有多个时，还需要做负载均衡。

限流：当请求流量过高时，在网关中按照下流的微服务能够接受的速度来放行]]></description><category></category></item><item><title><![CDATA[feign的使用]]></title><link>https://blog.youkuaiyun.com/bag2016/article/details/124672567</link><guid>https://blog.youkuaiyun.com/bag2016/article/details/124672567</guid><author>bag2016</author><pubDate>Mon, 09 May 2022 18:54:33 +0800</pubDate><description><![CDATA[Feign是一个声明式的http客户端，官方地址：GitHub - OpenFeign/feign: Feign makes writing java http clients easier

其作用就是帮助我们优雅的实现http请求的发送。

Feign替代RestTemplate

1.引入依赖

我们在order-service服务的pom文件中引入feign的依赖：


&lt;dependency&gt;
    &lt;groupId&gt;org.springframework.cloud&l]]></description><category></category></item><item><title><![CDATA[Nacos配置管理]]></title><link>https://blog.youkuaiyun.com/bag2016/article/details/124669600</link><guid>https://blog.youkuaiyun.com/bag2016/article/details/124669600</guid><author>bag2016</author><pubDate>Mon, 09 May 2022 16:50:06 +0800</pubDate><description><![CDATA[统一配置管理



当微服务部署的实例越来越多，达到数十、数百时，逐个修改微服务配置就会让人抓狂，而且很容易出错。我们需要一种统一配置管理方案，可以集中管理所有实例的配置。



Nacos一方面可以将配置集中管理，另一方可以在配置变更时，及时通知微服务，实现配置的热更新。

1.在nacos中添加配置文件



然后在弹出的表单中，填写配置信息：



注意：项目的核心配置，需要热更新的配置才有放到nacos管理的必要。基本不会变更的一些配置还是保存在微服务本地比较好。

2.从微服务拉取配置

微服..]]></description><category></category></item><item><title><![CDATA[Nacos注册中心]]></title><link>https://blog.youkuaiyun.com/bag2016/article/details/124666391</link><guid>https://blog.youkuaiyun.com/bag2016/article/details/124666391</guid><author>bag2016</author><pubDate>Mon, 09 May 2022 15:11:04 +0800</pubDate><description><![CDATA[服务注册到nacos

1.引入依赖

在cloud-demo父工程的pom文件中的&lt;dependencyManagement&gt;中引入SpringCloudAlibaba的依赖：


&lt;dependency&gt;
    &lt;groupId&gt;com.alibaba.cloud&lt;/groupId&gt;
    &lt;artifactId&gt;spring-cloud-alibaba-dependencies&lt;/artifactId&gt;
    &lt;ver]]></description><category></category></item><item><title><![CDATA[Eureka注册中心的使用]]></title><link>https://blog.youkuaiyun.com/bag2016/article/details/124662834</link><guid>https://blog.youkuaiyun.com/bag2016/article/details/124662834</guid><author>bag2016</author><pubDate>Mon, 09 May 2022 11:56:48 +0800</pubDate><description><![CDATA[Eureka的结构和作用



问题1：order-service如何得知user-service实例地址？

获取地址信息的流程如下：


	user-service服务实例启动后，将自己的信息注册到eureka-server（Eureka服务端）。这个叫服务注册
	
	
	eureka-server保存服务名称到服务实例地址列表的映射关系
	
	
	order-service根据服务名称，拉取实例地址列表。这个叫服务发现或服务拉取
	


问题2：order-service如何从多个user-servi]]></description><category></category></item><item><title><![CDATA[Redis缓存穿透，缓存击穿，缓存雪崩]]></title><link>https://blog.youkuaiyun.com/bag2016/article/details/124592342</link><guid>https://blog.youkuaiyun.com/bag2016/article/details/124592342</guid><author>bag2016</author><pubDate>Thu, 05 May 2022 16:50:17 +0800</pubDate><description><![CDATA[缓存穿透



缓存穿透是指查询一个数据库一定不存在的数据。

我们以前正常的使用Redis缓存的流程大致是：

1、数据查询首先进行缓存查询

2、如果数据存在则直接返回缓存数据

3、如果数据不存在，就对数据库进行查询，并把查询到的数据放进缓存

4、如果数据库查询数据为空，则不放进缓存



例如我们的数据表中主键是自增产生的，所有的主键值都大于0。此时如果用户传入的参数为-1，会是怎么样？这个-1，就是一定不存在的对象。程序就会每次都去查询数据库，而每次查询都是空，每次又都不会进行缓存。假如有人恶意]]></description><category></category></item><item><title><![CDATA[MP学习笔记]]></title><link>https://blog.youkuaiyun.com/bag2016/article/details/124400481</link><guid>https://blog.youkuaiyun.com/bag2016/article/details/124400481</guid><author>bag2016</author><pubDate>Mon, 25 Apr 2022 15:40:17 +0800</pubDate><description><![CDATA[字段自动填充

需求描述：

项目中经常会遇到一些数据，每次都使用相同的方式填充，例如记录的creat_time，update_time等。

我们可以使用MyBatis Plus的自动填充功能，完成这些字段的赋值工作

1.在User表中添加datetime类型的新的字段 create_time、update_time

2.实体上增加字段并添加自动填充注解


@TableField(fill = FieldFill.INSERT)
private Date createTime;  //create_]]></description><category></category></item><item><title><![CDATA[ZooKeeper学习笔记]]></title><link>https://blog.youkuaiyun.com/bag2016/article/details/124396748</link><guid>https://blog.youkuaiyun.com/bag2016/article/details/124396748</guid><author>bag2016</author><pubDate>Mon, 25 Apr 2022 09:16:00 +0800</pubDate><description><![CDATA[什么是zk？

Zookeeper 是一个分布式的、开源的分布式应用程序的协调服务。

Zookeeper 提供的主要功能包括：

配置管理

分布式锁

集群管理



Zookeeper 数据模型

ZooKeeper 是一个树形目录服务,其数据模型和Unix的文件系统目录树很类似，拥有一个层次化结构。

这里面的每一个节点都被称为： ZNode，每个节点上都会保存自己的数据和节点信息。 

节点可以拥有子节点，同时也允许少量（1MB）数据存储在该节点之下...]]></description><category></category></item><item><title><![CDATA[nginx入门使用]]></title><link>https://blog.youkuaiyun.com/bag2016/article/details/124332163</link><guid>https://blog.youkuaiyun.com/bag2016/article/details/124332163</guid><author>bag2016</author><pubDate>Thu, 21 Apr 2022 21:32:52 +0800</pubDate><description><![CDATA[部署静态资源

Nginx可以作为静态web服务器来部署静态资源。这里所说的静态资源是指在服务端真实存在，并且能够直接展示的一些文件，比如常见的html页面、css文件、js文件、图片、视频等资源。

相对于Tomcat，Nginx处理静态资源的能力更加高效，所以在生产环境下，一般都会将静态资源部署到Nginx中。

将静态资源部署到Nginx非常简单，只需要将文件复制到Nginx安装目录下的html目录中即可。



反向代理

反向代理服务器位于用户与目标服务器之间，但是对于用户而言，反向代理服务器就相]]></description><category></category></item><item><title><![CDATA[Dubbo学习笔记]]></title><link>https://blog.youkuaiyun.com/bag2016/article/details/124331402</link><guid>https://blog.youkuaiyun.com/bag2016/article/details/124331402</guid><author>bag2016</author><pubDate>Thu, 21 Apr 2022 21:17:25 +0800</pubDate><description><![CDATA[Dubbo概念

•Dubbo是阿里巴巴公司开源的一个高性能、轻量级的 Java RPC 框架。

•致力于提供高性能和透明化的 RPC 远程服务调用方案，以及 SOA 服务治理方案。





Dubbo架构







•Provider：服务提供方

•Container：服务运行容器

•Consumer：服务消费方

•Registry：服务注册与发现的注册中心

•Monitor：统计服务的调用次数和调用时间的监控中心




Zookeeper安装

•Dubbo官方推荐使用Zoo...]]></description><category></category></item><item><title><![CDATA[使用ShardingJDBC实现读写分离]]></title><link>https://blog.youkuaiyun.com/bag2016/article/details/124306165</link><guid>https://blog.youkuaiyun.com/bag2016/article/details/124306165</guid><author>bag2016</author><pubDate>Wed, 20 Apr 2022 20:33:59 +0800</pubDate><description><![CDATA[数据库准备工作

提前准备两台服务器，并且在服务器中安装MySQL，服务器的信息如下：

数据库
			IP
			数据库版本
		Master
			192.168.200.200
			5.7.25
		Slave
			192.168.200.201
			5.7.25
		主库配置

1). 修改Mysql数据库的配置文件/etc/my.cnf

在最下面增加配置:


log-bin=mysql-bin   #[必须]启用二进制日志
server-id=200       #[必须]服务器唯一ID]]></description><category></category></item><item><title><![CDATA[SpringCache框架的使用]]></title><link>https://blog.youkuaiyun.com/bag2016/article/details/124305844</link><guid>https://blog.youkuaiyun.com/bag2016/article/details/124305844</guid><author>bag2016</author><pubDate>Wed, 20 Apr 2022 20:10:05 +0800</pubDate><description><![CDATA[介绍

Spring Cache是一个框架，实现了基于注解的缓存功能，只需要简单地加一个注解，就能实现缓存功能，大大简化我们在业务中操作缓存的代码。

Spring Cache只是提供了一层抽象，底层可以切换不同的cache实现。具体就是通过CacheManager接口来统一不同的缓存技术。CacheManager是Spring提供的各种缓存技术抽象接口。

针对不同的缓存技术需要实现不同的CacheManager：

CacheManager
			描述
		EhCacheCacheManager
			]]></description><category></category></item><item><title><![CDATA[Redis中的数据类型]]></title><link>https://blog.youkuaiyun.com/bag2016/article/details/124258698</link><guid>https://blog.youkuaiyun.com/bag2016/article/details/124258698</guid><author>bag2016</author><pubDate>Mon, 18 Apr 2022 20:46:51 +0800</pubDate><description><![CDATA[Redis存储的是key-value结构的数据，其中key是字符串类型，value有5种常用的数据类型：

字符串(string)：普通字符串，常用

哈希(hash)：适合存储对象

列表(list)：按照插入顺序排序，可以有重复元素

集合(set)：无序集合，没有重复元素

有序集合(sorted set / zset)：集合中每个元素关联一个分数（score），根据分数升序排序，没有重复元素



字符串string...]]></description><category></category></item><item><title><![CDATA[Linux常用操作]]></title><link>https://blog.youkuaiyun.com/bag2016/article/details/124250714</link><guid>https://blog.youkuaiyun.com/bag2016/article/details/124250714</guid><author>bag2016</author><pubDate>Mon, 18 Apr 2022 15:48:04 +0800</pubDate><description><![CDATA[Linux目录结构

Linux系统中的目录有以下特点：

A. / 是所有目录的顶点

B. 目录结构像一棵倒挂的树

Linux常用命令

常用命令演示

在这一部分中，我们主要介绍几个常用的命令，让大家快速感受以下Linux指令的操作方式。主要包含以下几个指令：



在执行Linux命令时，提示信息如果显示为乱码，如上图所示。这是由于编码问题导致，只需要修改Linux的编码即可，命令如下：

echo 'LANG="en_US.UTF-8"' &gt;&gt; /etc/profile

sourc]]></description><category></category></item><item><title><![CDATA[Git常用操作]]></title><link>https://blog.youkuaiyun.com/bag2016/article/details/124220817</link><guid>https://blog.youkuaiyun.com/bag2016/article/details/124220817</guid><author>bag2016</author><pubDate>Sat, 16 Apr 2022 21:49:20 +0800</pubDate><description><![CDATA[什么是Git

Git 是一个分布式版本控制工具，通常用来对软件开发过程中的源代码文件进行管理。通过Git 仓库来存储和管理这些文件，Git 仓库分为两种：


	本地仓库：开发人员自己电脑上的 Git 仓库
	
	
	远程仓库：远程服务器上的 Git 仓库

	
	
使用Git能做什么


	代码回溯：Git在管理文件过程中会记录日志，方便回退到历史版本
	
	
	版本切换：Git存在分支的概念，一个项目可以有多个分支（版本），可以任意切换
	
	
	多人协作：Git支持多人协作，即一个团队共同开发一个.]]></description><category></category></item><item><title><![CDATA[mysql读写分离]]></title><link>https://blog.youkuaiyun.com/bag2016/article/details/123925569</link><guid>https://blog.youkuaiyun.com/bag2016/article/details/123925569</guid><author>bag2016</author><pubDate>Sat, 02 Apr 2022 17:55:55 +0800</pubDate><description><![CDATA[什么是读写分离？

读写分离,简单地说是把对数据库的读和写操作分开,以对应不同的数据库服务器。主数据库提供写操作，从数据库提供读操作，这样能有效地减轻单台数据库的压力。





一主一从



MyCat控制后台数据库的读写分离和负载均衡由schema.xml文件datahost标签的balance属性控
制。

schema.xml配置：



负责均衡的参数balance，取值有4种，具体含义如下：



在一主一从模式的读写分离中，balance配置1或3都是可以完成读写分离的。

server..]]></description><category></category></item><item><title><![CDATA[mysql主从复制]]></title><link>https://blog.youkuaiyun.com/bag2016/article/details/123907475</link><guid>https://blog.youkuaiyun.com/bag2016/article/details/123907475</guid><author>bag2016</author><pubDate>Fri, 01 Apr 2022 21:01:28 +0800</pubDate><description><![CDATA[概述

主从复制是指将主数据库的DDL和DML 操作通过二进制日志传到从库服务器中，然后在从库上对这些日志重新执行（也叫重做），从而使得从库和主库的数据保持同步。
MySQL支持一台主库同时向多台从库进行复制，从库同时也可以作为其他从服务器的主库，实现链状复制。

MySQL主从复制的优点主要包含以下三个方面：
1.主库出现问题，可以快速切换到从库提供服务。
2.实现读写分离，降低主库的访问压力。
3.可以在从库中执行备份，以避免备份期间影响主库服务。

原理

MySQL主从复制的核心就是二进制日志，具.]]></description><category></category></item></channel></rss>