Memcached入门到缓存组件的选型

前言

本篇文章会介绍如何安装memcached和使用,会从其概念、安装、使用命令去介绍;以及Memcached设计理念;Redis VS Memcached如何选择?它有哪些应用场景? Memcached集群操作的。都会详细的去介绍

Memcached简介

memcached是一套分布式的快取系统,与redis相似;免费和开源,高性能,分布式内存对象缓存系统。通过减轻数据库负载来加速动态Web应用程序,Memcached简单而强大。

  • 本质上就是一个内存Key-Value缓存

数据结构也比较少

  • 协议简单,使用文本行的协议
  • 不支持数据持久化,服务器关闭后数据全部丢失

这也是对比redis会少了这个

  • 简洁强大,上手容易,便于快速开发
  • 没有安全机制
memcached 项目地址
在git中的协议支持 有二进制和 文本的协议

安装和测试

memcached单机到集群完整搭建过程 提取码: 4mxh 

在linux上下载安装包并解压,进行启动就可以了比较简单,包括配置

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 -m 64 -p 11211 -u root -vvvv
‐p <num> 监听的TCP端口(默认: 11211)
‐U <num> 监听的UDP端口(默认: 11211, 0表示不监听)
‐l <ip_addr> 监听的IP地址。(默认:INADDR_ANY,所有地址)
‐d 作为守护进程来运行
‐u <username> 设定进程所属用户(仅root用户可以使用)
‐m <num> 所有slab class可用内存的上限(默认:64MB)
‐v 提示信息(在事件循环中打印错误/警告信息。)
‐vv 详细信息(还打印客户端命令/响应)
-vvv 超级详细信息

需要依赖于libevent‐devel

配置

第一次设置memcached的,你要注意`-m`,`-d`和`-v`如果是通过软件包管理系统安装的memcached,/etc/sysconfig/memcached配置脚本文件。如果是自己编译构建的memcached,源码文件中的'scripts /'目录包含几个init脚本示例。检查运行是配置

$ echo "stats settings" | nc localhost 11211
# 其他更多参数可以通过下面的命令查看
./memcached -h

连接

telnet连接上11211端口就可以作为客户端给服务端发送指令了。

# telnet memcached_server_ip port例如:
telnet localhost 11211

./memcache -h 获得帮助 
./memcache -vvv 详细信息 
./memcache -d  守护线程启动
等等命令 
总的来说启动memcache 是很简单的,命令查询也比较简单
连接操作memcache:
这里和redis不一样  直接使用telnet 就可以当作客户端;和redis一样 也是采用set命令   直接可以赋值。

类似 redis 中nx的命令  add  已经存在则报错  用于将 value存储在指定的 key中,存在则不更新。

 包括replice命令 ,替换已存在的 key的value,不存在,则替换失败。

 这里在java客户端中使用比较简单

memcache 的使用命令

  客户端使用

xmemcached  对 缓存进行使用

客户端支持的特性:集群下多服务器选择(利用hash槽类似,进行选择服务器)、节点权重配置、失败/故障转移、数据压缩、连接管理
项目的地址
包括文档中有一些 对memcached 的操作

 在代码中使用

 在spring 中使用 

  • 配置对应的memcachedclient

  •  它自己的内存内存分配机制可以使得它可以存大数据文件等

服务端配置

  • 命令行参数
查看memcached -h或man memcached获取最新文档
  • init脚本
如果通过yum应用商店安装,可以使用/etc/sysconfig/memcached文件进行参数配置
  •  检查运行配置
stats settings 查看运行中的memcached的配置(可以用telnet连接memcached进行测试)

 直接使用配置该内容。

Memcached设计理念

总的来说简单。

  • 简单的键/值存储
服务器不关心您的数据是什么样的,只管数据存储
  • 服务端功能简单,很多逻辑依赖客户端实现
客户端专注如何选择读取或写入的服务器,以及无法联系服务器时要执行的操作。
服务器专注如何存储和管理何时清除或重用内存
  • Memcached实例之间没有通信机制
  • 每个命令的复杂度为 O(1)
