当前位置: 首页 > news >正文

SpringBoot集成Memcached

SpringBoot集成Memcached

1、Memcached 介绍

Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中

缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储

键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过

memcached协议与守护进程通信。

因为 Spring Boot 没有针对 Memcached 提供对应的组建包,因此需要我们自己来集成。官方推出的 Java 客户端

Spymemcached 是一个比较好的选择之一。

Spymemcached 最早由 Dustin Sallings 开发,Dustin 后来和别人一起创办了 Couchbase (原NorthScale),职位

为首席架构师。2014 加入 Google。Spymemcached 是一个采用 Java 开发的异步、单线程的 Memcached 客户

端, 使用 NIO 实现。Spymemcached 是 Memcached 的一个流行的 Java client 库,性能表现出色,广泛应用于

Java + Memcached 项目中。

2、Windows下安装Memcached

官网上并未提供 Memcached 的 Windows 平台安装包,我们可以使用以下链接来下载,你需要根据自己的系统平

台及需要的版本号点击对应的链接下载即可:

  • 32位系统 1.2.5版本:http://static.runoob.com/download/memcached-1.2.5-win32-bin.zip

  • 32位系统 1.2.6版本:http://static.runoob.com/download/memcached-1.2.6-win32-bin.zip

  • 32位系统 1.4.4版本:http://static.runoob.com/download/memcached-win32-1.4.4-14.zip

  • 64位系统 1.4.4版本:http://static.runoob.com/download/memcached-win64-1.4.4-14.zip

  • 32位系统 1.4.5版本:http://static.runoob.com/download/memcached-1.4.5-x86.zip

  • 64位系统 1.4.5版本:http://static.runoob.com/download/memcached-1.4.5-amd64.zip

在 1.4.5 版本以前 memcached 可以作为一个服务安装,而在 1.4.5 及之后的版本删除了该功能。因此我们以下介

绍两个不同版本 1.4.4 及 1.4.5的不同安装方法。

2.1 memcached <1.4.5 版本安装

1、解压下载的安装包到指定目录。

2、在 1.4.5 版本以前 memcached 可以作为一个服务安装,使用管理员权限运行以下命令:

c:\memcached\memcached.exe -d install

3、然后我们可以使用以下命令来启动和关闭 memcached 服务:

c:\memcached\memcached.exe -d start
c:\memcached\memcached.exe -d stop

4、如果要修改 memcached 的配置项, 可以在命令行中执行 regedit.exe 命令打开注册表并找到

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached 来进行修改。

如果要提供 memcached 使用的缓存配置可以修改 ImagePath 为:

"c:\memcached\memcached.exe" -d runservice -m 512

-m 512 意思是设置 memcached 最大的缓存配置为512M。

此外我们还可以通过使用 memcached.exe -h 命令查看更多的参数配置。

5、如果我们需要卸载 memcached ,可以使用以下命令:

c:\memcached\memcached.exe -d uninstall

2.2 memcached >= 1.4.5 版本安装

1、解压下载的安装包到指定目录。

2、在 memcached1.4.5 版本之后,memcached 不能作为服务来运行,需要使用任务计划中来开启一个普通的

进程,在 window 启动时设置 memcached自动执行。

我们使用管理员身份执行以下命令将 memcached 添加来任务计划表中:

schtasks /create /sc onstart /tn memcached /tr "'c:\memcached\memcached.exe' -m 512"

注意:-m 512 意思是设置 memcached 最大的缓存配置为512M。

注意:我们可以通过使用 c:\memcached\memcached.exe -h 命令查看更多的参数配置。

3、如果需要删除 memcached 的任务计划可以执行以下命令:

schtasks /delete /tn memcached

3、整合Memcached

3.1 pom依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.4.RELEASE</version><relativePath/></parent><groupId>com.example</groupId><artifactId>spring-boot-memcache-spymemcached</artifactId><version>0.0.1-SNAPSHOT</version><name>spring-boot-memcache-spymemcached</name><description>spring-boot-memcache-spymemcached</description><packaging>jar</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>net.spy</groupId><artifactId>spymemcached</artifactId><version>2.12.2</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

3.2 配置文件

memcache.ip=127.0.0.1
memcache.port=11211

分别配置 memcache 的 Ip 地址和 端口。

3.3 设置配置对象

创建 MemcacheSource 接收配置信息

package com.example.config;import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Component
@ConfigurationProperties(prefix = "memcache")
public class MemcacheSource {private String ip;private int port;public String getIp() {return ip;}public void setIp(String ip) {this.ip = ip;}public int getPort() {return port;}public void setPort(int port) {this.port = port;}
}

