首先说下抱歉,博主近期单位经常加班。博客更新有点慢。希望大家理解,草稿箱里存了不少内容,等不忙时候一点点填坑~

在一般的站点开发学习时候。都会把数据存放在RDBMS(关系型数据库系统(Relational Database Management System)中,server程序通过读取RDBMS来取得数据显示在页面上。

这在我们以往编写练习项目时候,是没有不论什么问题的。依据木桶理论,一仅仅水桶能装多少水取决于它最短的那块木板,在实际的站点开发中,随着数据量的增大。訪问的集中,就会出现RDBMS的负担加重、数据库响应恶化、 站点显示延迟等重大影响。

这时候就轮到Memcached大显身手了。顾名思义,Memcached是一套通过内存实现的缓存系统。并且它实现了分布式存储。一般我们使用Memcached的目的,是通过缓存数据库的一部分内容,降低对数据库的訪问,从而提高站点性能。

试想一下这么个情况,我们寻常上的淘宝网,首页里面有商品分类、商品品牌、热销商品、各种活动的展示。在不使用缓存的情况下,我们訪问首页,须要到RDBMS中查询分类、品牌、热销、活动等数十张表,会导致站点响应缓慢。

事实上这些首页的数据,每天的变化不是非常频繁。对实时性的要求不是非常高。我们能够让每次訪问首页的时候,程序从缓存中读取首页须要展示的数据。从而降低对RDBMS的压力。假设原本每秒訪问一次。如今直接訪问缓存。缓存每5分钟刷新,那么对RDBMS的訪问仅仅有原来的1/300。更何况实际使用中,站点的訪问,远远不止每秒一次,即使每秒10次、100次。对于RDBMS的訪问都是固定的。

Memcached尽管称为“分布式”缓存server,但server端并没有“分布式”功能。Memcached的分布式全然是在client实现的,client会依据保存的key来决定保存数据的Memcachedserver。

相同。取得数据的时候,也会依据key来从不同server上取得数据。

这样,将不同的键保存到不同的server上,就实现了Memcached的分布式。 Memcachedserver增多后,键就会分散。即使一台Memcachedserver发生问题无法连接。也不会影响其它的缓存。系统依旧能继续执行。

Memcached缓存系统的搭建事实上十分简单,在这里以Linux以下的搭建为例: 
系统环境ubuntu15.04 64位

安装Memcachedserver端仅仅须要一句命令

sudo apt-get install memcached 
安装完毕后通过以下命令启动Memcached

memcached -d -m 128 -p 11211 -u root 
顺便说下memcached的启动參数 
-d 选项是启动一个守护进程。 
-m 是分配给Memcache使用的内存数量,单位是MB。这里是128MB,默认是64MB 
-u 是执行Memcache的用户。这里是root 
-l 是监听的serverIP地址,默认应该是本机 
-p 是设置Memcache监听的port。默认是11211,最好是1024以上的port 
-c 选项是最大执行的并发连接数,默认是1024,这里设置了10240,依照你server的负载量来设定 
-P 是设置保存Memcache的pid文件位置 
-h 打印帮助信息 
-v 输出警告和错误信息 
-vv 打印client的请求和返回信息

开发时候建议加上-vv。此时会显示client的请求信息,比較方便我们进行调试。并且显示的效果比較cool。

Memcached安装完毕后,能够通过telnet ip port进行连接。如telnet 127.0.0.1 11211。

连接上Memcachedserver之后。能够通过命令行对缓存进行操作。

经常使用的Memcached命令有5种。 
set 
add 
replace 
get 
delete

前三个命令是用于操作存储在 Memcached中的键值对的标准改动命令。它们都非常easy易用,且都使用例如以下所看到的的语法:

command 

參数 使用方法 
key key 用于查找缓存值 
flags 能够包含键值对的整型參数,客户机使用它存储关于键值对的额外信息 
expiration time 在缓存中保存键值对的时间长度(以秒为单位,0 表示永远) 
bytes 在缓存中存储的字节点 
value 存储的值(始终位于第二行)

如今。我们来看看这些命令的实际使用。

 
不管怎样都存储的set 
set 命令用于向缓存加入新的键值对。

假设键已经存在,则之前的值将被替换。

仅仅有数据不存在时进行加入的add 
仅当缓存中不存在键时,add 命令才会向缓存中加入一个键值对。假设缓存中已经存在键。则之前的值将仍然保持相同,将获得响应NOT_STORED。

仅仅有数据存在时进行替换的replace 
仅当键已经存在时。replace 命令才会替换缓存中的键。

假设缓存中不存在键,将获得响应NOT_STORED。

get 
get 命令用于取得之前加入的键值对相关的值,get命令的key能够表示一个或者多个键。键之间以空格隔开。

gets 
不能顾名思义的觉得get是返回单个key,gets能够查询多个key,gets命令的功能相似于主要的get命令。

两个命令之间的差异在于,gets返回的信息略微多一些。

能够看到。gets命令比普通的get命令多返回了一个数字(上图中为3和2)。这个数字能够检查数据是否发生改变。当key相应的数据改变时。这个多返回的数字也会改变。

delete 
delete 用来删除Memcached中的不论什么现有值,删除已存在的键值和不存在的记录会返回不同的结果。

flush_all 
这个命令的用处非常easy。它总是执行成功。server会发送OK回应。

它的效果是使已经存在的缓存项目马上失效(缺省)。flush_all 实际上没有马上释放项目所占用的内存,而是在随后陆续有新的项目被储存时执行(这是由Memcached的懒惰检測和删除机制决定的)。

stats 
stats 命令的功能正如其名:输出所连接的 Memcached实例的当前统计数据。 
 
 

转载自我的技术博客: 
http://www.cc-lab.cn/memcachedonlinux/ 
(完)

Linux下搭建Memcached缓存系统的更多相关文章

  1. Linux下搭建DNS缓存服务器

    CentOS 6.10搭建本地DNS缓存服务器系统环境 1 [root@test ~]# cat /etc/redhat-release 2 CentOS release 6.10 (Final) 3 ...

  2. MongoDB学习笔记—Linux下搭建MongoDB环境

    1.MongoDB简单说明 a MongoDB是由C++语言编写的一个基于分布式文件存储的开源数据库系统,它的目的在于为WEB应用提供可扩展的高性能数据存储解决方案. b MongoDB是一个介于关系 ...

  3. Linux下搭建个人网站

    前不久在阿里买了一个服务器,然后开始第一次尝试搭建自己的个人网站.前端采用了bootstrap框架,后端采用的是PHP,数据库使用的是Mysql.新手第一次在linux下搭建遇见很多问题,在这里分享一 ...

  4. Linux下搭建PHP环境

    转载于: http://www.uxtribe.com/php/405.html 该站下有系列PHP文章. 在Linux下搭建PHP环境比Windows下要复杂得多.除了安装Apache,PHP等软件 ...

  5. Linux下搭建Lotus Domino集群

    Linux下搭建Lotus Domino 集群 本文内容是Linux平台下Lotus Domino服务器部署案例(http://chenguang.blog.51cto.com/350944/1334 ...

  6. Linux下搭建tomcat集群全记录(转)

    本文将讲述如何在Linux下搭建tomcat集群,以及搭建过程中可能的遇到的问题和解决方法.为简单起见,本文演示搭建的集群只有两个tomact节点外加一个apache组成,三者将安装在同一机器上:ap ...

  7. [编译] 3、在Linux下搭建51单片机的开发烧写环境(makefile版)

    星期二, 10. 七月 2018 01:01上午 - beautifulzzzz 一.SDCC(Small Device C Compiler)编译环境搭建 SDCC是一个小型设备的C语言编译器,该编 ...

  8. linux下搭建lamp环境以及安装swoole扩展

    linux下搭建lamp环境以及安装swoole扩展   一.CentOS 6.5使用yum快速搭建LAMP环境 准备工作:先更新一下yum源  我安装的环境是:apache2.2.15+mysql5 ...

  9. linux下搭建hexo环境

    最近对搭建个人博客比较感兴趣,但是刚搭建好next主题基本博客,电脑就坏了,借了一台电脑继续搞,不想在他电脑中弄太多环境,所以我准备在自己电脑的服务器上搭建hexo环境 服务器环境: (1)cento ...

随机推荐

  1. understand软件使用教程(转)

    源代码阅读工具(Scientific Toolworks Understand)的特色 1.支持多语言:Ada, C, C++, C#, Java, FORTRAN, Delphi, Jovial, ...

  2. 获取图书信息api

    https://www.zhihu.com/question/20306982 http://code.juhe.cn/docs/1109 https://developers.douban.com/ ...

  3. 洛谷 P1400 塔

    P1400 塔 题目描述 有N(2<=N<=600000)块砖,要搭一个N层的塔,要求:如果砖A在砖B上面,那么A不能比B的长度+D要长.问有几种方法,输出 答案 mod 10000000 ...

  4. 非常有用的sql脚本

    /*sql 语法学习*/ /*函数的学习---------------------------------------*/ 获取当前时间(时/分/秒):select convert(varchar(1 ...

  5. Java String对象的经典问题

     先来看一个样例,代码例如以下:  public class Test {       public static void main(String[] args) {           Strin ...

  6. item-设置可见性

    如果我们想要设置menu中item的可见行,有两种方式: 1.直接在menu的xml代码中设置 <menu> <item android:id="@+id/action_h ...

  7. mysql 语句优化心得

    排序导致性能较慢 优化策略:1.尽量不使用排序 2.只查有索引的结果然后 内连接查询 select  bizchance0_.*  from biz_chance bizchance0_, biz_b ...

  8. 【习题 6-5 UVA-1600】Patrol Robot

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 设dis[x][y][z]表示到(x,y)连续走了z个墙的最短路 bfs一下就ok [代码] /* 1.Shoud it use l ...

  9. 【习题 6-2 UVA - 712】S-Trees

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] dfs模拟一下就好. 先预处理一个dfs. 搞出来x叶子节点它的值是什么 [代码] /* 1.Shoud it use long l ...

  10. 中英文对照 —— 标点符号(punctuation)

    有限的几个: What Are the Fourteen Punctuation Marks in English Grammar? period:句号:comma:逗号:冒号:colon:分号:se ...