一、memcached是什么?

二、memcached不互相通信的分布式

三、安装步骤

四、本文介绍的命令主要包括:

  1. 存入命令(Storage commands)
  2. 取回命令(Retrieval command)
  3. 删除命令(Deletion)
  4. 统计(Statistics)
  5. 其他命令

 五、java客户端访问

一、     memcached是什么?

memcached 是以LiveJournal 旗下Danga Interactive 公司的Brad Fitzpatric 为首开发的一款软件。现在已成为 mixi、 hatena、 Facebook、 Vox、LiveJournal等众多服务中 提高Web应用扩展性的重要因素。

许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示。 但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、 网站显示延迟等重大影响。

这时就该memcached大显身手了。memcached是高性能的分布式内存缓存服务器。 一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、 提高可扩展性。

二、     memcached不互相通信的分布式

memcached尽管是“分布式”缓存服务器,但服务器端并没有分布式功能。 各个memcached不会互相通信以共享信息。那么,怎样进行分布式呢? 这完全取决于客户端的实现。

三、安装步骤 (我这里因为是win7系统,为了便于测试,安装的是windows 64bit版本)

1、 从http://pan.baidu.com/s/1sk7lNgp 下载,解压到指定目录,如:C:\Users\Admin\Desktop\memcached-win64-1.4.4-14\memcached

2、 用cmd打开命令窗口,转到解压的目录,输入 “memcached.exe -d install”。

3、打开控制面板,打开服务,可以看到memcached已经在上面,如果没有启动,则手动启动一下。

四、 本文介绍的命令主要包括:

1.存入命令(Storage commands)

<command name> <key> <flags> <exptime> <bytes> [noreply]\r\n

cas <key> <flags> <exptime> <bytes> <cas unique> [noreply]\r\n

<command name> 是"set", "add", "replace", "append" 或者"prepend"

key 长度最长不能超过250 characters

set 命令用于向缓存添加新的键值对。如果键已经存在,则之前的值将被替换。

add 仅当缓存中不存在键时,add 命令才会向缓存中添加一个键值对。如果缓存中已经存在键,则之前的值将仍然保持相同,并且您将获得响应NOT_STORED。

replace 仅当键已经存在时,replace 命令才会替换缓存中的键。如果缓存中不存在键,那么您将从 memcached 服务器接受到一条 NOT_STORED 响应。

Append 将此数据添加到现有数据后的现有key中

prepend 将此数据添加到现有数据前的现有key中

append和prepend命令不接受flags或exptime。他们更新现有的数据部分,而忽略了新的flag和exptime设置。

cas是一个check和set操作,这意味着, 存储这些数据,但在我访问过此数据后,再没有其他人更新。

<key>用于查找缓存值 
<flags>可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息 
<exptime>在缓存中保存键值对的时间长度(以秒为单位,0 表示永远) 
<bytes>在缓存中存储的字节点

<cas unique> 一个存在的64bit的entry值。这个值是客户端使用gets返回的值。

"noreply" 这是一个可选参数,服务端不会发送回复。

在这一行之下,是客户端要发送给服务端进行缓存的数据。

<data block>\r\n

<data block> 存储的数据块(可直接理解为key-value结构中的value)

实例操作:

可以看到我保存了carl到username中,结果是STORED。表示存储成功。

2.取回命令(Retrieval command)

get <key>*\r\n

gets <key>*\r\n

<key>* 是一个或多个被空格分开的字符串

返回的结果是0到多个items。存储的数据会被显示出来。结尾是一个

"END\r\n"

3.删除命令(Deletion)

delete <key> [noreply]\r\n

<key> 是客户端想要删除的服务端的缓存的key值

4.统计(Statistics)

stats 命令的功能正如其名:转储所连接的 memcached 实例的当前统计数据。在下例中,执行 stats 命令显示了关于当前 memcached 实例的信息:

