文档章节

初学 Java MemCache 自己的总结。

HelloWordToo
 HelloWordToo
发布于 2015/08/20 15:06
字数 1109
阅读 1946
收藏 15

 

 

 

 

 

MemCached 个人总结

 

 

 

 

 

 

 

 

1. MemCached 简介

 

Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap所有数据都放在储存在内存中。

 

2. 使用MemCached准备

 

Memcached 插件,Memcached完全依赖它,在使用Memcached必须启动这个插件。双击。

 

这代表 Memcached插件已经启动成功,如果插件停止,那么所有的内存数据将会被销毁。

 

3. MemCached 用到的 jar 

 

 

4. MemCached 流程

 

 

5. MemCached 实际使用个人思路

 

MemCacheUtil 负责Cache 底层操作

MemCacheSupport 负责调用Util 减化操作、

公共初始化数据↓

创建 公共数据类

MemCacheUtil进行初始化

根据特殊需要↓

EntityCache 实体CacheDao

EntityCacheImpl 实体CacheDaoImpl 继承 MemCacheSupport

 

6. MemCaChed 配置

 

 

服务器端口:可以设置多个Ip,实现分布式缓存

memcache.server=127.0.0.1:11211

缓存大小

Memcache.weights = {1}

缓冲的基本信息

初始连接数、最小最大连接数、最大处理时间

memcache.initConn=20

memcache.minConn=10

memcache.maxConn=50

线程休眠时间

memcache.maintSleep=3000

禁止使用nagle算法

memcache.nagle=false

请求缓存超时时间

memcache.socketTO=3000

当一个服务器请求超时是否去访问另一台

memcache.failover=true

最大处理时间

memcache.maxidle=1000*30*30

检查服务器是否失效

memcache.alivecheck=true

 

 

7. MemCached 主要类

 

Socke 连接池实例对象

SockIOPool

获得SockIOPoo 2 种方式

1.代码块

SockIOPool pool = SockIOPool.getInstance();

pool.setxxx(xxx);

pool.initialize();

2.Spring注入

 

MemCachedClient MemCached主要操作对象

获得MemCachedClient 

 

获得单例对象,防止数据冲突,节省内存,根据业务需求实际情况而定

 

 

 

8. MemCachedClient 方法详解

 

   

9. MemCached 服务器

 

 

启动Memcache 常用参数
-p <num>      设置端口号(默认不设置为: 11211)
-U <num>      UDP监听端口 (默认: 11211, 0 时关闭)  
-l <ip_addr>  绑定地址 (默认:所有都允许,无论内外网或者本机更换IP,有安全隐患,若设置为127.0.0.1就只能本机访问)
-d            duli进程运行
-u <username> 绑定使用指定用于运行进程 <username>
-m <num>      允许最大内存用量,单位M (默认: 64 MB)
-P <file>     将PID写入文件<file>,这样可以使得后边进行快速进程终止, 需要与 -d 一起使用
如:
在linux下:./usr/local/bin/memcached -d -u jb-mc -l 192.168.1.197 -m 2048 -p 12121
在window下:d:\App_Serv\memcached\memcached.exe -d RunService -l 127.0.0.1 -p 11211 -m 500

 

telnet连接以及请求命令

 

需要保证 Memcached 服务已打开。

 

连接成功

 

   telnet写入memcache命令格式

  <command name> <key> <flags> <exptime> <bytes>\r\n <data block>\r\n

1.<command name> 可以是”set”, “add”, “replace”

2.<key> 保存数据的key

3.<flags> 是一个16位的无符号的整数(以十进制的方式表示)。

4.<exptime> 过期的时间。0表示存储的数据永远不过时

5.<bytes> 需要存储的字节数 ,当用户希望存储空数据时,可以为0

6.最后客户端需要加上”\r\n”作为”命令头”的结束标志。

   telnet响应命令

1.STORED  表示存储成功

2.NOT_STORED  表示存储失败,但是该失败不是由于错误

   其他操作命令方法同上

 

   Telnet 其他命令

     Stats 状态

     stats reset 清空统计数据

     Flush_all 清空数据

     Quit 退出telnet

 

 

10. MemCached 应用场景

 

 适用于 MemCached ↓

