php – 如果数据已满,memcached中的数据如何被替换,以及memcache的性能?

来自memcached wiki:

When the table is full,subsequent inserts cause older data to be purged in least recently used (LRU) order.

我有以下问题:

>将清除哪些数据?是插入较旧的那个,还是最近最少使用的那个?我的意思是,如果最近访问的数据是d1,这是最老的插入和缓存已满,而替换数据将取代d1?
>我使用PHP与memcached进行交互.我可以控制memcached中数据的替换方式吗?就像我不希望我的一些数据被替换,直到它过期,即使缓存已满.不应替换此数据,而是可以删除其他数据以进行插入.
>数据过期后会立即删除吗?
>存储在memcached性能上的密钥数量有什么影响?
> memcached.conf中-k选项的意义是什么?我无法理解“锁定所有分页内存”的含义.此外,README中的描述是不够的.

当memcached需要在内存中存储新数据,并且内存已满时,会发生什么:

> memcached搜索合适的*过期条目,如果找到,则替换该条目中的数据.哪个答案点3)数据不会立即删除,但是当应该设置新数据时,会重新分配空间
>如果未找到过期条目,则替换最近最少使用的条目

*请记住memcached如何处理内存:它分配​​不同大小的块,因此您要在缓存中设置的数据大小在决定删除哪个条目时起作用.条目为2K,4K,8K,16K ……等,最大为1M.

所有这些信息都可以在in the documentation找到,所以请仔细阅读.正如@deceze所说,memcached并不保证数据在内存中可用,你必须为缓存未命中风暴做好准备.避免风暴的一个有趣的方法是设置一个随机偏移的过期时间,例如10 [0..10]分钟,这意味着一些项目将被存储10,其他项目将被存储20分钟(目标不是所有项目同时到期).

如果你想在缓存中保留一些东西,你必须做两件事:

>一个预热脚本,要求缓存加载数据.所以最近总是使用它
> 2项目的到期时间:一个真正的到期时间,比方说30分钟;另一个 – 与项目一起缓存 – 逻辑到期时间,让我们说在10分钟内.从缓存中检索数据时,检查逻辑到期时间以及是否已过期 – 重新加载数据并将其在缓存中再设置30分钟.这样,您永远不会达到真正的缓存过期时间,并且会定期刷新数据.

5) What is the significance of -k option in “memcached.conf”. I am not
able to understand what does “Lock down all paged memory” means. Also
description in README is also not sufficient.

无论你为memcached分配多少内存,它都只会使用它所需的数量,例如:它只分配实际使用的内存.但是,使用-k选项时,在启动memcached时会保留整个内存,因此无论是否需要,它总是分配全部内存.

相关文章

文章浏览阅读8.4k次,点赞8次,收藏7次。SourceCodester Onl...
文章浏览阅读3.4k次,点赞46次,收藏51次。本文为大家介绍在...
文章浏览阅读1.1k次。- php是最优秀, 最原生的模板语言, 替代...
文章浏览阅读1.1k次,点赞18次,收藏15次。整理K8s网络相关笔...
文章浏览阅读1.2k次,点赞22次,收藏19次。此网络模型提供了...
文章浏览阅读1.1k次,点赞14次,收藏19次。当我们谈论网络安...