Memcached 客户端是否在内存中保存未使用的密钥?
Does a Memcached client hold unused keys in memory?
我有多项服务需要 Memcached(例如“预订服务”、“客户服务”)。我有两个选择:
- 设置一个 AWS Elasticache 集群并共享它,使用键“book-service-key1”、“customer-service-key1”等的前缀方案
- 为每个服务设置一个集群。
如果所有服务都使用同一个集群(选项 1),“预订服务”是否会在内存中保存“客户服务”使用的所有 Memcached 数据,即使它从未使用过这些键中的任何一个?
我的问题换句话说:如果我启动一个 memcached 客户端并将其加入集群,它会复制并保存所有数据,还是只复制并保存它访问的数据?
Memcache 客户端不会保存任何数据,因此一个服务保存来自其他服务的数据应该不会出现问题。
同时为每个服务创建多个集群会增加维护多个集群的开销。在这种情况下,利用率也会非常低,您需要保留一个缓冲区来存储额外的对象。
如果您可以在可以避免冲突的地方正确管理密钥命名,那么拥有至少 2-3 台机器的单个集群会很棒。
还需要考虑的一件事是拥有较小的实例,而不是 2 或 3 个巨大的实例。这样一个内存缓存实例的故障可以很容易地被数据库吸收。
我有多项服务需要 Memcached(例如“预订服务”、“客户服务”)。我有两个选择:
- 设置一个 AWS Elasticache 集群并共享它,使用键“book-service-key1”、“customer-service-key1”等的前缀方案
- 为每个服务设置一个集群。
如果所有服务都使用同一个集群(选项 1),“预订服务”是否会在内存中保存“客户服务”使用的所有 Memcached 数据,即使它从未使用过这些键中的任何一个?
我的问题换句话说:如果我启动一个 memcached 客户端并将其加入集群,它会复制并保存所有数据,还是只复制并保存它访问的数据?
Memcache 客户端不会保存任何数据,因此一个服务保存来自其他服务的数据应该不会出现问题。
同时为每个服务创建多个集群会增加维护多个集群的开销。在这种情况下,利用率也会非常低,您需要保留一个缓冲区来存储额外的对象。
如果您可以在可以避免冲突的地方正确管理密钥命名,那么拥有至少 2-3 台机器的单个集群会很棒。
还需要考虑的一件事是拥有较小的实例,而不是 2 或 3 个巨大的实例。这样一个内存缓存实例的故障可以很容易地被数据库吸收。