Memcache启动&存储原理&集群
一、 windows下安装启动
首先将memcache的bin文件夹增加到Path环境变量中。方便后面使用命令:
然后运行 memcached –dinstall 命令安装memcache的服务:
然后去计算进的服务页面能够看到已安装成功:
启动memcache的后台服务程序:
在后台服务处看到memcache的后台服务已启动:
然后运行。telnet 127.0.0.111211来打开Telnetclient:
结果发现没有开启Telnet的功能:
于是在“启动或关闭Windows功能”处。开启Telnetclient
然后须要重新启动电脑。使得更改生效。
接着再次运行telnet 127.0.0.1 11211来打开Telnetclient,成功打开:
測试是否可用,我们再Telnetclient中打命令,stats。出现例如以下信息表示正常:
然后我们存一个数据然后取出来:
到此为止。说明我们的memcache已经安装成功,并启动。
二、 作用
2.1 分布式缓存
随着我们从IT时代步入到DT时代,我们的软件架构也从单机到了集群、分布式。而。走向分布式的第一步就须要解决多台server共享登录信息的问题。
推而广之,就是要解决多台server共享公共信息的问题。
解决问题,我们能够将公共信息存储到状态server中,或者存储到数据库中,然后就是存储到我们的“分布式缓存”中等等。
因为读取缓存加上网络传输的时间,要远远小于读取数据库(IO)的时间等,所以分布式缓存是解决问题的非常优的一种方案。
2.2 降低数据库压力
我们全部的数据基本上都是保存在数据库其中的,每次频繁的存取数据库,导致数据库性能急剧下降。无法同一时候服务很多其它的用户,比方MySQL,特别频繁的锁表,那么我就能够Memcache来分担数据库的压力。也就是说能够做数据缓存,由于Memcache的读写性能能够说极致的完美。
三、 存储原理
Memcache採用键值对存储方式。
它本质是一个大的 hash表,key的最大长度为255个字符。最长过期时间为30天。
它的内存模型例如以下:Memcache预先将可支配的内存空间进行分区(Slab)。每一个分区里再分为多个块(Chunk)最大1M。但同一个分区中块的大小是固定的。然后。插入数据时,会依据数据大小寻找最合适的块。然后插入,当然这样也就会有部分内存浪费,但可一定程度上降低内存碎片,整体上,利大于弊。当Memcache的内存满后。它清除旧数据的原则为:LRU闲置>过期>最少訪问。
并且它採用的是惰性删除,它并没有提供监控数据过期的机制,而是惰性的。当查询到某个key的数据时。假设过期,那么直接抛弃。
四、 集群搭建原理
Memcache的集群-cluster搭建超级简单。根本不须要server端配置。它是通过client的驱动程序实现了集群的配置,并且配置超级简单。
client实现集群的原理:首先client配置多台集群机器的ip和port的列表。然后client驱动程序在写入数据之前,首先对key做处理得到hash值后,对总的机器的个数进行取余。然后就选择余数相应的机器。
例如以下图为一个C#存数据到Memcache集群的代码:
五、 与Redis对照
因为Redis也经常使用作分布式缓存,所以在自己用过二者之后,一个简单的体会例如以下(二者具体的对照。请到网上找专题就可以):
首先二者都是key-value式存储。
Memcache是多线程的(有对应的锁机制)。须要考虑线程安全问题。Redis是单线程的,不须要考虑线程安全问题。
Memcache没有提供主从复制机制,容错性不好。(没有HA-高可用性);Redis提供主从复制。
Memcache的集群配置很很easy,不须要配置server端。仅仅须要在client初始化一个serverList就可以。Redis须要配置server端。
Memcache仅仅能做缓存,不能持久化。Redis是一个NoSql内存数据库,提供两种持久化机制。
Redis提供五种value的类型,非常丰富(string /list/hash/set/zset);Memcache的数据类型相对单一。
六、 总结
因为我们当下的一些问题,高并发訪问数据库的痛楚:死锁;磁盘的IO之痛:效率极低;多服务共享数据等。
Memcache以它自己的优势:读写性能完美(没有提供主从复制,全部代码基本仅仅考虑性能最佳);超简单集群搭建。开源。学习成本低,入门很easy;丰富的成功案例等,成为了当代流行的分布式缓存框架。
Memcache启动&存储原理&集群的更多相关文章
- 分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)
本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...
- 分布式缓存技术redis学习(四)——redis高级应用(集群搭建、集群分区原理、集群操作)
本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...
- 分布式缓存技术redis系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)
本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...
- redis高级应用(集群搭建、集群分区原理、集群操作)
文章主目录 Redis集群简介 Redis集群搭建 Redis集群分区原理 集群操作 参考文档 本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 ...
- 进阶的Redis之哈希分片原理与集群实战
前面介绍了<进阶的Redis之数据持久化RDB与AOF>和<进阶的Redis之Sentinel原理及实战>,这次来了解下Redis的集群功能,以及其中哈希分片原理. 集群分片模 ...
- redis系列之4----redis高级应用(集群搭建、集群分区原理、集群操作)
文章主目录 Redis集群简介 Redis集群搭建 Redis集群分区原理 集群操作 参考文档 本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 ...
- win系统下启动linux上的kafka集群及使用
一.首先在win系统下C:\Windows\System32\drivers\etc文件夹中hosts文件加入例如以下内容: 10.61.6.167 slaves1 10.61.6.168 slave ...
- Redis原理及集群相关知识
读书笔记 <Redis开发与运维 > Redis使用场景 作为缓存层 减少对Mysql的压力 计数功能 比如使用原子命令incr 共享Session 设置过期时间 可以限制短信接口等调用 ...
- redis原理及集群主从配置
一.简介 存储系统背景 存储系统有三类: RDBMS oracle,dh2,postgresql,mysql,sql server NoSQL: KV NoSQL:redis,memcached 列式 ...
随机推荐
- Uva 1605 Building for UN【构造法】
题意:给出n个国家,给它们分配办公室,使得任意两个国家都有一对相邻的格子 看的紫书,最开始看的时候不理解 后来还是搜了题解--- 发现是这样的 比如说5个国家 应该输出 AAAA BBBB CCCC ...
- javascript中的正则示例
// 方式一var obj_re = new RegExp("\d+","gi"); //g 全局,i 不区分大小写obj_re.test("fasf ...
- 4月17日 (PS:由于时间问题,现在才发,望老师见谅)疯狂猜成语-----第三次站立会议 参会人员:杨霏,袁雪,胡潇丹,郭林林,尹亚男,赵静娜
疯狂猜成语-----第三次站立会议 参会人员:杨霏,袁雪,胡潇丹,郭林林,尹亚男,赵静娜 会议内容: 组员依次汇报自己的工作进度,并且提出自己在进行任务的过程中遇到的问题,是否解决以及解决办法. 以下 ...
- FCC高级编程篇之Symmetric Difference
Symmetric Difference Create a function that takes two or more arrays and returns an array of the sym ...
- DELL inspiron 14-7467 进入安全模式方法
您按住shift键不要松开,然后重启电脑,选择疑难解答-高级选项-启动设置-数字四 安全模式启动
- Artisan 命令
php artisan key:generate 生成 App Key php artisan make:controller 生成控制器 php artisan make:model 生成模型 ph ...
- 系统级脚本 rpcbind
[root@web02 ~]# vim /etc/init.d/rpcbind #! /bin/sh # # rpcbind Start/Stop RPCbind # # chkconfig: 234 ...
- 错误解决:error: expected ‘;’, ‘,’ or ‘)’ before ‘&’ token
今天看到一个比较有趣的题目,如下代码,分析输出结果 #include <stdio.h> void num(int &b) { b = 222; return; } int mai ...
- hdoj 1429 胜利大逃亡(续) 【BFS+状态压缩】
题目:pid=1429">hdoj 1429 胜利大逃亡(续) 同样题目: 题意:中文的,自己看 分析:题目是求最少的逃亡时间.确定用BFS 这个题目的难点在于有几个锁对于几把钥匙.唯 ...
- 阿里云部署Docker(9)----Dockerfile脚本定制镜像
本文为原创文章.转载需注明转自:http://blog.csdn.net/minimicall? viewmode=contents 技术爱好者都是比較懒的.而docker又是开发人员支持起来的.所以 ...