Memcached安装教程及使用

简介: Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载 Table of contents安装使用在spring中使用安装下载下来memcached.

Memcached

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


Table of contents

安装

  1. 下载下来memcached.exe
  2. 切换到memcached.exe所在路径
  3. 输入memcached -d install
  4. win + r 输入 services.msc打开window服务
  5. 随便选中一个输入memcached就可以查看到安装好的服务,右击启动它,然后关闭窗口

使用

  1. 新建java工程或者maven工程
  2. 导入三个必备的依赖,fastjson-1.2.3,slf4j-api-1.7.5,xmemcached-2.3.2
  3. main方法中加入

     MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddresses("127.0.0.1:11211"));
     builder.setSessionLocator(new KetamaMemcachedSessionLocator());
     try {
         MemcachedClient memcachedClient =builder.build();
    
     //在这里写入测试代码
    
         memcachedClient.shutdown();
     } catch (IOException e) {
         e.printStackTrace();
     } catch (InterruptedException e) {
         e.printStackTrace();
     } catch (MemcachedException e) {
         e.printStackTrace();
     } catch (TimeoutException e) {
         e.printStackTrace();
     }

时效

    memcachedClient.set("testTime",2,"testTimeValue");
    String testTime = memcachedClient.get("testTime");
    System.out.println("testTime = " + testTime);
    TimeUnit.SECONDS.sleep(4);
    System.out.println("4s 过去了");
    String valueExist  = memcachedClient.get(testTime);
    System.out.println("valueExist = " + valueExist);  

输出:
testTime = testTimeValue
4s 过去了
valueExist = null

恢复

//存储,然后关闭掉服务
memcachedClient.set("test",0,"testValue");
String testTime=memcachedClient.get("test");
System.out.println("testTime="+testTime);
System.out.println("存储成功");  

输出:
testTime = testValue
存储成功

//关闭掉服务后的重启
String testTime = memcachedClient.get("test");
System.out.println("testTime = " + testTime);
System.out.println("取值失败");  

输出:
testTime = null
取值失败

delete

memcachedClient.set("test",0,"testValue");
String getVal = memcachedClient.get("test");
System.out.println("getVal = " + getVal);
memcachedClient.delete("test");
System.out.println("after delete ...");
getVal = memcachedClient.get("test");
System.out.println("getVal = " + getVal);  

输出:
getVal = testValue
after delete ...
getVal = null

自动增长

//三个参数,第一个指定键,第二个指定递增的幅度大小,第三个指定当key不存在的情况下的初始值
for (int i = 0; i < 5; i++) {
    memcachedClient.incr("博客的赞",1,20);
    String point = memcachedClient.get("博客的赞");
    System.out.println("point = " + point);
}  

输出:
point = 20
point = 21
point = 22
point = 23
point = 24

关于incr的用法,值得警惕的是,它的值虽然看起来是一个数字,实际上正如代码中的String point = memcachedClient.get("博客的赞");
其实是一个字符串,所以会出现如下错误

memcachedClient.set("博客的赞1",0,10);
int str = memcachedClient.get("博客的赞1");
System.out.println("str1 = " + str);
memcachedClient.incr("博客的赞1",2,22);
str = memcachedClient.get("博客的赞1");
System.out.println("str2 = " + str);  

输出:
net.rubyeye.xmemcached.exception.MemcachedClientException: cannot increment or decrement non-numeric value,key=博客的赞1
at net.rubyeye.xmemcached.command.Command.decodeError(Command.java:267)
..
at com.google.code.yanf4j.nio.impl.NioController.onRead(NioController.java:157)
at com.google.code.yanf4j.nio.impl.Reactor.dispatchEvent(Reactor.java:323)
at com.google.code.yanf4j.nio.impl.Reactor.run(Reactor.java:180)
str1 = 10

输出的顺序不同,注意输出的异常栈信息的第一条和后面的几条就指明nio.impl.Reactor.run,线程的,这儿就不深入展开了

spring

骨架

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:spring-config.xml")
public class TestMem {
    @Autowired
    private MemcachedClient memcachedClient;
    
    @Test
    public void test1(){
    //测试代码部分
    }

}  

测试代码

memcachedClient.set("springData",3,"dataVal");
String str = memcachedClient.get("springData");
System.out.println("str = " + str);  

输出:
str = dataVal