@ConfigurationProperties(prefix = "memcache") 的意思会以 memcache.* 为开通将对应的配置文件加载

到属性中。

3.4 启动初始化 MemcachedClient

利用 CommandLineRunner 在项目启动的时候配置好 MemcachedClient

package com.example.config;import net.spy.memcached.MemcachedClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;import javax.annotation.Resource;
import java.io.IOException;
import java.net.InetSocketAddress;@Component
public class MemcachedRunner implements CommandLineRunner {protected Logger logger = LoggerFactory.getLogger(this.getClass());@Resourceprivate MemcacheSource memcacheSource;private MemcachedClient client = null;@Overridepublic void run(String... args) throws Exception {try {client = new MemcachedClient(new InetSocketAddress(memcacheSource.getIp(), memcacheSource.getPort()));} catch (IOException e) {logger.error("inint MemcachedClient failed ", e);}}public MemcachedClient getClient() {return client;}}

3.5 启动类

package com.example;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}}

3.6 测试

package com.example;import com.example.config.MemcachedRunner;
import net.spy.memcached.MemcachedClient;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;import javax.annotation.Resource;@RunWith(SpringRunner.class)
@SpringBootTest
public class RepositoryTests {@Resourceprivate MemcachedRunner memcachedRunner;@Testpublic void testSetGet() {MemcachedClient memcachedClient = memcachedRunner.getClient();memcachedClient.set("testkey", 1000, "666666");System.out.println("***********  " + memcachedClient.get("testkey").toString());}}

使用中先测试插入一个 key 为 testkey ,1000 为过期时间单位为 毫秒,最后的 666666 为 key 对应的值。

执行测试用例 testSetGet ,控制台输出内容:

***********  666666

表明测试成功。

相关文章:

SpringBoot集成Memcached

SpringBoot集成Memcached 1、Memcached 介绍 Memcached 是一个高性能的分布式内存对象缓存系统&#xff0c;用于动态Web应用以减轻数据库负载。它通过在内存中 缓存数据和对象来减少读取数据库的次数&#xff0c;从而提高动态、数据库驱动网站的速度。Memcached基于一个存储…...

git基本操作(配图超详细讲解)

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 目录 创建git本地仓库 配置仓库 认识工作区&#xff0c;暂存区&#xff0c;版本库 修改文件 版本回退 撤销修改 删除文件 创建git本地仓库 要提前说的是&#xff0c;仓库是进⾏版本控制的⼀个⽂件⽬录。我们要想对⽂…...

【网络通信】浅析UDP与TCP协议的奥秘

在现代互联网中&#xff0c;UDP&#xff08;用户数据报协议&#xff09;和TCP&#xff08;传输控制协议&#xff09;是两种最常用的传输协议&#xff0c;它们被广泛应用于网络数据传输。尽管这两种协议都可以用来在网络上传输数据&#xff0c;但它们在设计目标、特点和适用场景…...

C#核心笔记——(二)C#语言基础

一、C#程序 1.1 基础程序 using System; //引入命名空间namespace CsharpTest //将以下类定义在CsharpTest命名空间中 {internal class TestProgram //定义TestProgram类{public void Test() { }//定义Test方法} }方法是C#中的诸多种类的函数之一。另一种函数*&#xff0c;还…...

C++ 删除无头链上所有指定值为x的节点。

C 删除无头链上所有指定值为x的节点。 #include<stdio.h> #include<ctype.h> #include<stdlib.h> typedef struct app {int data;struct app* next; }APP; int main() {int n;int node;int x;while (scanf("%d", &n) ! EOF){APP* head NULL, …...

linux基本指令以及热键

基本指令 ♥clear ♥whoami ♥who ♥pwd ♥ls指令&#xff08;重点&#xff09; ls -a&#xff1a; ls -l ♥mkdir ♥cd指令 ♥touch指令 ♥stat指令 ♥rmdir指令 && rm 指令 ♥man指令 ♥nano指令 ♥cp指令 ♥mv指令 ♥cat指令 &#x1f5e1;输出/输出重定向 &#x1…...

Rocketmq消费消息时不丢失不重复

消息消费不丢失 手动ACK 在消费者端&#xff0c;需要确保在消息拉取并消费成功之后再给Broker返回ACK&#xff0c;就可以保证消息不丢失了&#xff0c;如果这个过程中Broker一直没收到ACK&#xff0c;那么就可以重试。所以&#xff0c;在消费者的代码中&#xff0c;一定要在业…...

RedisInsight——redis的桌面UI工具使用实践