STAT pid
22459                            
进程ID 
STAT uptime
1027046                       
服务器运行秒数 
STAT time
1273043062                      
服务器当前unix时间戳 
STAT version
1.4.4                        
服务器版本 
STAT pointer_size
64                      
操作系统字大小(这台服务器是64位的) 
STAT rusage_user
0.040000                 
进程累计用户时间 
STAT rusage_system
0.260000               
进程累计系统时间 
STAT curr_connections
10                  
当前打开连接数 
STAT total_connections
82                 
曾打开的连接总数 
STAT connection_structures 13             
服务器分配的连接结构数 
STAT cmd_get
54                           
执行get命令总数 
STAT cmd_set
34                           
执行set命令总数 
STAT cmd_flush
3                          
指向flush_all命令总数 
STAT get_hits
9                           
get命中次数 
STAT get_misses
45                        
get未命中次数 
STAT delete_misses
5                      
delete未命中次数 
STAT delete_hits
1                        
delete命中次数 
STAT incr_misses
0                        
incr未命中次数 
STAT incr_hits
0                          
incr命中次数 
STAT decr_misses
0                        
decr未命中次数 
STAT decr_hits
0                          
decr命中次数 
STAT cas_misses 0    cas未命中次数 
STAT cas_hits
0                           
cas命中次数 
STAT cas_badval
0                         
使用擦拭次数 
STAT auth_cmds 0 
STAT auth_errors 0 
STAT bytes_read
15785                     
读取字节总数 
STAT bytes_written
15222                  
写入字节总数 
STAT limit_maxbytes
1048576               
分配的内存数(字节) 
STAT accepting_conns
1                    
目前接受的链接数 
STAT listen_disabled_num
0                 
STAT threads
4                            
线程数 
STAT conn_yields 0 
STAT bytes
0                              
存储item字节数 
STAT curr_items
0                         
item个数 
STAT total_items
34                       
item总数 
STAT evictions
0                          
为获取空间删除item的总数

5.其他命令

flush_all该命令有一个可选的数字参数。它总是执行成功,服务器会发送 “OK\r\n” 回应。它的效果是使已经存在的项目立即失效(缺省),或在指定的时间后。此后执行取回命令,将不会有任何内容返回(除非重新存储同样的键名)。 flush_all 实际上没有立即释放项目所占用的内存,而是在随后陆续有新的项目被储存时执行(这是由memcached的懒惰检测和删除机制决定的)。

flush_all 效果是它导致所有更新时间早于 flush_all 所设定时间的项目,在被执行取回命令时命令被忽略。

 

 五、java客户端访问

所依赖的主要jar包

maven配置pom.xml

<!--  memcached client -->
<dependency>
<groupId>com.google.code.simple-spring-memcached</groupId>
<artifactId>spymemcached</artifactId>
<version>2.8.4</version>
</dependency>