a.如果网站包含了访问量很大的动态网页,因而数据库的负载将会很高。由于大部分数据库请求都是读操作,那么memcached可以显著地减小数据库负载。

b.利用memcached可以缓存 session数据 、临时数据以减少对他们的数据库写操作。 

c.缓存一些很小但是被频繁访问的文件。

不适用 MemCached ↓

a.缓存对象的大小大于1MB

b. key的长度大于250字符

c.应用运行在不安全的环境中

Memcached提供任何安全策略,仅仅通过telnet就可以访问到memcached。如果应用运行在共享的系统上,需要着重考虑安全问题。
d.业务本身需要的是持久化数据或者说需要的应该是database


 

 

 

 

 

 


© 著作权归作者所有

共有 人打赏支持
HelloWordToo
粉丝 0
博文 1
码字总数 1109
作品 0
昌平
加载中

评论(2)

极限Java之菜鸟
极限Java之菜鸟
感觉很不错,可能我也是初学的原因,没怎么懂,你使用过memcache做过项目吗,做过的话给发点例子看看呗
HelloWordToo
HelloWordToo
给点意见好不好哇~~~
memcached的安装和使用

在Linux下安装运行memcache cd /tmp 可去官网获取相关版本链接 wget http://cloud.github.com/downloads/libevent/libevent/libevent-2.0.20-stable.tar.gztar -zxvf libevent-2.0.20-stable......

开源中国首席观察员
2012/10/30
0
0
导入代码时eclipse的src目录变为包名

初学Java网站开发,还是个菜鸟。用SVN和队友做项目,经常碰到从SVN上下载的项目,导入代码时eclipse的src目录变为包名,总是把src当包名附在每个包最前面,一直报错,改了吧,没法使用SVN同步...

惠风康桥
2012/12/12
0
8
ContextLoaderListener ClassNotFoundException

在初学使用maven构建javaWeb的项目的时候,启动tomcat加载时,总是提示如下错误,辛苦一番终于找到解决办法。严重: Error configuring application listener of class org.springframework.w...

欧阳飘
08/30
0
0
Ehcache和MemCached比较分析

项目 Memcache Ehcache 分布式 不完全,集群默认不实现 支持 集群 可通过客户端实现 支持(默认是异步同步) 持久化 可通过第三方应用实现,如sina研发的memcachedb,将cache的数据保存到[ur...

浮躁的码农
2015/07/24
0
0
memcache java 客户端与c#客户端 数据不一致问题

使用 memcache 我在.net 里使用 enyim.caching 缓存。 在java 里使用 spymemcached 读取 不到,但是控制台都可以看到。 后来了解到,每个memcache 有一个flag,不同的客户端 不同。 我修改了...

2J
05/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Java异常处理最佳实践

总结一些Java异常的处理原则 Java异常处理最佳实践 不要忘记关闭资源 在finally里关闭资源 public void readFile() { FileInputStream fileInputStream = null; File file = new Fil...

yysue
49分钟前
0
0
00.编译OpenJDK-8u40的整个过程

前言 历经2天的折腾总算把OpenJDK给编译成功了,要说为啥搞这个,还得从面试说起,最近出去面试经常被问到JVM的相关东西,总感觉自己以前学的太浅薄,所以回来就打算深入学习,目标把《深入理...

凌晨一点
今天
4
0
python: 一些关于元组的碎碎念

初始化元组的时候,尤其是元组里面只有一个元素的时候,会出现一些很蛋疼的情况: def checkContentAndType(obj): print(obj) print(type(obj))if __name__=="__main__": tu...

Oh_really
昨天
6
2
jvm crash分析工具

介绍一款非常好用的jvm crash分析工具,当jvm挂掉时,会产生hs_err_pid.log。里面记录了jvm当时的运行状态以及错误信息,但是内容量比较庞大,不好分析。所以我们要借助工具来帮我们。 Cras...

xpbob
昨天
124
0
Qt编写自定义控件属性设计器

以前做.NET开发中,.NET直接就集成了属性设计器,VS不愧是宇宙第一IDE,你能够想到的都给你封装好了,用起来不要太爽!因为项目需要自从全面转Qt开发已经6年有余,在工业控制领域,有一些应用...

飞扬青云
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部