Memcached介绍
Memcached是一个高性能的分布式内存对象缓存系统,它通过在内存中缓存数据来减少数据库负载,加快动态Web应用程序的响应速度。
以下是Memcached的一些关键特点和作用:
-
分布式缓存:Memcached是分布式的,不同于本地缓存如SharedMemory或APC,它通过网络连接不同服务器上的缓存数据,实现数据的快速访问和共享。
-
性能提升:由于Memcached将常用数据存储在内存中,这可以显著减少对数据库的直接访问,从而降低了数据库的负载,并提高了整个系统的访问速度。
-
开源软件:Memcached是开源的,以BSD license授权发布。它的源代码公开,允许任何人使用和修改,这也促进了其广泛的应用和发展。
-
安全性考虑:由于Memcached缺乏认证以及安全管制,通常建议将其部署在内部网络或防火墙之后,以避免潜在的安全风险。
-
广泛应用:Memcached不仅适用于Web应用程序,还被用于移动应用、游戏、广告技术以及电子商务等多个领域,为实时应用程序提供支持。
-
亚毫秒级响应:Memcached能够实现极快的响应时间,这对于要求高吞吐量和低延迟的现代应用程序来说至关重要。
Linux安装教程
Memcached 支持许多平台:Linux、FreeBSD、Solaris、Mac OS,也可以安装在Windows上。
- Linux系统安装memcached,首先要先安装libevent库。
yum install libevent libevent-devel
- 安装Memcached
yum install memcached
- Memcached 运行
/usr/local/memcached/bin/memcached -h
Spring整合Memcached
- 添加依赖
<dependency>
<groupId>com.googlecode.xmemcached</groupId>
<artifactId>xmemcached</artifactId>
<version>2.4.7</version>
</dependency>
- 配置memcache
@Configuration
public class XMemcachedConfig {
@Bean
public MemcachedClient getMemcachedClient() throws IOException {
MemcachedClientBuilder memcachedClientBuilder = new XMemcachedClientBuilder("localhost:11211");
MemcachedClient memcachedClient = memcachedClientBuilder.build();
return memcachedClient;
}
}
常用命令
- set 命令
Memcached set 命令用于将 value(数据值) 存储在指定的 key(键) 中。
set key flags exptime bytes [noreply]
value
- add 命令
Memcached add 命令用于将 value(数据值) 存储在指定的 key(键) 中。
add key flags exptime bytes [noreply]
value
- replace 命令
Memcached replace 命令用于替换已存在的 key(键) 的 value(数据值)。
如果 key 不存在,则替换失败,并且您将获得响应 NOT_STORED。
add key flags exptime bytes [noreply]
value
- append 命令
Memcached append 命令用于向已存在 key(键) 的 value(数据值) 后面追加数据 。
append key flags exptime bytes [noreply]
value
- CAS 命令
Memcached CAS(Check-And-Set 或 Compare-And-Swap) 命令用于执行一个"检查并设置"的操作
它仅在当前客户端最后一次取值后,该key 对应的值没有被其他客户端修改的情况下, 才能够将值写入。
cas key flags exptime bytes unique_cas_token [noreply]
value
- get 命令
Memcached get 命令获取存储在 key(键) 中的 value(数据值) ,如果 key 不存在,则返回空。
get key
- delete 命令
Memcached delete 命令用于删除已存在的 key(键)。
delete key [noreply]
redis和Memcached对比
Redis和Memcached都是常见的键值对存储系统,用于缓存数据。下面是Redis和Memcached之间的一些对比:
对比 | Redis | Memcached |
---|---|---|
数据结构 | 支持多种数据结构,如字符串、哈希、列表、集合和有序集合等。这使得Redis在处理复杂数据和实现更多功能方面更加灵活。 | 仅支持简单的键值对结构,只能存储字符串类型的数据。 |
持久化 | 提供持久化机制,支持快照(snapshotting)和AOF(Append-only file)两种方式。这样可以在服务器重启后恢复数据,防止数据丢失。 | 不提供持久化支持,数据只存在于内存中。服务器重启后,所有数据将被清空。 |
内存管理 | 采用灵活的内存管理策略,可以将数据持久化到磁盘上,并在需要时从磁盘中加载数据。可以设置最大内存限制,并支持内存淘汰策略,如LRU(最近最少使用)。 | 将所有数据存储在内存中,并且没有内存淘汰机制。当内存满时,新的数据无法存储,需要通过删除旧的数据来释放内存。 |
多线程支持 | 采用单线程模型,通过异步I/O来实现高性能。它可以处理并发请求,并且没有锁竞争,因此具有较低的线程开销。 | 采用多线程模型,使用线程池来处理并发请求。在高并发情况下,可以通过多线程处理请求提高吞吐量。 |
数据一致性 | 支持主从复制和Sentinel哨兵机制,可以实现数据的自动备份和故障转移,提供更高的可用性和数据一致性。 | 不支持自动备份和故障转移,不具备数据一致性保障。 |
生态系统和社区支持 | 拥有庞大的开源社区和丰富的生态系统,提供了许多工具、扩展和解决方案。 | 社区相对较小,生态系统相对简单。 |