memcache
2020-03-03 本文已影响0人
小蜗牛Aaron
memcached简介
免费和开源,高性能,分布式内存对象缓存系统。通过减轻数据库负载来加速动态Web应用程序,Memcached简单而强大。
- 本质上就是一个内存Key-Value缓存
- 协议简单,使用文本行的协议
- 不支持数据持久化,服务器关闭后数据全部丢失
- 简洁强大,上手容易,便于快速开发
- 没有安全机制
安装与测试
yum install libevent-devel
wget https://memcached.org/latest mv latest memcached-1.5.12.tar.gz tar -zxf memcached-1.5.12.tar.gz
cd memcached-1.5.12 ./configure --prefix=/usr/local/memcached
make && sudo make install
# 启动并使用Memcached
cd =/usr/local/memcached/ ./bin/memcached -m 64 -p 11211 -u root -vvv
# 使用memcached
# telnet memcached_server_ip port例如:
telnet localhost 11211
常用启动参数
常用命令
常用命令
客户端使用(xmemcached)
MemcachedClient client=new XMemcachedClient("host",11211);
//同步存储value到memcached,缓存超时为1小时,3600秒。
client.set("key",3600,someObject);
//从memcached获取key对应的value
Object someObject=client.get("key");
//从memcached获取key对应的value,操作超时2秒
someObject=client.get("key",2000);
//更新缓存的超时时间为10秒。
boolean success=client.touch("key",10);
//删除value
client.delete("key");
客户端支持的特性:集群下多服务器选择、节点权重配置、失败/故障转移、数据压缩、连接管理
服务端配置
- 命令行参数
查看memcached -h或man memcached获取最新文档 - init 脚本
如果通过yum应用商店安装,可以使用/etc/sysconfig/memcached文件进行参数配置 - 检查运行配置
stats settings 查看运行中的memcached的配置(可以用telnet连接memcached进行测试)
memcached设计理念
- 简单的健/值存储
服务器不关心你的值是什么样子的 只管存储 - 服务端功能简单 很多都依赖客户端实现
客户端专注如何选择读取或写入的服务器,以及无法联系服务器时要执行的操作。
服务器专注如何存储和管理何时清除或重用内存 - Memcached实例之间没有通信机制
- 每个命令的复杂度为 O(1)
慢速机器上的查询应该在1ms以下运行。高端服务器的吞吐量可以达到每秒数百万 - 缓存自动清除机制
- 缓存失效机制
memcached性能
Memcached性能的关键是硬件,内部实现是hash表,读写操作都是O(1)。硬件好,几百万的QPS都是没问题的
最大连接数限制
内部基于事件机制(类似JAVA NIO)所以这个限制和nio类似,只要内存、操作系统参数进行调整,轻松几十万。
集群节点数量限制
理论是没限制的,但是节点越多,客户端需要建立的连接就会越多。
如果要存储的数据很多,优先考虑可以增加内存,成本太高的情况下,再增加节点。
memcached服务端没有分布式的功能,所以不论是集群还是主从备份,都需要第三方产品支持。
服务器硬件需要
- CPU要求
CPU占用率低,默认为4个工作线程 - 内存要求
memcached内容存在内存里面,所有内存使用率高
建议memcached实例独占服务器,而不是混用。
建议每个memcached实例内存大小都是一致的,如果不一致则需要进行权重调整。 - 网络要求
根据项目传输的内容来定,网络越大越好,虽然通常10M就够用了。
建议:项目往memcached传输的内容保持尽可能的小
memcached使用场景
redis vs memcached
redis vs memcached
- 数据查询缓存:将数据库中的数据加载到memcahced,提供程序的访问速度。
- 计数器的场景:通过incr/decr命令实现评论数量、点击数统计、操作次数等等场景。
- 乐观锁实现:例如计划任务多实例部署的场景下,通过CAS实现不重复执行。
- 防止重复处理:CAS命令
memcached 集群
集群支持
集群方案 TwemProxy
twemProxy
memcached监控命令
memcached监控命令