memcache 启动 储存原理 集群
一、 windows下安装启动
首先将memcache的bin目录加入到Path环境变量中,方便后面使用命令:
然后执行 memcached –dinstall 命令安装memcache的服务:
然后去计算进的服务页面可以看到已成功安装:
启动memcache的后台服务程序:
在后台服务处看到memcache的后台服务已启动:
然后执行,telnet 127.0.0.111211来打开Telnet客户端:
结果发现没有开启Telnet的功能:
于是在“启动或关闭Windows功能”处,开启Telnet客户端
然后需要重启电脑,使得更改生效。接着再次执行telnet 127.0.0.1 11211来打开Telnet客户端,成功打开:
测试是否可用,我们再Telnet客户端中打命令,stats,出现如下信息表示正常:
然后我们存一个数据然后取出来:
到此为止,说明我们的memcache已经成功安装,并启动。
二、 作用
2.1 分布式缓存
随着我们从IT时代步入到DT时代,我们的软件架构也从单机到了集群、分布式。而,走向分布式的第一步就需要解决多台服务器共享登录信息的问题。推而广之,就是要解决多台服务器共享公共信息的问题。
解决这个问题,我们可以将公共信息存储到状态服务器中,或者存储到数据库中,然后就是存储到我们的“分布式缓存”中等等。由于读取缓存加上网络传输的时间,要远远小于读取数据库(IO)的时间等,所以分布式缓存是解决这个问题的很优的一种方案。
2.2 减少数据库压力
我们所有的数据基本上都是保存在数据库当中的,每次频繁的存取数据库,导致数据库性能急剧下降,无法同时服务更多的用户,比如MySQL,特别频繁的锁表,那么我就可以Memcache来分担数据库的压力,也就是说可以做数据缓存,因为Memcache的读写性能可以说极致的完美。
三、 存储原理
Memcache采用键值对存储方式。它本质是一个大的 hash表,key的最大长度为255个字符,最长过期时间为30天。
它的内存模型如下:Memcache预先将可支配的内存空间进行分区(Slab),每个分区里再分为多个块(Chunk)最大1M,但同一个分区中块的大小是固定的。然后,插入数据时,会根据数据大小寻找最合适的块,然后插入,当然这样也就会有部分内存浪费,但可一定程度上减少内存碎片,总体上,利大于弊。当Memcache的内存满后,它清除旧数据的原则为:LRU闲置>过期>最少访问。而且它采用的是惰性删除,它并没有提供监控数据过期的机制,而是惰性的,当查询到某个key的数据时,如果过期,那么直接抛弃。
四、 集群搭建原理
Memcache的集群-cluster搭建超级简单,根本不需要服务器端配置。它是通过客户端的驱动程序实现了集群的配置,而且配置超级简单。
客户端实现集群的原理:首先客户端配置多台集群机器的ip和端口的列表。然后客户端驱动程序在写入数据之前,首先对key做处理得到hash值后,对总的机器的个数进行取余,然后就选择余数对应的机器。
如下图为一个C#存数据到Memcache集群的代码:
五、 与Redis对比
由于Redis也常用作分布式缓存,所以在自己用过二者之后,一个简单的体会如下(二者详细的对比,请到网上找专题即可):
首先二者都是key-value式存储。
Memcache是多线程的(有相应的锁机制),需要考虑线程安全问题;Redis是单线程的,不需要考虑线程安全问题。
Memcache没有提供主从复制机制,容错性不好。(没有HA-高可用性);Redis提供主从复制。
Memcache的集群配置非常非常简单,不需要配置服务器端,只需要在客户端初始化一个serverList即可;Redis需要配置服务器端。
Memcache只能做缓存,不能持久化;Redis是一个NoSql内存数据库,提供两种持久化机制。
Redis提供五种value的类型,很丰富(string /list/hash/set/zset);Memcache的数据类型相对单一。
六、 总结
由于我们当下的一些问题,高并发访问数据库的痛楚:死锁;磁盘的IO之痛:效率极低;多服务共享数据等。Memcache以它自己的优势:读写性能完美(没有提供主从复制,所有代码基本只考虑性能最佳);超简单集群搭建;开源;学习成本低,入门非常容易;丰富的成功案例等,成为了当代流行的分布式缓存框架。
memcache 启动 储存原理 集群的更多相关文章
- 启动关闭zookeeper集群的脚本
启动hadoop Ha集群是,每次都要手动启动每个zk节点,实在是太麻烦了.于是乎自己写了个脚本startAllZK.sh: 需要启动的节点,先在 NODENAME_ARR 数组中配置好,zkServ ...
- Hadoop ha CDH5.15.1-hadoop集群启动后,集群容量不正确,莫慌,这是正常的表现!
Hadoop ha CDH5.15.1-hadoop集群启动后,集群容量不正确,莫慌,这是正常的表现! 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.集群启动顺序 1>. ...
- 2) broadcast,这是启动完毕之后,集群中的服务器开始接收客户端的连接一起工作的过程,如果客户端有修改数据的改动,那么一定会由leader广播给follower,所以称为”broadcast”.
2) broadcast,这是启动完毕之后,集群中的服务器开始接收客户端的连接一起工作的过程,如果客户端有修改数据的改动,那么一定会由leader广播给follower,所以称为”broadcast” ...
- [k8s]简单启动一个k8s集群
简单启动一个k8s集群 kube-master mkdir -p /root/logs/api-audit /root/logs/controller /root/logs/scheduler kub ...
- Memcache 分布式高可用集群介绍
分布式缓存需考虑如下三点: 1.缓存本身的水平线性扩展的问题. 2.缓存大病罚下的本身性能问题. 3.避免缓存的单点鼓掌问题. 分布式缓存存在的问题: 1.内存本身的管理问题.内存的分配,管理和回收机 ...
- windows下apache httpd2.4.26集群完整搭建例子:下载、启动、tomcat集群例子
第一部分——下载 1.1: 百度搜索apache httpd关键字,第一个链接既是官方下载地址.如果这一步不会,此篇文章不适合你阅读,请自行停止. 1.2:进入官网http://httpd.apach ...
- Linux环境下配置及启动Hadoop(伪集群)
1.下载tag软件包后,我习惯放到software文件夹下,并建立app文件夹2.通过tar -zxvf hadoop-2.6.0-cdh5.7.0.tar.gz -C ~/app/ 命令解压到app ...
- 启动原生Hadoop集群或伪分布环境
一:启动Hadoop 集群或伪分布安装成功之后,通过执行./sbin/start-all.sh启动Hadoop环境 通过jps命令查看当前启动进程是否正确~ [root@neusoft-master ...
- Zookeeper_阅读源码第一步_在 IDE 里启动 zkServer(集群版)
上篇文章Zookeeper_阅读源码第一步_在 IDE 里启动 zkServer(单机版)讲了在 idea 里以单机的方式启动zookeeper,这篇介绍一下以集群的方式启动. 集群方式启动,才会真正 ...
随机推荐
- SQL&SQLite
注册博客园有一年多了,每次都是来找点资料,从来没有写过点什么,促使我开始写博客的原因主要有两点 一是在查找资料的过程中,经常需要重复的查找某个知识点,一个知识点时间长了之后总是忘记,这样重复的过程却是 ...
- Linux学习(四)单用户模式、救援模式、虚拟机克隆、linux互连(包括密匙登录)
一.单用户模式 忘记root密码后,找回密码有两种方法: 单用户(grub没有加密的情况下可以使用) 救援模式 这一节我们先讲单用户模式 1.先重启(3种方法) reboot init 6 sho ...
- Leetcode题解(一)
1.Two Sum 题目 此题第一解题思路,就是最常见的方法,两个指针嵌套遍历数组,依次判断当前指针所指向的值是否满足条件.代码如下; class Solution { public: vector& ...
- HDU 6092 Rikka with Subset
Rikka with Subset Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- HDU 2665 Kth number(划分树)
Kth number Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...
- 2016-2017 ACM-ICPC, NEERC, Southern Subregional Contest H. Delete Them
H. Delete Them time limit per test 2 seconds memory limit per test 512 megabytes input standard inpu ...
- empty()和remove()的区别
这两个都是删除元素,但是两者还是有区别的. remove()这个方法呢是删除被选元素的所有文本和子元素,当然包括被选元素自己. 而empty()呢,被选元素自己是不会被删除的. 比如: <div ...
- html网页中加载js脚本 下载下来是乱码(文件编码格式)
问题描述: 在一个index.html网页中,引入了jquery脚本,但是却出现错误,提示$ is not defined <!DOCTYPE html> <html lang=&q ...
- :after伪类+content内容生成
:after伪类+content 清除浮动的影响 浮动元素会让此div的高度塌陷.如下例子: .box{padding:10px; background:gray;} .l{float:left;} ...
- RobotFramework自动化测试框架-移动手机自动化测试Get Element Location关键字的使用
Get Element Location关键字用来获取一个Element的Location位置,该关键字接收一个参数[ locator ] 示例1:使用Get Element Location来获取一 ...