慢速机器上的查询应该在1ms以下运行。高端服务器的吞吐量可以达到每秒数百万 ,里面的操作 默认就是多线程的。多核进行处理的。
  • 缓存自动清除机制 lru算法
  • 缓存失效机制 自己选择发到客户端数据  服务端自动过期

性能

Memcached性能的关键是硬件,内部实现是hash表,读写操作都是O(1)。硬件好,几百万的QPS都是没问题的。
最大连接数限制
内部基于事件机制(类似JAVA NIO)所以这个限制和nio类似,只要内存、操作系统参数进行调整,轻松几十万。
集群节点数量限制
理论是没限制的,但是节点越多,客户端需要建立的连接就会越多。
如果要存储的数据很多,优先考虑可以增加内存,成本太高的情况下,再增加节点。
memcached服务端没有分布式的功能,所以不论是集群还是主从备份,都需要第三方产品支持。
可以这样理解就是分布式的hashmap

服务器硬件需要

  • CPU要求
CPU占用率低,默认为4个工作线程
  • 内存要求
Memcached 内容存在内存里面,所有内存使用率高
建议 Memcached 实例独占服务器,而不是混用。
建议每个 Memcached 实例内存大小都是一致的,如果不一致则需要进行权重调整。
  • 网络要求
根据项目传输的内容来定,网络越大越好,虽然通常10M就够用了。
建议:项目往memcached传输的内容保持尽可能的小

Memcached应用场景

Redis与Memcached

 这里进行对比,也是因为数据只支持list,才可以考虑大数据的方式,并且在内存中。如果就内存而言,Memcached是不错的选择的。简单方便快捷;内存管理机制上是两种方式不一样的。

Memcached应用场景

应用场景:
1、 数据查询缓存:将数据库中的数据加载到memcahced,提供程序的访问速度。 
2、 计数器的场景:通过incr/decr命令实现评论数量、点击数统计、操作次数等等场景。
3、 乐观锁实现:例如计划任务多实例部署的场景下,通过CAS实现不重复执行。也是和redis不一样上,redis本身是单线程,因此不存在这个
4、 防止重复处理:CAS命令

Memcache集群

对于memcache是不支持集群的,多个memcache是不会相互交互的,因此 需要中间件

 需要一个中间件去转换处理,这个中间件还得翻倍去处理 维护各个memcache,这个中间件是维护在客户端的。

 xmemcache 就可以使用一致性hash算法选择,并在在代码中配置好,或者在配置文件配置是一样的。

 或者

Twemproxy

twemproxy(nutcracker) 是 Twitter开源的轻量级 memcached / redis 代理服务器,本质就是一个集群管理工具,主要用来弥补 Redis和 Memcached对集群管理的不足,其完成的最大功劳就是通过在后端减少同缓存服务器的连接数从而增加吞吐量。
部署方式

  • 安装依赖
yum install autoconf
yum install automake
yum install libtool
  • 安装twemproxy代理
wget https://github.com/twitter/twemproxy/archive/master.zip
unzip master.zip
cd twemproxy
autoreconf -fvi
./configure --enable-debug=full
make
src/nutcracker -h
  • 查看 twemproxy帮助
src/nutcracker -h
  • 准备 twemproxy配置文件
vim /usr/local/twemproxy/conf/nutcracker.yml
‐ 修改配置文件
memcached:
- 如果指定了ip地址,则只会允许对应的IP地址连接,要允许外网地址则使用0.0.0.0代替127.0.0.1
  listen: 127.0.0.1:22124
  hash: fnv1a_64
  distribution: ketama
  timeout: 100
  auto_eject_hosts: true
  server_retry_timeout: 2000
  server_failure_limit: 3
  servers:
   - 127.0.0.1:11220:1
   - 127.0.0.1:11221:1
   - 127.0.0.1:11222:1
  • 检查yml语法
/usr/local/twemproxy/src/nutcracker -t
  • 启动twemproxy 后台启动加参数-d
/usr/local/twemproxy/src/nutcracker -d

Memcached监控命令  

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

踩踩踩从踩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值