- 博客(56)
- 收藏
- 关注
原创 Java访问redis方案
Spring Data Redis 是一个基于Spring框架的 Redis 的访问库,Spring Data中提供了对多个 NoSQL 数据库的访问支持,使得开发者可以通过Spring统一的方式来访问这些数据库,节省了对数据库不同访问方式的学习成本。Jedis:是Redis的Java客户端之一,可以通过Jedis访问 Redis 实例,支持 Redis 的所有操作。1、对Redis的访问操作的封装:包括对 Redis 的常见数据类型和命令的支持,支持 Redis 的哨兵、集群和管道等特性。
2023-10-17 11:29:06
222
原创 Redis的数据类型
7、LREM key count value:从 key 对应的列表中删除value元素,count表示删除的个数,当 count > 0 时,从头到尾删除递归 value 值,count < 0 时,则从尾到头删除递归value值,count = 0 是删除所有递归等于 value 值的元素。String类型支持对字符串的读写操作,同时Redis的String类型还支持对字符串进行一些特殊的操作,如:追加字符串、截取子串、在字符串某一位置插入字符等,支持多种不同的数据编码格式。1、存储不重复的元素。
2023-10-17 11:28:26
165
原创 Redis数据有效期
这些键应该被主动过期,因此 Redis 会主动定期随机检查已设置过期时间的一些键,所有检查到的已过期的键都将从键空间中删除。在 Redis 中,数据有效期(也称为过期时间)是一个重要的概念,它允许你为存储在 Redis 数据库中的键值对设置一个指定的存活时间,使键值对在一段时间后自动过期并从数据库中删除。这是一个简单的概率算法,基本假设是我们的样本代表了整个键空间,并且我们继续过期操作,直到可能已过期的键的百分比低于 25%。Redis 中的键的过期策略有两种:一种是被动过期,另一种是主动过期。
2023-10-17 11:27:06
3581
原创 Redis数据库
5、丰富的应用接口:Redis提供了丰富的应用接口,支持多种语言开发,如Java、Python、Ruby等,还支持多种功能扩展插件,例如全文搜索、JSON格式化等。2、多种数据结构支持:Redis支持多种数据结构,包括字符串、哈希、列表、集合和有序集合等,方便开发者根据不同需求进行数据存储和处理。1、内存存储:Redis采用内存存储数据,性能非常高,在读写性能上几乎可以达到内存性能的极限,支持高并发的读写操作和快速的数据处理。
2023-10-17 10:40:01
120
原创 缓存数据库
缓存数据库是一种专用于存储高速缓存数据的数据库,其主要作用是缓存应用程序所请求的数据,以加速数据访问和处理速度,从而提高应用程序的性能和吞吐量。1、Web应用程序:缓存数据库经常用于Web应用程序中,通过缓存Web页面、数据库查询结果、会话数据和其他用户状态信息。5、传媒和广告:在传媒和广告领域,缓存数据库用于存储和管理广告位、广告素材数据,以及采用机器学习算法选择和推荐广告。3、游戏:在线游戏领域,缓存数据库用于对游戏状态、游戏信息、玩家数据和GPU资源进行缓存。
2023-10-17 10:36:38
299
原创 NoSQL数据库
NoSQL的设计理念是在满足大规模数据存储和高并发读写的需求下,同时提供更高的数据灵活度,简化数据模型,提高数据读写性能和可扩展性。3、列族数据库:它采用列族的方式存储数据,支持快速的分布式存储和查询操作,例如HBase和Cassandra等。4、图形数据库:它采用图的方式存储数据,适合存储数据之间复杂且多层次的关系,例如Neo4j和OrientDB等。1、键值存储:它以键值对的形式存储数据,适用于快速读写等操作,例如Redis和Memcached等。
2023-10-17 10:35:29
68
原创 微服务架构
1、基于服务的分布式架构:微服务架构将应用程序拆分成多个服务,每个服务负责一个小部分功能,服务之间通过轻量级的通信机制进行交互。3、强调自治性:微服务应该是自治的,也就是说,每个服务应该可以独立运行、管理和维护,不需要依赖其他服务或中央控制器。2、可独立部署:每个微服务都是一个独立的部署单元,可以独立构建、测试和部署,避免了整个应用程序的重构和重新部署。4、强调容错性:微服务架构通过重试、容错和回滚等机制来应对故障和异常,提高服务的稳定性和健壮性。
2023-10-17 09:06:38
139
原创 docker网络
1、虚拟化技术(Virtualization)是一种在单一的硬件平台上运行多个独立操作系统或应用程序的技术。全虚拟化半虚拟化容器化2、容器化技术(Containerization)是一种操作系统级别或应用程序级别的虚拟化技术,它通过隔离操作系统层面的资源,将应用程序打包成一个独立的可运行的容器,使得应用程序在不同的计算环境中能够稳定、高效地运行。3、Docker是一个开源的容器化平台,允许开发人员将应用程序及其所有依赖项打包到一个轻量、可移植的容器中,然后在不同的环境中部署和运行这些容器。
2023-10-13 09:10:21
62
原创 dockerfile指令
3、加快镜像构建:在构建时,Docker 可以轻松地缓存已经存在的层,当下次构建时,只需要重复利用已有的层即可,快速进行增量式更新。2、空间利用率高:同样大小的源码只需要存储一次,以后每个基础镜像只需要存储在它前一个基础镜像之上的那一层的数据即可。4、更好的镜像交付:分层的机制使得将一个完整的应用程序打包成一个镜像更加容易,不同样层可以用于不同的应用场景。在 Dockerfile 中,必须从一个已有的镜像构建所需的镜像。1、易于更新和维护:只需更新需改的一层即可,其他层可以不变,避免了不必要的构建和复制。
2023-10-13 09:08:35
55
原创 docker数据卷的管理
例如:docker run -v /host/folder:/container/folder my-image可以将主机上的/host/folder目录挂载到容器中的/container/folder路径。要创建这些卷,您可以使用docker run命令的--rm选项或在docker create命令中指定--rm选项。然后,使用如下命令创建Tomcat容器,并将宿主机的/opt/html文件夹挂载到Tomcat容器的/usr/local/tomcat/webapps/ROOT文件夹。
2023-10-13 09:05:44
94
原创 docker容器管理
Docker 提供了丰富的命令,用于管理容器的创建、启动、停止、删除、暂停、恢复等操作。1、随机端口映射:在启动容器时可以使用-P命令配置随机端口映射,Docker会随机映射一个49000~49900的端口到内部容器开放的网络端口。3、docker run 命令:可以在创建一个新的容器时启动交互终端,但是退出交互终端默认会关闭容器,需要使用特殊的命令退出才行。此时docker ps无法查询到容器信息。docker run 命令是 Docker 最重要的命令之一,用于创建并启动一个新的 Docker 容器。
2023-10-13 09:03:14
40
原创 docker镜像和容器
3、创建镜像:在Docker中创建镜像可以使用Dockerfile(后面讲)定义镜像构建规则,然后使用Docker build命令构建镜像。也可以使用Docker commit命令从正在运行的容器中创建镜像。docker load 是 Docker CLI 中的一个命令,用于从一个 tar 存档文件中加载一个或多个 Docker 镜像和它们的依赖层(如果存在)。1、搜索并拉取镜像:可以使用docker search命令搜索镜像仓库中的镜像信息,然后使用docker pull命令从镜像仓库拉取镜像到本地。
2023-10-13 09:00:44
60
原创 Docker
使用Docker可以显著简化应用程序的开发、测试、部署、维护和升级过程,帮助开发人员更快地交付应用程序,提高软件开发的效率和质量。镜像包含了用于运行应用程序所需的所有操作系统、库、设置及应用程序本身等组件,可以使用Dockerfile或从Docker Hub获取构建。2、可移植性:Docker容器提供了一个一致的运行环境,使得容器可以在不同的平台和环境中移植和部署,因为容器中已经包含了应用程序及其依赖的所有组件。3、灵活性:Docker提供了许多构建和管理容器的工具,使得容器构建和部署更加灵活。
2023-10-13 08:56:00
36
原创 【面试题】介绍一下@Autowired的Bean匹配机制
Autowired的Bean匹配机制是指在执行依赖注入之前,Spring容器会根据被注入字段、方法参数的类型来查找匹配的 Bean。3、如果类型匹配的实例有多个,且无法选出唯一的,则转为根据Bean的名称匹配。
2023-09-14 09:24:34
169
原创 【面试题】为什么Spring不建议使用字段注入
2、可能导致空指针异常:一个Bean的初始顺序为静态变量或静态代码块 > 实例变量或初始化语句块 > 构造方法 > 字段注入。字段注入会使得测试类无法直接通过构造器或方法注入模拟对象,从而增加了测试的复杂性。1、Spring框架支持三种主要的注入方式:字段注入、构造器注入、setter方法注入。其中,字段注入是指在类的字段上添加注解来注入依赖。4、无法注入 final 字段: 字段注入无法用于注入 final 字段,这会限制一些设计和测试的可能性。
2023-09-14 09:23:54
956
原创 依赖注入进阶(【面试题】请介绍一下Spring支持的依赖注入方式)
3、setter方法注入(Setter Injection):通过类的setter方法来注入依赖。2、构造器注入(Constructor Injection):通过类的构造方法来注入依赖。1、字段注入(Field Injection):通过直接在类的字段上添加注解来注入依赖。Spring框架主要支持三种注入方式:字段注入、构造器注入、setter方法注入。
2023-09-14 09:23:19
66
原创 Bean的作用域
可以通过@Scope注解来设置Bean的作用域,该注解可以添加在类前(与@Component注解搭配使用),也可以添加在方法前(与@Bean注解搭配使用)。Bean的作用域概述。Bean的作用域示例。
2023-09-14 09:22:31
103
原创 Spring IoC获取对象的方式
3、context.getBean(String name, Class<T> requiredType):根据Bean名称和类型获取Bean。4、context.getBeansOfType(Class<T> type):根据类型获取容器中所有实现该类型的Bean。1、context.getBean(Class<T> requiredType):根据类型获取Bean。2、context.getBean(String name):根据名称获取Bean。【案例】IoC获取对象示例。
2023-09-14 09:21:49
441
原创 【面试题】Spring框架中@Bean 和 @Component 的区别
在Spring框架中,@Bean注解和@Component注解均用于定义Bean,但是添加的位置和应用的场景不同。2、@Component注解主要用于在类前隐式的配置Bean。1、@Bean注解主要用于在配置类中显式配置Bean。3、实际应用中,通常是两种方式混合使用。
2023-09-14 09:21:12
93
原创 Spring IoC进阶
在Spring 中定义Bean的方式主要有三种:1、基于XML配置文件的方式(了解):通常会在配置文件中使用<bean>标签来定义Bean,并设置Bean的属性、依赖关系等信息。2、基于注解的方式:在Java代码中使用注解来标识Bean,并指定Bean的属性、依赖关系等信息。常用的注解有@Component、@Controller、@Service等。@Component用于标识一个普通的 Bean 类,没有任何特殊的业务含义。
2023-09-14 09:20:31
44
原创 Spring DI入门
DI是Dependency Injection的缩写,即依赖注入,是一项使一个对象接收到它所依赖的其他对象的技术。在统一建模语言 (UML) 中,依赖(Dependency)是一种关系,表明一个元素或一组元素需要其他模型元素来进行规范或实现。DI是Spring框架实现控制反转(IoC)的一种方式,被反转的是一个对象获取其依赖对象的流程。Spring框架提供了一种基于注解的、声明式的依赖注入方式,称为 Spring DI。在 Spring 框架中,依赖注入通常通过注解或 XML 配置文件实现。
2023-09-14 09:18:29
45
原创 Spring IoC
它实现了IoC的概念,通过将对象的创建、依赖注入和销毁等任务从应用程序代码中转移到容器中,以实现更松耦合、可维护和可测试的应用程序。总的来说,Spring IoC通过将控制权从应用程序代码中转移到容器中,带来了更好的可维护性、灵活性和重用性,有助于构建高质量、可扩展和易于维护的应用程序。基于Spring框架,开发者可以将类交给Spring框架管理,由Spring框架负责创建类的对象,并在开发者需要时提供给开发者。在不使用Spring框架的情况下,程序中需要使用某个类的对象时,需要手动创建该对象,如下所示。
2023-09-14 09:16:28
44
原创 linux中vim指令
4、在普通模式下,输入冒号 “:”,出现冒号后面的光标,此时进入了命令行模式(Command Line Mode),可以输入命令进行保存、退出以及其他操作。1、在终端中打开vim,输入命令 vim 文件名 ,例如 vim example.txt,此时进入了普通模式(Normal Mode)。3、文件编辑完后,按下 Esc 键退出插入模式,返回普通模式(Normal Mode)。6、退出vim,输入 q 命令,例如 :q ,表示退出vim。5、保存文件,输入 w 命令,例如 :w ,表示保存文件。
2023-09-12 20:36:05
176
原创 linux常用标签
如果存在多余的文件或者目录,就可以利用删除命令删除它们。请在使用 rm 命令时注意,它是一个非常危险的命令,因为它会永久地删除文件和目录,而不会进入回收站。注意:如果你使用 cp 命令复制时,目标目录如果存在的话,复制的源目录会被复制到目标目录中,而不是将源目录复制到目标目录中。在 Linux 中,你可以使用 cp 命令复制文件和文件夹。上面的命令将整个 source 目录复制到bak目录中,-r 选项代表递归复制整个目录。如果希望得到两个完全一样的文件或者目录,就可使用复制命令。文件/目录复制命令cp。
2023-09-12 20:35:10
92
原创 linux常用标签
在Linux中,可以使用mkdir命令来创建新目录。mkdir是make directory的缩写,用于创建新的目录。上述命令就是在当前目录下创建一个名为new_directory且包含子目录sub_directory的目录树结构。上述命令就是在当前目录下创建一个名为new_directory的新目录。需要注意的是,创建目录时需要有足够的权限,否则操作会被拒绝。文件系统中有系统的默认目录结构,我们也可以创建新的目录。创建目录命令mkdir。
2023-09-12 20:33:24
66
原创 线程和集合
如果需要在多线程环境下使用集合,可以考虑使用线程安全的集合类,如Vector或使用带同步机制的Collections工具类方法来处理。但是,由于同步带来的开销,现代Java更推荐使用其他线程安全的集合类或使用显式的同步控制。创建一个可缓存的线程池,此线程池不会对线程池大小做限制,线程池大小完全依赖于操作系统(或者说JVM)能够创建的最大线程大小。创建固定大小的线程池,每次提交一个任务就创建一个线程,直到线程达到线程池的最大大小。创建一个单线程的线程池,此线程池保证所有任务的执行顺序按照任务的提交顺序执行。
2023-08-17 19:05:46
30
原创 集合类的说法
ArrayList是非线程安全的,它在多线程环境下不具备同步机制,因此不适合在多线程环境中使用。如果需要在多线程环境下使用集合,可以考虑使用线程安全的集合类,如Vector或使用带同步机制的Collections工具类方法来处理。Vector是一个线程安全的集合类,它使用同步机制来保证在多线程环境中的线程安全性。但是,由于同步带来的开销,现代Java更推荐使用其他线程安全的集合类或使用显式的同步控制。例如,HashSet和TreeSet都是Set的实现类,它们都保证了集合中的元素唯一性。
2023-08-17 15:48:56
34
原创 线程中的关键字
当一个代码块或方法被synchronized修饰时,只有一个线程可以进入这个代码块或方法,其他线程需要等待。这可以防止多个线程同时访问共享资源,从而保证数据的一致性和可靠性。:当一个变量被声明为volatile时,它告诉编译器和运行时环境,这个变量可能会被多个线程同时修改,因此不应该进行一些优化,确保对该变量的读写操作都是直接从主内存中进行的,而不是从线程的本地缓存中读取。在Java中,volatile和synchronized是用于保证线程之间共享变量的可见性和同步性的两个关键字。
2023-08-17 14:19:43
144
原创 Stringjoiner和Stringbuilder的用法
“StringJoiner”专门设计用于连接带有分隔符,前缀和后缀的元素以创建结构化字符串,而“StringBuilder”是用于高效字符串操作的更通用的类。- 当您有一个元素集合并希望创建分隔字符串表示形式时,“StringJoiner”很有用,而“StringBuilder”更适合动态构建和修改字符串,而无需创建多个中间字符串实例。
2023-08-15 12:41:36
40
原创 读取文件数据中的跳过表头和指定的地方的方法
接下来的部分(被注释为 "在这里执行接下来的逻辑,处理 tempStr 的值")是未提供的代码,但根据代码的结构,它可能会进一步处理。//将字符串line的24~29的字符序列并去掉该字符序列开头和结尾的空白字符,在保留在tempStr中。总之,这段代码可能是在处理文本数据,跳过表头,提取某些数值,并根据特定条件对数据进行过滤或处理。如果是,说明这个数值是一个特殊值,代码会通过。跳过当前循环的剩余部分,进入下一次循环,即跳过表头的处理。跳过当前循环的剩余部分,即跳过处理这个特殊值的逻辑。
2023-08-14 20:44:34
588
原创 线程池的运用
它允许你提交任务(Runnable 或 Callable 对象),然后由线程池中的线程来执行这些任务。对象来提交任务,然后线程池会负责分配这些任务给其中的线程进行执行。类中的一个方法,它创建一个固定大小的线程池,该线程池中有 5 个线程。这行代码是使用 Java 中的 Executor 框架来创建一个固定大小的线程池。是一个用于管理线程池的对象,它可以用于提交任务、管理线程池的状态等操作。通过这行代码,你创建了一个固定大小为 5 的线程池,可以通过。是一个工厂类,提供了创建不同类型的线程池的静态方法。
2023-08-14 20:39:35
33
原创 Callable接口和Future对象的列子
方法来获取每个任务的执行结果。这种方式允许你同时执行多个任务,并在需要时获取它们的结果。作为参数,并将这个列表中的所有任务提交给线程池并同时执行。提交给线程池进行并发执行,然后将每个任务的执行结果(综上所述,这行代码的目的是将一个包含了多个。任务列表,并将它们的执行结果保存在。对象代表了一个任务的执行结果。方法获取任务的执行结果,这里是一个。声明了一个列表,该列表中的元素是。接口中的一个方法,它接受一个。方法返回一个列表,其中的每个。这行代码用于同时执行一个。类型的结果,即浮点数。对象,用于管理线程池。
2023-08-14 20:38:41
57
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人