Redis高级篇及最佳实践
案例参考:黑马程序员
一.分布式缓存– 基于Redis集群解决单机Redis存在的问题
单机的Redis存在四大问题:
1.Redis持久化Redis持久化分为两种
RDB持久化
AOF持久化
1.1 RDB持久化RDB全称Redis Database Backup file(Redis数据备份文件),也就是快照,把内存中的所有数据存到磁盘上。故障修复后,读取磁盘文件恢复数据。快照文件为RDB文件,默认存在当前目录。
1.1.1 什么时候执行RDB有四种情况会执行RDB
执行save命令
执行bgsave命令
redis手动关机
触发执行RDB条件
save命令
执行下面的命令,可以立即执行一次RDB:
save命令会导致主进程执行RDB,这个过程中其它所有命令都会被阻塞。只有在数据迁移时可能用到。
bgsave命令
下面的命令可以异步执行RDB:
这个命令执行后会开启独立进程完成RDB,主进程可以持续处理用户请求,不受影响。
手动停机redis
触发执行RDB条件
Redis内部有触发RDB的机制,可以在redis.conf文件中找到,格式如下:
12 ...
IDEA复制实例开启多个服务
1.找到IDEA下的Services并点开
1.1 没有Services点击View->Tool Windows->Services
2.点击+号选择Run Configuration Type
3.选择Spring Boot
这时你就可以看到你的项目了
接下来我们需要复制该实例并且改变端口启动
4.右键选择Copy Configuration
5.在对应位置修改名字和端口
-Dserver.port=xxxx
6.确认后就可以看到有两个实例了
7.启动一个运行在8080
一个运行在8081
Java8新特性
一.Java8新特性
1.Java8新特性的好处
速度更快
代码更少(增加了新的语法:Lambda 表达式)
强大的Stream API
便于并行
最大化减少空指针异常:Optional
Nashorn引擎,允许在JVM上运行JS应用
2.并行流与串行流并行流就是把一个内容分成多个数据块,并用不同的线程分别处理每个数据块的流。相比较串行的流,并行的流可以很大程度上提高程序的执行效率。Java 8 中将并行进行了优化,我们可以很容易的对数据进行并行操作。Stream API 可以声明性地通过parallel() 与sequential() 在并行流与顺序流之间进行切换。
二.Lambda表达式Lambda 是一个匿名函数,我们可以把Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。使用它可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。
1.Lambda表达式的使用
举例: (o1,o2) -> Integer.compare(o1,o2);
格式:
-> : lambda操作符 或 箭头操作符
-&g ...
Docker基础篇
尚硅谷2022版Docker实战教程官方课程资料:https://pan.baidu.com/s/1AyYbnDRoD-m2xBPvfvjh7Q?pwd=8gfh提取码:8gfh
一.Docker简介与安装Docker 两个主要部件:
Docker: 开源的容器虚拟化平台:http://www.docker.com
Docker Hub: 用于分享、管理 Docker 容器的 Docker SaaS 平台 – Docker Hub
Docker为什么出现?
解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。
1. Docker 基本组成Docker 镜像Docker 镜像是 Docker 容器运行时的只读模板,每一个镜像由一系列的层 (layers) 组成。相当于容器的“源代码”,docker镜像文件类似于Java的类模板,而docker容器实例类似于java中new出来的实例对象。
Docker 仓库Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。
Docker 容器Docker 容器和文件夹很类似,一个Docker容器包含了 ...
Redis的Java客户端
目前我了解到的有以下4种。
Spring-Data-Redis:https://spring.io/projects/spring-data-redis
Jedis:https://github.com/redis/jedis/wiki
Lettuce:https://lettuce.io/ ,这里不做介绍,太高级了,估计hold不住。
Redisson :https://github.com/redisson/redisson/wiki
Spring Data Redis1.介绍 SpringData是Spring中数据操作的模块,包含对各种数据库的集成,相当于定义了一些如增删改查的抽象接口,继而有对应不同数据库的实现。
Spring Data JDBC
Spring Data JPA
Spring Data MongoDB
Spring Data Redis
。。。
其中对redis集成模块就叫做Spring Data Redis。
提供了对不同Redis客户端的整合(Lettuce和Jedis)
提供了RedisTemplate统一API来操作Redis
...
Redis基础实战
一.Redis入门1.初识RedisRedis 是一种键值型的NoSql数据库。
键值型:是指Redis中存储的数据都是以key、value对的形式存储,而value的形式多种多样,可以是字符串、数值、甚至json
1.1 认识NoSQL1.1.1 什么是NoSQL
NoSQL最常见的解释是”non-relational“, 很多人也说它是”Not Only SQL“
NoSQL仅仅是一个概念,泛指非关系型的数据库
区别于关系数据库,它们不保证关系数据的ACID特性
NoSQL是一项全新的数据库革命性运动,提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入
常见的NoSQL数据库有:Redis、MemCache、MongoDB等
1.1.2 NoSQL与SQL的差异
SQL
NoSQL
数据结构
结构化
非结构化
数据关联
关联的
无关联的
查询方式
SQL查询
非SQL
事务特性
ACID
BASE
存储方式
磁盘
内存
扩展性
垂直
水平
使用场景
1)数据结构固定
1)数据结构不固定 ...
微服务技术栈
写代码步骤
建Module
改pom
写yml
主启动
Spring Cloud一.初识微服务1. 三种架构单体架构将业务的所有功能集中在一个项目中开发,打成一个包部署。优点:架构简单,部署成本低缺点:耦合度高(维护困难、升级困难),牵一发而动全身
分布式架构根据业务功能对系统做拆分,每个业务功能模块作为独立项目开发,称为一个服务。优点:降低服务耦合,有利于服务升级和拓展缺点:服务调用关系错综复杂分布式架构虽然降低了服务之间的耦合,但是服务拆分的时候也需要考虑很多问题:
服务拆分的粒度如何界定?
服务之间如何调用?
服务的调用关系如何管理?
人们需要制定一套行之有效的标准来约束分布式架构
微服务架构微服务架构特征:
单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责
自治:团队独立、技术独立、数据独立、独立部署和交付
面向服务:服务提供统一标准的接口,与语言和技术无关
隔离性强:服务调用做好隔离、容错、降级、避免出现级联问题
微服务的上述特性其实是在给分布式架构制定一个标准,进一步降低服务之间的耦合度,提供服务的独立性和灵活性。做到高内聚,低耦合。 ...
JVM-内存及垃圾回收
类加载子系统类加载子系统一
类加载子系统作用
负责从文件系统或者网络中加载Class文件,Class文件开头有特定标识(cafebabe)
Classloader只负责class文件的加载,至于是否可运行,则有执行引擎决定
加载的类信息存放于称为方法区的内存空间,除了类信息,方法区还会存放运行时常量池信息,还可能包括字符串字面量和数字常量。(常量池运行时加载到内存中,即运行时常量池)
类加载器ClassLoader的角色
1.class file 存在与本地硬盘上。可以理解为设计师画在之上的模板,而最终这个模板在执行的时候是要加载到JVM当中来,根据这个文件实例化出n个一模一样的实例。
2.class file 加载带JVM中,被称为DNA元数据模块,放在方法区。
3.在 .class 文件 –> JVM –> 最终成为元数据模板,此过程就要一个运输工具(类装载器 Class Loader),扮演一个快递员的角色。
类的加载过程
一.加载
通过一个类的全限定名获取定义此类的二进制字节流
将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。
在内存中生成一 ...