Memcached介绍与使用

Memcached介绍与使用

Memcached是什么?

Memcached是一个免费开源的、高性能的、分布式内存对象缓存系统。

Memcached是一个基于内存的键值对储存系统,用于储存小型的任意数据(字符串、对象),比如数据库查询、API调用以及页面渲染的结果。

它由什么组成的?

  • 客户端软件,给出可用的Memcached服务器列表
  • 一个基于客户端的哈希算法,用于基于“键”选择合适的服务器
  • 服务端软件,在一个内部的哈希表中储存键值对数据
  • 最近最少使用算法(LRU),决定何时丢弃旧数据(当内存不足)

各类储存方案对比

在这里插入图片描述

Memcached工作流程

在这里插入图片描述

  1. 客户端向Memcached服务器发送请求,如果缓存中有需要的数据,直接返回。
  2. 如果没有需要的数据,那么就查询数据库,在给客户端返回数据的同时,把该数据存到Memcached中。
  3. 一旦数据发生变化(数据的修改和删除),就要实时更新缓存内的数据。

Memcached与Redis比较

memcache、redis原理对比

Memcached命令

Memcached set 命令

Spring Boot 集成 Memcached

安装Memcached

Linux:

  • 安装libevent库

sudo apt-get install libevent ibevent-dev (Ubuntu/Debian)

yum install libevent libevent-devel (Redhat/Fedora/Centos)

  • 安装Memcached

sudo apt-get install memcached (Ubuntu/Debian)

yum install memcached (Redhat/Fedora/Centos)

portmaster databases/memcached (FreeBSD)

Windows:

Memcached在1.4.5版本之前可以作为一个服务安装,但在之后就取消了这个功能。所以安装方法分两块。

1.4.5之前版本安装

使用管理员运行以下命令:

f:\memcached.exe -d install (路径视你的存放路径而定)

打开和关闭Memcached服务:

f:\memcached.exe -d start (路径视你的存放路径而定)

f:\memcached.exe -d stop (路径视你的存放路径而定)

如要修改配置,打开regedit.exe,找到"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached"进行修改。

1.4.5之后版本安装

通过创建计划任务来进行设置Memcached的windows启动时自执行:

管理员身份执行:

schtasks /create /sc onstart /tn memcached /tr “c:\memcached.exe”

删除计划任务:

schtasks /delete /tn memcached

注意:一定要先把Memcached服务成功打开,下面的程序才能跑通。

导包

Memcached没有为Spring Boot开发集成包,所以需要自行引入。

这里使用Spymemcached。

github : https://github.com/couchbase/spymemcached

Maven:

https://mvnrepository.com/artifact/net.spy/spymemcached

<dependency>
    <groupId>net.spy</groupId>
    <artifactId>spymemcached</artifactId>
    <version>2.12.3</version>
</dependency>

程序中使用

创建一个Runner继承CommandLineRunner,并在其中初始化Memcached服务,这样就可以在Spring容器成功启动之后,第一时间创建可用的Memcached服务。

package com.lbl.spymemcacheddemo;

import net.spy.memcached.MemcachedClient;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

import java.net.InetSocketAddress;

@Component
public class MyRunner implements CommandLineRunner {

    private MemcachedClient memcachedClient = null;

    @Override
    public void run(String... args) throws Exception {
        try {
            memcachedClient = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public MemcachedClient getMemcachedClient() {
        return memcachedClient;
    }
}

创建测试:

package com.lbl.spymemcacheddemo;

import net.spy.memcached.MemcachedClient;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import javax.annotation.Resource;

import static org.junit.jupiter.api.Assertions.*;
@RunWith(SpringRunner.class)
@SpringBootTest
class MyRunnerTest {

    @Resource
    private MyRunner myRunner;

    @Test
    public void Test() {
        MemcachedClient client = myRunner.getMemcachedClient();
        client.set("test",100,"123456");
        System.out.println("test is "+client.get("testkey").toString());
    }

}

其它遇到的坑

@RunWith注解爆红

检查pom.xml文件,发现这一个:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
</dependency>

改为这样:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
</dependency>

其它方法:

Springboot测试类之@RunWith注解

CommandLineRunner或者ApplicationRunner接口介绍

CommandLineRunner或者ApplicationRunner接口

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值