java客户端测试代码(参考自文章:http://blog.csdn.net/arui_email/article/details/8129400)

另外大家也可以参考这篇文章http://blog.csdn.net/seelye/article/details/8511073

package com.carl.carlapp.memcached;

import java.net.InetSocketAddress;
import java.util.concurrent.Future; import net.spy.memcached.MemcachedClient; public class TestSpyMemcache { public static void main(String[] args) { // 保存对象 try { /* 建立MemcachedClient 实例,并指定memcached服务的IP地址和端口号 */ MemcachedClient mc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211)); Future<Boolean> b = null; /* 将key值,过期时间(秒)和要缓存的对象set到memcached中 */ b = mc.set("neea:testDaF:ksIdno", 900, "someObject"); if (b.get().booleanValue() == true) { mc.shutdown(); } } catch (Exception ex) { ex.printStackTrace(); } // 取得对象 try { /* 建立MemcachedClient 实例,并指定memcached服务的IP地址和端口号 */ MemcachedClient mc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211)); /* 按照key值从memcached中查找缓存,不存在则返回null */ Object b = mc.get("neea:testDaF:ksIdno"); System.out.println(b.toString()); mc.shutdown(); } catch (Exception ex) { ex.printStackTrace(); } } }

结果:

someObject

使用telnet 结果:

-----------------------------------------------------------------------

官方网站:http://www.memcached.org/

Github源代码: https://github.com/memcached/memcached

帮助文档:https://github.com/memcached/memcached/blob/master/doc/protocol.txt

另外,可以参考如下的博客

相关链接: 
Memcached笔记——(一)安装&常规错误&监控
Memcached笔记——(二)XMemcached&Spring集成 
Memcached笔记——(三)Memcached使用总结 
Memcached笔记——(四)应对高并发攻击 

分布式缓存memcached介绍,win7环境安装,常用命令set,get,delete,stats, java访问的更多相关文章

  1. CYQ.Data V5 分布式缓存MemCached应用开发介绍

    前言 今天大伙还在热议关于.NET Core的东西,我只想说一句:在.NET 跨平台叫了这么多年间,其实人们期待的是一个知名的跨平台案例,而不是一堆能跨平台的消息. 好,回头说说框架: 在框架完成数据 ...

  2. Memcached简介及环境安装

    Memcached简介及环境安装 author:SimpleWu 简介 Memcached是一个自由开源的,高性能,分布式内存对象缓存系统. Memcached是以LiveJournal旗下Danga ...

  3. NET分布式缓存Memcached测试体验

    原文地址:http://onlyonewt.blog.sohu.com/160168896.html 一直在学习关注大访问量网站的缓存是如何实现,之前看过Memcached的资料,忙于没有时间来真正测 ...

  4. 分布式缓存Memcached/memcached/memcache详解及区别

    先来解释下标题中的三种写法:首字母大写的Memcached,指的是Memcached服务器,就是独立运行Memcached的后台服务器,用于存储缓存数据的“容器”.memcached和memcache ...

  5. webpack 介绍 & 安装 & 常用命令

    webpack 介绍 & 安装 & 常用命令 webpack系列目录 webpack 系列 一:模块系统的演进 webpack 系列 二:webpack 介绍&安装 webpa ...

  6. .NET分布式缓存Memcached从入门到实战

    一.课程介绍 在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载.缓存是解决这个问题的好办法.但是ASP.NET中的虽然已经可以实现对页面局部进行缓存,但还是 ...

  7. 小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_37、分布式缓存Redis介绍

    笔记 1.分布式缓存Redis介绍      简介:讲解为什么要用缓存和介绍什么是Redis,新手练习工具          1.redis官网 https://redis.io/download   ...

  8. Appium 介绍及环境安装

    Appium是一个可用于测试iOS. Android操作系统和Windows桌面平台原生应用,移动网页应用和混合应用的自动化测试框架. 原生应用(Native App):用 android.iOS或者 ...

  9. Django之win7下安装与命令行工具

    Django之win7下安装与命令行工具 下载安装 pip3 install django 注意:自动添加环境变量 测试是否安装成功 1.输入python 2.输入import django 3.输入 ...

随机推荐

  1. 深入了解 Cloud Studio 开发在云端

    Cloud Studio 为开发者提供了一个永不间断的云端工作站,不管有没有开发经验都可以毫无门槛的体验云端开发的乐趣,支持绝大部分编程语言.Cloud Studio 提供了完整的 Linux 环境, ...

  2. Django 之 logging

    1. logging 1.1 什么是 logging logging 模块是 Python 内置的日志管理模块,不需要额外安装. 使用: import logging logging.critical ...

  3. I18N的前后端实现

    所需工具: 1.Vue                https://cn.vuejs.org/ 2.Vue-I18N      https://www.npmjs.com/package/vue-i ...

  4. sql server 中raiserror的使用

    server数据库中raiserror的作用就和asp.net中的throw new Exception一样,用于抛出一个异常或错误.这个错误可以被程序捕捉到. raiserror('错误的描述',错 ...

  5. js new一个对象的过程,实现一个简单的new方法

    对于大部分前端开发者而言,new一个构造函数或类得到对应实例,是非常普遍的操作了.下面的例子中分别通过构造函数与class类实现了一个简单的创建实例的过程. // ES5构造函数 let Parent ...

  6. 问题:Tomcat启动产生错误严重: Error initializing endpoint java.lang.Exception

    1问题描述: Tomcat启动产生错误严重: Error initializing endpoint java.lang.Exception: Socket bind failed: [730048] ...

  7. EIGRP-1-EIGRP的基础和演变

    值得一提的是,在2013年,Cisco决定开放EIGRP的定义,并将其发布为IETFInternet草案,即RFC的前身:文档名称为draft-savage-eigrp.从此,基本的EIGRP不再是机 ...

  8. ubuntu 的 python从2.* 升级到3.*

    1.在ubuntu 的终端中用代码下载最新的Python sudo apt-get install python3 2.用命令删除usr/bin/目录下的默认python link文件root@sal ...

  9. Restful 2 --DRF解析器,序列化组件使用(GET/POST接口设计)

    一.DRF - 解析器 1.解析器的引出 我们知道,浏览器可以向django服务器发送json格式的数据,此时,django不会帮我们进行解析,只是将发送的原数据保存在request.body中,只有 ...

  10. 同源策略与CORS跨域请求

    一.同源策略 1.简介 同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响.可以说Web是构建在同源 ...