下面列出了最常见的Memcached面试问题和答案。
1)什么是Memcached?
Memcached是一个通用的免费开放源代码, 高性能, 分布式内存对象缓存系统。它用于通过在RAM中缓存数据和对象来加速数据库驱动的网站。
简而言之, 你可以说Memcached是一个临时存储1小时/ 6小时/ 12小时/ 1天等数据的组件, 你可以将该组件与应用程序集成以提高其性能。
2)Memcached用哪种语言编写, 作者是谁?
Memcached用” C语言”编写。它由Brad Fitzpatrick于2003年开发。最初是为LiveJournal开发的, 但现在已被Wikipedia, Twitter, Facebook, Flickr, Netlog, YouTube等使用。
3)Memcached如何运作?
请参阅以下步骤以了解Memcached的工作方式:
- Memcached首先尝试获取用户的详细信息, 然后浏览器将请求发送到应用程序。
- 应用程序为特定用户调用Memcached。
- 如果在Memcached中找到结果, 请从Memcached返回结果。
- 如果在Memcached中未找到结果, 则Application将请求发送到数据库, 并将结果保存在Memcached中。
- 每个Memcached都有一个唯一的密钥。
- 代表密钥获取/设置数据工作。
- 你也可以删除一个或多个键。
- 你还可以将标签分配给一个/多个键。
4)第一个Memcached版本何时发布?
Memcached的第一个版本于2003年5月22日发布。
5)Memcached的用途是什么?通常在哪种类型的网站上使用?
Memcached用于提高动态数据库驱动的网站的速度。它将数据和对象缓存在RAM中, 以减少执行时间。
通常使用:
- 在社交网站中进行个人资料缓存。
- 用于内容聚合, 即HTML /页面缓存。
- 在电子商务网站中进行会话和HTML缓存。
- 在基于位置的服务中用于数据库查询扩展。
- 在游戏和娱乐服务中用于会话缓存。
- 它还可以用于跟踪Cookie /个人资料以进行广告定位。
6)Memcached的最佳用法是什么?
Memcached的最佳用法:
- 它很容易在Windows和UNIX操作系统中安装。
- 它为所有主要语言(如Java, PHP, C / C ++, Python, Ruby, Perl等)提供API集成。
- 它通过缓存提高了Web应用程序的性能。
- 它减轻了数据库服务器的负担。
- 它有助于你删除一个或多个值。
- 它有助于你更新键的值。
7)Memcached的缺点/局限性是什么?
Memcached的局限性或缺点列表:
- Memcached无法持久存储数据。
- Memcached不是数据库。它仅存储临时数据。
- Memcached无法缓存大对象。
- Memcached不是特定于应用程序的。
- Memcached不是容错的或高度可用的。
8)高速缓存在哪些条件下无法保留存储的信息?
在以下情况下, 缓存无法保留存储的信息:
- 当为缓存分配的内存用完时。
- 从缓存中删除项目时。
- 当缓存中的单个项目过期时。
9)Memcache和Memcached有什么区别?
Memcache和Memcached之间的区别:
表:
Memcache | Memcached |
---|---|
Memcached是一种高性能的分布式内存对象缓存系统。 | |
Memcached是一个扩展, 它使用libMemcached库提供用于与Memcached服务器通信的API。 | |
Memcached提供了一个会话处理程序(Memcached)。 | |
它用于通过减少数据库负载来增加动态Web应用程序。这是最新的API。 |
10)我们可以在多个项目之间共享一个Memcache实例吗?
是的, 我们可以在多个项目之间共享一个Memcache实例, 因为作为内存存储空间, Memcache可以在一个或多个服务器上运行。在Memcache中, 你还可以将客户端配置为与一组特定实例进行对话。
我们还可以在完全独立且没有任何干扰的同一主机上运行两个不同的Memcache进程。如果对数据进行分区, 那么重要的是要知道从哪个实例中获取数据或将数据放入其中。
11)解释SAP HANA和Memcached之间的区别吗?
SAP HANA是内存中的RDBMS, 主要用于加速SAP应用程序, 而Memcached是键/值缓存系统, 用于访问RDBMS和NoSQL数据库。
12)如何使用telnet命令连接Memcached服务器?
通过使用telnet主机名portNumber命令, 可以使用telnet命令连接Memcached服务器。
语法
$telnet HOST PORT
例子
给出的示例说明了如何连接到Memcached服务器并执行简单的set and get命令。假设Memcached的服务器运行在主机127.0.0.1和端口11211上。
$telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
// store data and get that data from server
set srcmini 0 900 9
memcached
STORED
get srcmini
VALUE srcmini 0 9
memcached
END
13)如何获得钥匙的价值?
通过使用get命令, 可以获得键的值。
语法
get key
例子
在给定的示例中, 我们使用srcmini作为键并将Memcached存储在其中, 其有效时间为900秒。
import net.spy.memcached.MemcachedClient;
public class MemcachedJava {
public static void main(String[] args) {
// Connecting to Memcached server on localhost
MemcachedClient mcc = new MemcachedClient(new
InetSocketAddress("127.0.0.1", 11211));
System.out.println("Connection to server sucessfully");
System.out.println("set status:"+mcc.set("srcmini", 900, "memcached").done);
// Get value from cache
System.out.println("Get from Cache:"+mcc.get("srcmini"));
}
}
14)如何设置密钥值?
通过使用set命令, 可以设置密钥的值。
语法
set key flags exptime bytes [noreply]
value
例子
在给定的示例中, 我们使用srcmini作为键并在其中设置值为Memcached, 其有效时间为900秒。
set srcmini 0 900 9
memcached
STORED
get srcmini
VALUE srcmini 0 9
Memcached
END
15)如何在钥匙上增值?
通过使用add命令, 你可以在键中添加值。
语法
add key flags exptime bytes [noreply]
value
例子
在给定的示例中, 我们使用” key”作为键, 并在其中添加900过期时间的Memcached值。
add key 0 900 9
memcached
STORED
get key
VALUE key 0 9
Memcached
END
16)如何替换密钥的值?
通过使用replace命令, 可以替换密钥的值。
语法
replace key flags exptime bytes [noreply]
value
例子
在给定的示例中, 我们使用” key”作为键, 并在其中添加900过期时间的Memcached值。此后, 将相同的密钥替换为” redis”。
add key 0 900 9
memcached
STORED
get key
VALUE key 0 9
memcached
END
replace key 0 900 5
redis
get key
VALUE key 0 5
redis
END
17)如何附加键的值?
通过使用append命令, 可以附加键的值。
语法
append key flags exptime bytes [noreply]
value
例子
在给定的示例中, 我们试图在不存在的键中添加一些数据。因此, Memcached返回NOT_STORED。此后, 我们设置一个键并将数据附加到其中。
append srcmini 0 900 5
redis
NOT_STORED
set srcmini 0 900 9
memcached
STORED
get srcmini
VALUE srcmini 0 14
memcached
END
append srcmini 0 900 5
redis
STORED
get srcmini
VALUE srcmini 0 14
memcachedredis
END
18)如何在键值前添加?
通过使用prepend命令, 你可以在键值之前添加值。
语法
prepend key flags exptime bytes [noreply]
value
例子
在给定的示例中, 我们试图在不存在的键中添加一些数据。因此, Memcached返回NOT_STORED。此后, 我们设置一个密钥并将数据放在其中。
prepend tutorials 0 900 5
redis
NOT_STORED
set tutorials 0 900 9
memcached
STORED
get tutorials
VALUE tutorials 0 14
memcached
END
prepend tutorials 0 900 5
redis
STORED
get tutorials
VALUE tutorials 0 14
redismemcached
END
19)如何删除密钥?
通过使用delete命令, 可以删除密钥。
语法
delete key [noreply]
例子
在给定的示例中, 我们将srcmini用作键, 并在其中添加900个有效时间的Memcached值。此后, 它将删除存储的密钥。
set srcmini 0 900 9
memcached
STORED
get srcmini
VALUE srcmini 0 9
memcached
END
delete srcmini
DELETED
get srcmini
END
delete srcmini
NOT_FOUND
20)如何显示统计数据?
通过使用stats命令, 你可以显示统计信息。
语法
stats
例子
stats
STAT pid 1162
STAT uptime 5022
STAT time 1415208270
STAT version 1.4.14
STAT libevent 2.0.19-stable
STAT pointer_size 64
STAT rusage_user 0.096006
STAT rusage_system 0.152009
STAT curr_connections 5
STAT total_connections 6
STAT connection_structures 6
STAT reserved_fds 20
STAT cmd_get 6
STAT cmd_set 4
STAT cmd_flush 0
STAT cmd_touch 0
STAT get_hits 4
STAT get_misses 2
STAT delete_misses 1
STAT delete_hits 1
STAT incr_misses 2
STAT incr_hits 1
STAT decr_misses 0
STAT decr_hits 1
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT touch_hits 0
STAT touch_misses 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 262
STAT bytes_written 313
STAT limit_maxbytes 67108864
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT hash_power_level 16
STAT hash_bytes 524288
STAT hash_is_expanding 0
STAT expired_unfetched 1
STAT evicted_unfetched 0
STAT bytes 142
STAT curr_items 2
STAT total_items 6
STAT evictions 0
STAT reclaimed 1
END
21)如何获取版本?
通过使用”版本”命令, 可以获得版本。
22)如何关闭连接?
通过使用Quit命令, 你可以关闭连接。
23)当数据更改时, 你将如何更新Memcached?
有两种方法可以在数据更改时更新Memchached:
- 通过主动清除缓存:在进行插入或更新时, 可以通过清除缓存来更新Memcached。
- 通过重置缓存:它与第一种方法稍有相似, 但是它不会删除键并等待下一个数据刷新缓存的请求, 它会在插入或更新后重置值。
24)什么是Dogpile效果?如何防止这种影响?
如果缓存过期, 并且网站同时被客户端发出的多个请求访问, 则此效果称为Dogpile效果。
可以通过使用信号量锁来防止此效果。在此系统中, 当值过期时, 第一个进程获取锁并开始生成新值。
25)当服务器意外关闭时, 存储在Memcached中的数据会如何处理?
在Memcached中, 数据不是永久存储的。它不是持久性数据, 因此, 如果服务器关闭或重新启动, 则将删除存储在Memcached中的所有数据。
26)如果你有多台Memcache服务器, 而其中一台拥有数据的Memcache服务器发生故障, 它是否会尝试从那台故障服务器中获取关键数据?
故障服务器中的数据不会被删除, 但是有自动故障的准备, 可以为多个节点配置自动故障。可以在任何套接字或Memcached服务器级别错误期间触发故障转移, 而不是在常规客户端错误(例如添加现有密钥等)期间触发故障转移。
27)如何最大程度地减少Memcached服务器停机?
以下是最小化Memcached服务器停机的方法:
- 当一个实例失败时, 其中几个实例将关闭, 这种情况将在客户端重新加载丢失的数据时给数据库服务器带来更大的负载。为避免这种情况, 你应该编写代码以最大程度地减少缓存踩踏现象, 并且其影响相对较小。
- 你可以使用丢失的计算机IP地址在新计算机上启动Memcached实例。
- 该代码是使服务器中断最小化的另一种选择, 因为它使你可以以最少的工作量自由更改Memcached服务器列表。
- 设置超时值是某些Memcached客户端针对Memcached服务器中断实现的另一种选择。当你的Memcached服务器出现故障时, 客户端将继续尝试发送请求, 直到达到超时限制。
Java OOP面试问题 |
Java字符串和异常问题 |
JDBC面试问题 |
JSP面试问题 |
休眠面试问题 |
SQL面试题 |
Android面试题 |
MySQL面试问题 |
Memcache模块为Memcached提供了方便的过程和面向对象的接口。
Memcache是一个扩展, 使你可以通过方便的面向对象(OOP)和过程接口进行工作。
Memcache模块提供了会话处理程序(Memcache)。
它旨在减少动态Web应用程序中的数据库负载。
Java基础面试问题
Java多线程问题
Java Collection面试题
Servlet面试问题
春季面试问题
PL / SQL面试问题
Oracle面试问题
SQL Server面试问题
评论前必须登录!
注册