Memcached 介绍与详解及在Java Spring Boot项目中的使用与集成
Memcached 介绍
Memcached 是一种高性能的分布式内存对象缓存系统,主要用于加速动态Web应用以减少数据库负载,从而提高访问速度和性能。作为一个开源项目,Memcached 被广泛应用于许多大型互联网公司,如Facebook、Twitter 和 YouTube 等。Memcached 通过将数据存储在内存中,并使用高效的哈希算法来进行数据存取,提供了极高的读写性能。
基本概念
Memcached 是一个基于内存的分布式缓存系统,它使用键值对(key-value)的方式存储数据。每个键(key)唯一标识一条数据,值(value)可以是任意类型的数据。Memcached 通过哈希函数将键映射到内存中的特定位置,从而实现快速的数据存取。在分布式环境中,Memcached 使用一致性哈希算法将数据分布到不同的缓存服务器上,以确保系统的高可用性和可扩展性。
主要特性
- 高性能:Memcached 通过将数据存储在内存中,提供了极高的读写性能。
- 分布式:支持水平扩展,可以轻松扩展到多个服务器,满足大规模分布式缓存需求。
- 简单易用:提供了简单的API,支持多种编程语言(如C、Python、Java、PHP等),便于开发者集成。
- 开放源码:作为一个开源项目,Memcached 的源代码可以自由获取和修改,便于定制和扩展。
工作原理
Memcached 的工作原理非常简单但高效。当应用需要访问某个数据时,首先检查Memcached中是否存在该数据,如果存在则直接返回,从而提高了数据的读取速度;如果不存在,则从数据库或其他存储系统中获取数据,并将该数据存储到Memcached中,以便下次访问时可以直接从缓存中获取。Memcached 还支持设置缓存项的过期时间,到期后缓存项会自动删除。
应用场景
Memcached 广泛应用于以下场景:
- Web缓存:在高流量网站中,缓存数据库查询结果、页面片段、会话数据等,显著提高响应速度,减轻数据库压力。
- 临时数据存储:用于存储一些临时性的数据,如验证码、临时会话信息等,避免频繁访问数据库。
- 分布式系统:在分布式系统中,Memcached 用作分布式缓存,提高数据访问速度和系统的可扩展性。
- API响应缓存:缓存API的响应结果,减少API服务器的负载,提高整体系统的吞吐量。
在Java Spring Boot项目中的使用与集成
准备工作
在开始之前,请确保你的开发环境已经配置好JDK 8及以上版本、Maven作为项目构建工具以及Spring Boot框架。同时,确保可以访问到Memcached服务器。
集成步骤
1. 添加Memcached依赖
首先,在你的Spring Boot项目的pom.xml文件中添加Memcached客户端的依赖。以下示例使用的是spymemcached客户端:
<dependency> <groupId>net.spy</groupId> <artifactId>spymemcached</artifactId> <version>2.12.0</version>
</dependency>
2. 配置Memcached连接
在application.properties或application.yml中添加Memcached的连接配置。例如,在application.properties中添加:
memcached.servers=localhost:11211
3. 创建配置类
创建一个配置类来配置Memcached客户端的连接工厂和操作模板。以下是一个简单的配置类示例:
package com.example.config; import net.spy.memcached.MemcachedClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.io.IOException;
import java.net.InetSocketAddress; @Configuration
public class MemcachedConfig { @Bean public MemcachedClient memcachedClient() throws IOException { return new MemcachedClient(new InetSocketAddress("localhost", 11211)); }
}
4. 使用Memcached操作数据
创建一个服务类来演示如何使用Memcached进行数据缓存操作。以下是一个简单的服务类示例:
package com.example.service; import com.example.config.MemcachedConfig;
import net.spy.memcached.MemcachedClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.concurrent.ExecutionException; @Service
public class CacheService { @Autowired private MemcachedClient memcachedClient; public void addToCache(String key, int expiration, Object value) throws ExecutionException, InterruptedException { memcachedClient.set(key, expiration, value); } public Object getFromCache(String key) throws ExecutionException, InterruptedException { return memcachedClient.get(key); } public void deleteFromCache(String key) { memcachedClient.delete(key); }
}
5. 在控制器或业务逻辑中使用
现在,你可以在你的控制器或业务逻辑中注入CacheService,并使用它来进行数据的缓存和检索操作。以下是一个简单的控制器示例:
package com.example.controller; import com.example.service.CacheService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import java.util.concurrent.ExecutionException; @RestController
@RequestMapping("/api/cache")
public class CacheController { @Autowired private CacheService cacheService; @GetMapping("/set") public String setCache(@RequestParam String key, @RequestParam String value, @RequestParam int expiration) { try { cacheService.addToCache(key, expiration, value); return "Cache set successfully!"; } catch (ExecutionException | InterruptedException e) { return "Error setting cache: " + e.getMessage(); } } @GetMapping("/get") public String getCache(@RequestParam String key) { try { Object value = cacheService.getFromCache(key); return "Cache value: " + (value != null ? value.toString() : "null"); } catch (ExecutionException | InterruptedException e) { return "Error getting cache: " + e.getMessage(); } } @GetMapping("/delete") public String deleteCache(@RequestParam String key) { cacheService.deleteFromCache(key); return "Cache deleted successfully!"; }
}
6. 测试
启动你的Spring Boot应用,并使用Postman、Curl或任何HTTP客户端工具来测试你的缓存API。例如,你可以通过发送GET请求到/api/cache/set来设置缓存,然后通过/api/cache/get来获取缓存的值,最后通过/api/cache/delete来删除缓存。
注意事项
- 确保Memcached服务器已经启动并可在配置的地址和端口上访问。
- 考虑到缓存的一致性和过期时间,确保你的应用逻辑能够正确处理缓存未命中(即缓存中不存在所需数据)的情况。
- 在生产环境中,你可能需要配置多个Memcached服务器以提供高可用性和负载均衡。此时,你可能需要使用更复杂的连接池或客户端库来管理多个连接。
- 考虑到内存限制,确保你的缓存策略不会导致Memcached服务器内存溢出。
通过以上步骤,你可以在Java Spring Boot项目中成功集成和使用Memcached作为缓存解决方案。
相关文章:
Memcached 介绍与详解及在Java Spring Boot项目中的使用与集成
Memcached 介绍 Memcached 是一种高性能的分布式内存对象缓存系统,主要用于加速动态Web应用以减少数据库负载,从而提高访问速度和性能。作为一个开源项目,Memcached 被广泛应用于许多大型互联网公司,如Facebook、Twitter 和 YouT…...
淮北在选择SCADA系统时,哪些因素会影响其稳定性?
关键字:LP-SCADA系统, 传感器可视化, 设备可视化, 独立SPC系统, 智能仪表系统,SPC可视化,独立SPC系统 在选择SCADA系统时,稳定性是一个关键因素,因为它直接影响到生产过程的连续性和安全性。以下是一些影响SCADA系统稳定性的因素: 硬件质量…...
Linux: 命令行参数和环境变量究竟是什么?
Linux: 命令行参数和环境变量究竟是什么? 一、命令行参数1.1 main函数参数意义1.2 命令行参数概念1.3 命令行参数实例 二、环境变量2.1 环境变量概念2.2 环境变量:PATH2.2.1 如何查看PATH中的内容2.2.2 如何让自己的可执行文件不带路径运行 2.3 环境变量…...
数学系C++ 类与对象 STL(九)
目录 目录 面向对象:py,c艹,Java都是,但c是面向过程 特征: 对象 内敛成员函数【是啥】: 构造函数和析构函数 构造函数 复制构造函数/拷贝构造函数: 【……】 实参与形参的传递方式:值…...
CSS技巧专栏:一日一例 2.纯CSS实现 多彩边框按钮特效
大家好,今天是 CSS技巧一日一例 专栏的第二篇《纯CSS实现多彩边框按钮特效》 先看图: 开工前的准备工作 正如昨日所讲,为了案例的表现,也处于书写的习惯,在今天的案例开工前,先把昨天的准备工作重做一遍。 清除浏览器的默认样式定义页面基本颜色设定body的样式清除butt…...
JCEF 在idea 开发 java 应用
JCEF(Java Chromium Embedded Framework)是一个Java库,用于在Java应用程序中嵌入Chromium浏览器引擎。如果您想在IDEA开发环境中使用JCEF,您可以按照以下步骤进行操作: 1. 下载JCEF库文件:您可以从JCEF的官…...
绝区伍--2024年AI发展路线图
2024 年将是人工智能具有里程碑意义的一年。随着新模式、融资轮次和进步以惊人的速度出现,很难跟上人工智能世界发生的一切。让我们深入了解 2024 年可能定义人工智能的关键事件、产品发布、研究突破和趋势。 2024 年第一季度 2024 年第一季度将推出一些主要车型并…...
C++:.front()函数作用
在C中,.front() 函数是容器(如 std::vector、std::deque、std::list 的某些实现等)的成员函数,用于访问容器中的第一个元素。这个函数返回对容器中第一个元素的引用(对于非const容器)或const引用࿰…...
Linux系统备份工具TimeShift
Linux系统备份 Linux系统备份工具TimeShift Linux系统备份工具TimeShift 0. 前言1. 安装2. 启动3. 使用法一、图形界面操作(方便)法二、终端命令操作(高端) Linux系统备份工具TimeShift Linux系统备份工具TimeShift 0. 前言 Time…...
Google重大更新--解读Android Auto认证4.3
Google在今年五月更新了Android Auto 4.2.2版本,而在2024年7月他们推出了Android Auto 4.3版本,这是自2023年9月以来对Android Auto 4.2版本的一次重大更新。 为了确保合规性和顺利认证,OEM和Tire1必须确保PDK组件版本与正在认证的主机的Rece…...
scala基础
scala基础: hello world: 写scala可运行文件的注意事项1、如果一个scala文件要运行,class要改成object2、如果是class,就仅单纯代表一个类,如果是object代表的是单例对象3、scala语法中,一句话结束不需要加分号4、scal…...
小红书选品中心商家采集 小红书商家电话采集软件
可采集名称销量评分联系方式等 需要有1000粉丝以上已实名认证过的小红书达人才可以使用 以下是一个示例程序,可以用于批量获取小红书选品中心商家的信息: import requestsdef get_merchants(page_num):url f"https://www.xiaohongshu.com/selec…...
JavaScript基础: JavaScript 数字类型
JavaScript 中的数字类型是用来表示数值的数据类型。JavaScript 的数字类型是基于 IEEE 754 标准的双精度浮点数格式,这意味着它可以表示非常大和非常小的数值,以及小数。 数字字面量 在 JavaScript 中,数字可以直接以字面量的形式书写&…...
【网络安全】漏洞挖掘之Spring Cloud注入漏洞
漏洞描述 Spring框架为现代基于java的企业应用程序(在任何类型的部署平台上)提供了一个全面的编程和配置模型。 Spring Cloud 中的 serveless框架 Spring Cloud Function 中的 RoutingFunction 类的 apply 方法将请求头中的“spring.cloud.function.routing-expression”参数…...
面试官:MySQL死锁是什么,如何解决?
MySQL死锁概述 定义:多个操作相互等待对方释放资源,导致无法继续执行的情况。场景:通常发生在多个事务同时试图锁定对方已锁定的资源时。 MySQL锁的分类 粒度分类: 表级锁:锁定整个表,简单但并发能力低。…...
CSS原子化
目录 一、定义 二、原子化工具 2.1、tailwind 2.1.1、以PostCss插件形式安装 2.1.2、不依赖PostCss安装 2.1.3、修改原始配置 2.2、unocss 三、优缺点 3.1、优点 3.2、缺点 一、定义 定义:使用一系列的助记词,利用类名来代表样式。 二、原子化…...
【Python的pip配置、程序运行、生成exe文件】
Python的pip配置、程序运行、生成exe文件 一、安装Python 通过官网下载对应的版本,安装即可。 下载地址:https://www.python.org/downloads/ Python标准库查看(Python自带库) Python 标准库文档 安装Python的时候,…...
神经网络习题
不具有权重共享的网络是: **多层感知机(Multilayer Perceptron,MLP): ** 特点:每一层的每一个神经元都与上一层的每一个神经元全连接,权重独立于每个连接,不存在权重共享。 权重共享…...
deepstream段错误
😐 错误: 探针中由于使用了pyds.get_nvds_buf_surface(hash(gst_buffer), frame_meta.batch_id)导致的段错误(segmentation fault)。 解决方式:...
《梦醒蝶飞:释放Excel函数与公式的力量》10.1.1函数简介
10.1.1函数简介 BIN2DEC函数是Excel中用于将二进制数转换为十进制数的函数。它在处理二进制数时非常有用,尤其是在电子工程、计算机科学等领域。 10.1.2函数语法: BIN2DEC(number) number:这是要转换的二进制数,必须是以字符串…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...
