以下是 Memcached 服务搭建和集成使用的详细步骤示例:
一、搭建 Memcached 服务
安装 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
。
- 下载源码:
- yum 安装:执行命令
- Windows 系统
- 下载安装包:memcached-win64。
- 解压到指定目录,如
D:\memcached
。
- Linux 系统
启动 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
。
- Linux 系统
二、集成 Memcached 到应用程序
- 添加依赖
- Maven 项目
- 在
pom.xml
中添加依赖:
- 在
- Maven 项目
<dependency>
<groupId>net.spy</groupId>
<artifactId>spymemcached</artifactId>
<version>2.12.3</version>
</dependency>
- 配置 Memcached 连接
- 在
application.properties
或application.yml
中添加配置:
- 在
# application.yml
spring:
memcached:
servers: 127.0.0.1:11211
pool:
maxTotal: 100
maxIdle: 20
minIdle: 10
- 创建配置类
- 创建
MemcachedConfig
类:
- 创建
@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;
}
}
- 使用 Memcached 缓存数据
- 创建服务类
CacheService
:
- 创建服务类
@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;
}
}
}
- 在业务逻辑中使用缓存
- 在控制器或服务层中注入
CacheService
并使用:
- 在控制器或服务层中注入
@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 缓存
- 编写测试用例
- 创建
CacheServiceTest
类:
- 创建
@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);
}
}
- 运行测试
- 执行测试用例,验证缓存功能是否正常。
通过以上步骤,您已成功搭建 Memcached 服务并将其集成到应用程序中,实现了数据的缓存功能。