下载 官网下载安装。下载地址在这里 填个邮箱地址就可以下载了。 安装使用。 安装成功后开始使用。 1. 你可以add一个地址。或者登录redis cloud 去auto-discover 2 . 新增你的redis库地址。注意index的取值 3。现在可以登录到redis了。看看结果 这是现在 在服务器上执行…...

JVM对象创建与内存分配

对象的创建 对象创建的主要流程&#xff1a; 类加载推荐博客&#xff1a;JVM类加载机制详解 类加载检查 虚拟机遇到一条new指令时&#xff0c;首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用&#xff0c;并且检查这个符号引用代表的类是否已被加载、解析…...

央国企数字化转型难在哪?为什么要数字化转型?

科技在发展&#xff0c;技术在升级&#xff0c;全球信息化、数字化的步伐在加快&#xff0c;企业想要在未来的发展中抓住机会&#xff0c;更好地发展壮大&#xff0c;就需要加快企业数字化转型的速度&#xff0c;才能立足于信息化、数字化时代&#xff0c;央国企作为企业中的一…...

第7天:信息打点-资产泄漏amp;CMS识别amp;Git监控amp;SVNamp;DS_Storeamp;备份

第7天&#xff1a;信息打点-资产泄漏&CMS识别&Git监控&SVN&DS_Store&备份 知识点&#xff1a; 一、cms指纹识别获取方式 网上开源的程序&#xff0c;得到名字就可以搜索直接获取到源码。 cms在线识别&#xff1a; CMS识别&#xff1a;https://www.yun…...

不可思议,红警居然开源了!

红警&#xff0c;准确的说应该叫“红色警戒”&#xff0c;是大部分 80/90 后记忆里跟游戏二字关系最深的情节。 相信每一名 80/90 后&#xff0c;都有一段难忘的红警岁月&#xff0c;甚至可以说很多人的青春&#xff0c;就叫红警! 说到红色警戒游戏&#xff0c;估计应该是很多…...

yolo系列模型训练数据集全流程制作方法(附数据增强代码)

yolo系列的模型在目标检测领域里面受众非常广&#xff0c;也十分流行&#xff0c;但是在使用yolo进行目标检测训练的时候&#xff0c;往往要将VOC格式的数据集转化为yolo专属的数据集&#xff0c;而yolo的训练数据集制作方法呢&#xff0c;最常见的也是有两种&#xff0c;下面我…...

4、FFmpeg命令行操作7

转封装(1) 保持编码格式&#xff1a; ffmpeg -i test.mp4 -vcodec copy -acodec copy test_copy.ts ffmpeg -i test.mp4 -codec copy test_copy2.ts 改变编码格式&#xff1a; ffmpeg -i test.mp4 -vcodec libx265 -acodec libmp3lame out_h265_mp3.mkv …...

算法进阶——链表中环的入口节点

题目 给一个长度为n链表&#xff0c;若其中包含环&#xff0c;请找出该链表的环的入口结点&#xff0c;否则&#xff0c;返回null。 数据范围&#xff1a;1<结点值<10000 要求&#xff1a;空间复杂度O(1)&#xff0c;时间复杂度O(n) 例如&#xff0c;输入{1,2},{3,4,5…...

无线WiFi安全渗透与攻防(N.1)WPA渗透-pyrit:batch-table加速attack_db模块加速_“attack_db”模块加速

WPA渗透-pyrit:batch-table加速attack_db模块加速_“attack_db”模块加速 WPA渗透-pyrit:batch-table加速attack_db模块加速_“attack_db”模块加速1.渗透WIFI1.导入密码字典2.导入essid,破解完成记得删除3.批处理数据库,速度比较慢,耐心等待4.batch-table(批处理数据库)加…...

YOLOV8部署Android Studio安卓平台NCNN

下载Android Studio&#xff0c;配置安卓开发环境&#xff0c;这个过程比较漫长。 安装cmake&#xff0c;注意安装的是cmake3.10版本。 根据手机安卓版本选择相应的安卓版本&#xff0c;我的是红米K30Pro&#xff0c;安卓12。 使用腾讯开源的ncnn&#xff0c;这是一个为手机端极…...

【算法萌新闯力扣】:旋转字符串

力扣热题&#xff1a;796.旋转字符串 开篇 今天下午刷了6道力扣算法题&#xff0c;选了一道有多种解法的题目与大家分享。 题目链接:796.旋转字符串 题目描述 代码思路 完全按照题目的要求&#xff0c;利用StringBuffer中的方法对字符串进行旋转&#xff0c;寻找相同的一项 …...

可逆矩阵的性质