还可以存储对象,不过该对象必须实现Serializable接口,不然会报错java.io.NotSerializableException: Teacher,

实现接口后

import lombok.Data;
import java.io.Serializable;
@Data
public class Teacher implements Serializable {
    private int age;
    private String name;
}  

关于@Data关我在另一篇博客中有介绍lombok

Teacher teacher = new Teacher();
teacher.setAge(3);
teacher.setName("23");

memcachedClient.set("te", 0, teacher);
Teacher teacher1 = memcachedClient.get("te");
System.out.println("teacher1 = " + teacher1);

输出:
teacher1 = Teacher(age=3, name=23)

pom.xml

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.selton</groupId>
    <artifactId>DemoMemSpring</artifactId>
    <version>1.0</version>

    <dependencies>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.0</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.3.11.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>com.googlecode.xmemcached</groupId>
            <artifactId>xmemcached</artifactId>
            <version>2.0.0</version>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-context</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>4.3.11.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

    </dependencies>

</project>  

config

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
          http://www.springframework.org/schema/context
          http://www.springframework.org/schema/context/spring-context-3.0.xsd
          ">


    <bean id="memcachedClient" name="memcachedClient"
          class="net.rubyeye.xmemcached.utils.XMemcachedClientFactoryBean">
        <property name="servers">
            <!--配置端口,另加入的话,空格隔开-->
            <value>127.0.0.1:11211</value>
        </property>
        <property name="weights">
            <list>
                <!--设置不同端口的权重,这里只有一个端口-->
                <value>1</value>
            </list>
        </property>
        <property name="sessionLocator">
            <bean class="net.rubyeye.xmemcached.impl.KetamaMemcachedSessionLocator"></bean>
        </property>
        <property name="transcoder">
            <bean class="net.rubyeye.xmemcached.transcoders.SerializingTranscoder" />
        </property>
        <property name="bufferAllocator">
            <bean class="net.rubyeye.xmemcached.buffer.SimpleBufferAllocator"></bean>
        </property>
    </bean>

</beans>
目录
相关文章
|
6月前
|
Linux Memcache
Linux - 安装memcached
Linux - 安装memcached
107 0
Linux - 安装memcached
|
4月前
|
缓存 Java Spring
教程:Spring Boot中集成Memcached的详细步骤
教程:Spring Boot中集成Memcached的详细步骤
|
5月前
|
缓存 Java Spring
SpringBoot配置第三方专业缓存技术Memcached 下载 安装 整合测试 2024年5000字详解
SpringBoot配置第三方专业缓存技术Memcached 下载 安装 整合测试 2024年5000字详解
44 0
|
Docker 容器
Docker下安装memcached
Docker下安装memcached
156 0
|
Linux
百度搜索:蓝易云【Cnetos7编译安装Memcached教程】
现在,您已经成功在CentOS 7上通过编译安装了Memcached。请注意,以上步骤提供了基本的指导,实际操作可能会有所差异。如有需要,您可以参考Memcached官方文档或社区资源获取更详细的信息和帮助。
62 0
|
Linux 开发工具 C语言
百度搜索:蓝易云【Centos8 stream系统编译安装Memcached教程。】
以上是在CentOS 8 Stream系统上编译安装Memcached的基本教程。请注意,具体的配置和参数可能因您的需求而有所不同,您可以根据自己的情况进行调整。同时,请确保在执行任何操作之前备份重要的文件和配置。
235 1
|
Shell C语言
脚本用源码来安装 memcached 服务器
脚本用源码来安装 memcached 服务器
51 1
|
存储 监控 Linux
百度搜索:蓝易云【Linux系统Memcached性能优化详细教程。】
请注意,Memcached性能优化是一个综合性的过程,需要根据具体的应用程序和服务器环境进行调整。建议在进行任何更改之前,备份配置文件并进行性能测试。
255 0
|
Ubuntu
百度搜索:蓝易云【Ubuntu 20.04系统编译安装Memcached教程。】
请注意,以上是一个基本的编译安装Memcached的示例,您可能需要根据您的特定需求进行进一步配置和调整。
75 0
百度搜索:蓝易云【百度搜索:蓝易云【Debian11系统编译安装Memcached教程。】
以上是在Debian 11系统上编译安装Memcached的基本步骤。请根据实际情况进行相应的调整和配置。
84 0