Memcached 服务搭建和集成使用的详细步骤示例

以下是 Memcached 服务搭建和集成使用的详细步骤示例:

一、搭建 Memcached 服务
  1. 安装 Memcached

    • Linux 系统
      • yum 安装 :执行命令 yum install -y memcached memcached-devel
      • 源码安装
        • 下载源码:wget http://www.memcached.org/files/memcached-1.5.17.tar.gz
        • 解压:tar zxf memcached-1.5.17.tar.gz
        • 进入目录:cd memcached-1.5.17
        • 配置:./configure --prefix=/usr/local/memcached
        • 编译安装:make && make install
    • Windows 系统
      • 下载安装包:memcached-win64
      • 解压到指定目录,如 D:\memcached
  2. 启动 Memcached

    • Linux 系统
      • 启动命令:/usr/local/memcached/bin/memcached -d -u root -m 64m -p 11211 -c 1024 -l 0.0.0.0
      • 参数说明:
        • -d:以守护进程方式运行。
        • -u root:指定运行用户。
        • -m 64m:分配 64MB 内存。
        • -p 11211:监听端口。
        • -c 1024:最大并发连接数。
        • -l 0.0.0.0:监听所有 IP 地址。
      • 设置为开机启动:
        • 复制启动脚本:cp /usr/local/memcached/scripts/memcached.sysv /etc/init.d/memcached
        • 修改脚本:sed -i 's/USER=nobody/USER=root/g' /etc/init.d/memcached
        • 设置权限:chmod +x /etc/init.d/memcached
        • 添加开机启动:chkconfig --level 345 memcached on
    • Windows 系统
      • 以管理员身份打开命令行。
      • 安装服务:D:\memcached\memcached.exe -d install
      • 启动服务:net start memcached
二、集成 Memcached 到应用程序
  1. 添加依赖
    • Maven 项目
      • pom.xml 中添加依赖:
xml 复制代码
<dependency>
    <groupId>net.spy</groupId>
    <artifactId>spymemcached</artifactId>
    <version>2.12.3</version>
</dependency>
  1. 配置 Memcached 连接
    • application.propertiesapplication.yml 中添加配置:
yaml 复制代码
# application.yml
spring:
  memcached:
    servers: 127.0.0.1:11211
    pool:
      maxTotal: 100
      maxIdle: 20
      minIdle: 10
  1. 创建配置类
    • 创建 MemcachedConfig 类:
java 复制代码
@Configuration
public class MemcachedConfig {

    @Value("${spring.memcached.servers}")
    private String servers;

    @Bean
    public MemcachedClient memcachedClient() throws IOException {
        MemcachedClient client = new MemcachedClient(
            AddrUtil.getAddresses(servers.split(",")));
        return client;
    }
}
  1. 使用 Memcached 缓存数据
    • 创建服务类 CacheService
java 复制代码
@Service
public class CacheService {

    @Autowired
    private MemcachedClient memcachedClient;

    public void setToCache(String key, Object value, int expire) {
        try {
            memcachedClient.set(key, expire, value);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public Object getFromCache(String key) {
        try {
            return memcachedClient.get(key);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}
  1. 在业务逻辑中使用缓存
    • 在控制器或服务层中注入 CacheService 并使用:
java 复制代码
@RestController
public class UserController {

    @Autowired
    private CacheService cacheService;

    @GetMapping("/user/{id}")
    public User getUser(@PathVariable Long id) {
        String key = "user_" + id;
        User user = (User) cacheService.getFromCache(key);
        if (user == null) {
            user = userRepository.findById(id).orElse(null);
            if (user != null) {
                cacheService.setToCache(key, user, 3600); // 缓存一小时
            }
        }
        return user;
    }
}
三、测试 Memcached 缓存
  1. 编写测试用例
    • 创建 CacheServiceTest 类:
java 复制代码
@RunWith(SpringRunner.class)
@SpringBootTest
public class CacheServiceTest {

    @Autowired
    private CacheService cacheService;

    @Test
    public void testCache() {
        String key = "test_key";
        String value = "Hello, Memcached!";
        cacheService.setToCache(key, value, 60); // 缓存一分钟

        String result = (String) cacheService.getFromCache(key);
        assertEquals(value, result);

        // 等待超过缓存时间
        try {
            Thread.sleep(60000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        result = (String) cacheService.getFromCache(key);
        assertNull(result);
    }
}
  1. 运行测试
    • 执行测试用例,验证缓存功能是否正常。

通过以上步骤,您已成功搭建 Memcached 服务并将其集成到应用程序中,实现了数据的缓存功能。

相关推荐
瓜瓜怪兽亚4 分钟前
前端基础知识---10 Node.js(三)
数据结构·数据库·node.js
掘根2 小时前
【Qt】常用控件3——显示类控件
开发语言·数据库·qt
码码哈哈爱分享2 小时前
MariaDB 与 MySQL 区别
数据库·mysql·mariadb
爱敲代码的TOM2 小时前
深入MySQL底层1-存储引擎与索引
数据库·mysql
GUIQU.2 小时前
【QT】嵌入式开发:从零开始,让硬件“活”起来的魔法之旅
java·数据库·c++·qt
牛奶咖啡136 小时前
关系数据库MySQL的常用基础命令详解实战
数据库·mysql·本地远程连接到mysql·创建mysql用户和密码·修改mysql用户的密码·设置mysql密码的使用期限·设置和移除mysql用户的权限
ANYOLY6 小时前
Redis 面试宝典
数据库·redis·面试
鲲志说7 小时前
数据洪流时代,如何挑选一款面向未来的时序数据库?IoTDB 的答案
大数据·数据库·apache·时序数据库·iotdb
没有bug.的程序员7 小时前
MVCC(多版本并发控制):InnoDB 高并发的核心技术
java·大数据·数据库·mysql·mvcc
脑花儿8 小时前
ABAP SMW0下载Excel模板并填充&&剪切板方式粘贴
java·前端·数据库