如果矩阵A可逆&#xff0c;那么它的逆矩阵也可逆&#xff0c;并且如果矩阵A可逆&#xff0c;假设是一个不为0的数&#xff0c;那么也可逆&#xff0c;并且如果矩阵A和都可逆&#xff0c;而且它们的阶数也相同&#xff0c;那么它们的乘积也是可逆的&#xff0c;并且如果矩阵A可逆…...

HIT 模式识别 手写汉字分类 Python实现

训练集数据 TrainSamples-400.csv&#xff0c;含 100 个不同汉字&#xff0c;每个汉字 400 个实例&#xff0c;每个实例均为 64*64 的二值图像&#xff1b; 训练集标注TrainSamples-400.csv&#xff0c;为 40000 个 0 到 99 间的整数&#xff0c;表示训练集中每个实例所属汉字类…...

Keil C51中使用DEFINE指令动态包含头文件技巧

1. 使用DEFINE指令指定#include文件的背景与需求在嵌入式C语言开发中&#xff0c;我们经常遇到需要根据不同的硬件平台或编译环境包含不同头文件的情况。传统做法是直接硬编码#include语句中的文件名&#xff0c;但这种方式缺乏灵活性&#xff0c;特别是在跨平台开发或需要频繁…...

Python运算符:逻辑运算符(and/or/not)的短路特性

Python运算符&#xff1a;逻辑运算符&#xff08;and/or/not&#xff09;的短路特性&#x1f4da; 本章学习目标&#xff1a;深入理解逻辑运算符&#xff08;and/or/not&#xff09;的短路特性的核心概念与实践方法&#xff0c;掌握关键技术要点&#xff0c;了解实际应用场景与…...

论软件系统建模方法及其应用——以飞秒激光加工控制系统为例

摘要 2024年1月,我参与了某精密制造企业“高精度飞秒激光加工控制系统”项目的研发,担任系统架构设计师,主要负责系统建模、核心模块设计与集成测试。该项目旨在开发一套用于航空叶片微孔加工的数控系统,要求实现1μm的定位精度、实时补偿与工艺自适应调整。系统具有强实时…...

三亚高端小区实景落地选哪家

在三亚&#xff0c;高端小区对居住品质的要求近乎苛刻——不仅要有气派的视觉呈现&#xff0c;更要经得起台风、高湿、海风盐雾的考验。如果您正在寻找一家能真正实现“所见即所得”的实景落地服务商&#xff0c;三亚秦鼎科技有限公司就是您不容错过的选择。为什么是秦鼎科技&a…...

【Typescript】11-类抽象类与面向对象建模

类、抽象类与面向对象建模 TypeScript 不是一门纯粹的面向对象语言&#xff0c;但它对类系统的支持足够完整&#xff0c;足以覆盖很多工程场景。问题在于&#xff0c;很多人学到 class 之后&#xff0c;会误以为这就是组织 TypeScript 代码的默认方式。现实恰恰相反&#xff1…...

软件测试职业天花板真相:不是岗位不行,是你没找对方向

在软件行业高速发展的今天&#xff0c;打开任何一个技术论坛&#xff0c;总能刷到软件测试从业者的焦虑&#xff1a;“干了5年功能测试&#xff0c;薪资卡在15k再也上不去”“35岁还在写测试用例&#xff0c;是不是要被淘汰了”“AI都能自动生成测试脚本了&#xff0c;我们还有…...

python旅游出行指南系统

目录同行可拿货,招校园代理 ,本人源头供货商项目概述核心功能技术实现代码示例&#xff08;路线规划&#xff09;扩展方向适用场景源码获取详细视频演示 &#xff1a;同行可合作点击我获取源码->获取博主联系方式->进我个人主页-->同行可拿货,招校园代理 ,本人源头供货…...

Unity 2D开发核心原理:坐标系统、物理引擎与资源契约

1. 为什么“Unity 2D 游戏开发教程&#xff08;二&#xff09;”不是续集&#xff0c;而是分水岭 很多人点开这个标题&#xff0c;下意识以为是“上一讲的延续”&#xff0c;就像看剧追更一样等着主角升级打怪。但实际在Unity 2D开发的真实工作流里&#xff0c;“第二讲”从来不…...

NotebookLM时间线创建全解析,手把手教你用AI自动生成可交互知识图谱

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM时间线创建的核心价值与适用场景 NotebookLM 的时间线&#xff08;Timeline&#xff09;功能并非简单的时间戳罗列&#xff0c;而是将文档片段、引用来源与用户思考按真实发生顺序动态编织成…...

(CVPR2026)Parameter-Efficient Semantic Augmentation forEnhancing Open-Vocabulary Object Detection

paper&#xff1a;https://arxiv.org/abs/2604.04444code&#xff1a;https://github.com/jokercao6/HSA-DINO...