memcache 最大内存可以设置多少?
memcache 最大内存可以设置为服务器可用内存的大小,但是建议不要将其设置为过大,以免影响系统的性能和稳定性。
一般来说,建议将 memcache 的最大内存设置为服务器可用内存的 50%~70%。
设置memcache实例的使用内存上限,memcache有类似内存淘汰机制么?
可以通过修改 memcache 配置文件中的 max_memory
参数来设置实例的使用内存上限。例如,-m 1024
表示将最大内存限制为 1GB。
memcache 有多种内存淘汰机制,可以通过配置文件中的 eviction_policy
参数来选择使用哪种淘汰策略。常见的策略有:
- LRU(Least Recently Used):淘汰最近最少使用的数据。
- LFU(Least Frequently Used):淘汰访问频率最低的数据。
- Random(随机淘汰):随机选择需要淘汰的数据。
同时,memcache 还支持手动删除指定的缓存数据,可以通过调用 delete
或 flush_all
方法来实现。
memcache 有多种内存淘汰机制,可以通过配置文件中的 eviction_policy 参数来选择使用哪种淘汰策略。 具体如何配置?
在 memcache 的配置文件中,可以通过 eviction_policy
参数来设置使用哪种内存淘汰机制。具体配置方法如下:
-
打开 memcache 配置文件,一般位于
/etc/memcached.conf
。 -
找到
eviction_policy
参数,如果没有则手动添加。 -
根据需要选择合适的淘汰策略,并将其值赋给
eviction_policy
参数,例如:- LRU 策略:
eviction_policy=lru
- LFU 策略:
eviction_policy=lfu
- 随机策略:
eviction_policy=random
- LRU 策略:
-
保存并关闭配置文件。
-
重启 memcache 服务,使新的配置生效。
需要注意的是,不同版本的 memcache 可能支持的淘汰策略不同,具体使用时需要查看对应版本的文档。
另外,淘汰策略的选择也应该根据具体的业务需求和数据特点来进行决策。
CentOS7 上yum安装的memcache 没有 /etc/memcached.conf,只有 /etc/sysconfig/memcached
CentOS 7 上通过 yum 安装的 memcached 确实没有 /etc/memcached.conf
配置文件,而是使用 /etc/sysconfig/memcached
文件来配置 memcached。
在 /etc/sysconfig/memcached
文件中,可以设置 memcached 的一些参数,如下所示:
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 127.0.0.1"
其中,PORT
参数表示 memcached 监听的端口号,USER
参数表示 memcached 运行的用户,MAXCONN
参数表示最大连接数,CACHESIZE
参数表示最大可用内存大小,OPTIONS
参数表示其他选项,如监听的 IP 地址等。
需要注意的是,使用 /etc/sysconfig/memcached
文件配置 memcached 时,参数名需要使用大写字母,参数值需要使用双引号括起来。此外,CACHESIZE
参数表示的是最大可用内存大小,而不是 memcached 实例的最大内存限制,实际的内存限制还需要在启动 memcached 时通过 -m
参数来设置。
可以在/etc/sysconfig/memcached 里设置内存淘汰策略吗
在 /etc/sysconfig/memcached
文件中,不能直接设置内存淘汰策略。/etc/sysconfig/memcached
文件只是用来设置 memcached 的一些基本参数的,例如监听端口、最大连接数、最大可用内存大小等等。
要设置内存淘汰策略,需要在启动 memcached 时通过命令行参数来设置。具体来说,可以通过 -o
参数来指定内存淘汰策略,例如:
memcached -m 64 -o lru,crawler -u memcached -l 127.0.0.1 -p 11211
上面的命令中,-o
参数指定了两个淘汰策略,分别是 LRU 和 Crawler。注意,不同版本的 memcached 支持的淘汰策略可能不同,具体使用时需要查看对应版本的文档。
另外,也可以通过在 /etc/systemd/system/memcached.service
文件中添加 Environment
参数来设置内存淘汰策略。具体来说,可以在 [Service]
段落中添加如下配置:
Environment="OPTIONS=-o lru,crawler"
然后重启 memcached 服务使其生效。
具体解释一下 -o lru,crawler
-o lru,crawler
是用来设置 memcached 内存淘汰策略的命令行参数。其中,lru
和 crawler
都是 memcached 支持的淘汰策略,具体含义如下:
-
LRU(Least Recently Used):最近最少使用。当内存达到上限时,淘汰最近最少使用的数据。这种策略适用于缓存中的数据访问模式具有热点的情况,即一部分数据的访问频率非常高,另一部分数据的访问频率很低。
-
Crawler:抓取式淘汰。当内存达到上限时,从内存中随机选择一些数据进行淘汰。这种策略适用于缓存中的数据访问模式比较均匀,即所有数据的访问频率差不多。
在 -o
参数中,可以同时指定多个淘汰策略,用逗号分隔。例如,-o lru,crawler
表示 memcached 会同时采用 LRU 和 Crawler 两种淘汰策略来淘汰数据。具体采用哪种策略,以及采用的顺序,取决于 memcached 的实现和内存使用情况。
对下面memcache的输出做一个解读
$ echo "stats settings" | nc xx.xx.xx.xx 11211
STAT maxbytes 0
STAT maxconns 65535
STAT tcpport 11211
STAT udpport 11211
STAT inter NULL
STAT verbosity 0
STAT oldest 112399819
STAT evictions on
STAT domain_socket NULL
STAT umask 700
STAT growth_factor 1.25
STAT chunk_size 48
STAT num_threads 4
STAT num_threads_per_udp 4
STAT stat_key_prefix :
STAT detail_enabled no
STAT reqs_per_event 20
STAT cas_enabled yes
STAT tcp_backlog 1024
STAT binding_protocol auto-negotiate
STAT auth_enabled_sasl no
STAT item_size_max 1048576
STAT maxconns_fast no
STAT hashpower_init 0
STAT slab_reassign no
STAT slab_automove 0
END
该输出显示了Memcached服务器的各种设置和配置参数。
- maxbytes:指定了服务器可以使用的最大内存量,此处为0,表示不限制内存使用量。
- maxconns:指定了服务器可以接受的最大并发连接数,此处为65535。
- tcpport:指定了服务器监听的TCP端口号,此处为11211。
- udpport:指定了服务器监听的UDP端口号,此处为11211。
- inter:指定了服务器的网络接口地址,此处为NULL,表示默认使用所有接口。
- verbosity:指定了服务器的日志输出级别,此处为0,表示只输出错误日志。
- oldest:指定了最早的缓存项的时间戳,用于LRU算法,此处为112399819。
- evictions:指定了是否启用缓存项的自动删除功能,此处为on,表示启用。
- domain_socket:指定了服务器使用的UNIX域套接字路径,此处为NULL,表示不使用UNIX域套接字。
- umask:指定了服务器创建文件的权限掩码,此处为700。
- growth_factor:指定了缓存分配增长因子,此处为1.25。
- chunk_size:指定了缓存块的默认大小,此处为48字节。
- num_threads:指定了服务器使用的线程数,此处为4。
- num_threads_per_udp:指定了每个UDP监听器使用的线程数,此处为4。
- stat_key_prefix:指定了统计信息的key前缀,此处为冒号(:)。
- detail_enabled:指定了是否启用详细统计信息,此处为no,表示不启用。
- reqs_per_event:指定了每个事件处理器可以处理的最大请求数,此处为20。
- cas_enabled:指定了是否启用CAS(Compare-And-Swap)协议,此处为yes,表示启用。
- tcp_backlog:指定了TCP监听器的连接请求队列长度,此处为1024。
- binding_protocol:指定了服务器使用的协议类型,此处为auto-negotiate,表示自动协商。
- auth_enabled_sasl:指定了是否启用SASL(Simple Authentication and Security Layer)认证,此处为no,表示不启用。
- item_size_max:指定了缓存项的最大大小,此处为1048576字节(即1MB)。
- maxconns_fast:指定了是否启用快速连接模式,此处为no,表示不启用。
- hashpower_init:指定了缓存哈希表的初始大小,此处为0,表示使用默认大小。
- slab_reassign:指定了是否启用缓存分配重分配功能,此处为no,表示不启用。
- slab_automove:指定了是否启用缓存块自动移动功能,此处为0,表示不启用。
STAT evictions on,启用缓存项的自动删除功能,这里使用的是哪种缓存淘汰策略?
Memcached中的缓存淘汰策略是基于LRU(Least Recently Used,最近最少使用)算法实现的。
当缓存空间达到最大限制时,Memcached会根据缓存项的访问时间戳,删除最近最少使用的缓存项,以腾出空间给新的缓存项使用。
因此,启用缓存项的自动删除功能(即evictions on)实际上就是启用了LRU算法。
参考
What is Memcached?
https://www.memcached.org
分布式缓存系统——memcache
https://www.cnblogs.com/lucilleye/p/15847553.html
分布式场景下redis已经逐渐取代了memcached,那么各有什么使用场景和优缺点呢?
https://www.dandelioncloud.cn/article/details/1503957289416617985
网友评论