Memcached简介

Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。

Memcached 的守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。但是它并不提供冗余(例如,复制其hashmap条目);当某个服务器S停止运行或崩溃了,所有存放在S上的键/值对都将丢失。

存储方式

为了提高性能,memcached中保存的数据都存储在memcached内置的内存存储空间中。由于数据仅存在于内存中,因此重启memcached、重启操作系统会导致全部数据消失。另外,内容容量达到指定值之后,就基于LRU(Least Recently Used)算法自动删除不使用的缓存。memcached本身是为缓存而设计的服务器,因此并没有过多考虑数据的永久性问题。

Memcached 安装

我是在windows下安装使用的。

下载之后解压就行。

解压之后,把里面的三个文件复制到32位的里面,覆盖即可。

我解压之后放在E盘:

使用管理员权限运行以下命令

E:\memcache\memcached.exe -d install

启动关闭卸载memcache

启动: E:\memcache\memcached.exe -d start

关闭: E:\memcache\memcached.exe -d stop

卸载: E:\memcache\memcached.exe -d uninstall

在spring boot中使用memcache作为缓存

1.pom.xml依赖

commons-pool

commons-pool

1.5.6

com.whalin

Memcached-Java-Client

3.0.2

2.application.properties

memcache.servers=127.0.0.1:11211memcache.failover=truememcache.initConn=10memcache.minConn=20memcache.maxConn=1000memcache.maintSleep=50memcache.nagle=falsememcache.socketTO=3000memcache.aliveCheck=true

3.MemcacheConfiguration

@Configurationpublic classMemcacheConfiguration {

@Value("${memcache.servers}")privateString[] servers;

@Value("${memcache.failover}")private booleanfailover;

@Value("${memcache.initConn}")private intinitConn;

@Value("${memcache.minConn}")private intminConn;

@Value("${memcache.maxConn}")private intmaxConn;

@Value("${memcache.maintSleep}")private intmaintSleep;

@Value("${memcache.nagle}")private booleannagel;

@Value("${memcache.socketTO}")private intsocketTO;

@Value("${memcache.aliveCheck}")private booleanaliveCheck;

@BeanpublicSockIOPool sockIOPool () {

SockIOPool pool=SockIOPool.getInstance();

pool.setServers(servers);

pool.setFailover(failover);

pool.setInitConn(initConn);

pool.setMinConn(minConn);

pool.setMaxConn(maxConn);

pool.setMaintSleep(maintSleep);

pool.setNagle(nagel);

pool.setSocketTO(socketTO);

pool.setAliveCheck(aliveCheck);

pool.initialize();returnpool;

}

@BeanpublicMemCachedClient memCachedClient(){return newMemCachedClient();

}

}

4.MemcacheController

@Controllerpublic classMemcacheController {

@AutowiredprivateMemCachedClient memCachedClient;/*** memcache缓存*/@RequestMapping("/memcache")

@ResponseBodypublic String memcache() throwsInterruptedException{//放入缓存

boolean flag = memCachedClient.set("mem", "name");//取出缓存

Object value = memCachedClient.get("mem");

System.out.println(value);//3s后过期

memCachedClient.set("num", "666", new Date(3000));/*memCachedClient.set("num", "666", new Date(System.currentTimeMillis()+3000));与上面的区别是当设置了这个时间点

之后,它会以服务端的时间为准,也就是说如果本地客户端的时间跟服务端的时间有差值,这个值就会出现问题。

例:如果本地时间是20:00:00,服务端时间为20:00:10,那么实际上会是40秒之后这个缓存key失效*/Object key= memCachedClient.get("num");

System.out.println(key);//多线程睡眠3s

Thread.sleep(3000);

key= memCachedClient.get("num");

System.out.println(value);

System.out.println(key );return "success";

}

}

5.控制台输出:

name

666

name

null

总结:memcache通过set方法把值存入都memcache缓存中;通过get方法把值取出来;通过设置过期时间,使其失效。

* Memcache:不支持持久化、只支持key-value键值、多线程 、集群分布式

* Redis:支持持久化、丰富的数据类型、单线程 、集群分布式

* Ehcache:直接在jvm虚拟机中缓存,速度快,效率高,单个应用或者对缓存访问要求很高的应用,用ehcache。核心程序仅仅依赖slf4j。

memcached java 多线程_springboot使用memcache缓存相关推荐

  1. java 多线程缓存_[Java教程]【JAVA并发编程实战】12、使用condition实现多线程下的有界缓存先进先出队列...

    [Java教程][JAVA并发编程实战]12.使用condition实现多线程下的有界缓存先进先出队列 0 2016-11-29 17:00:10 package cn.study.concurren ...

  2. java 多线程写缓存,Java多线程_缓存对齐

    1.什么是缓存对齐 当前的电脑中,数据存储在磁盘上,可以断电保存,但是读取效率较低.不断电的情况下,数据可以在内存中存储,相对硬盘效率差不多是磁盘的一万倍左右.但是运算时,速度最快的是直接缓存在CPU ...

  3. 分布式缓存技术memcached学习系列(五)—— memcached java客户端的使用

    Memcached的客户端简介 我们已经知道,memcached是一套分布式的缓存系统,memcached的服务端只是缓存数据的地方,并不能实现分布式,而memcached的客户端才是实现分布式的地方 ...

  4. memcached java 客户端优化,分布式缓存技术memcached学习系列(五)—— memcached java客户端的使用...

    Memcached的客户端简介 我们已经知道,memcached是一套分布式的缓存系统,memcached的服务端只是缓存数据的地方,并不能实现分布式,而memcached的客户端才是实现分布式的地方 ...

  5. Java多线程系列(八):ConcurrentHashMap的实现原理(JDK1.7和JDK1.8)

    HashMap.CurrentHashMap 的实现原理基本都是BAT面试必考内容,阿里P8架构师谈:深入探讨HashMap的底层结构.原理.扩容机制深入谈过hashmap的实现原理以及在JDK 1. ...

  6. java 多线程 张孝祥_多线程11_张孝祥 java5的线程锁技术

    本例子因为两个线程公用同线程中,使用同一个对象,实现了他们公用一把锁,实现了同一个方法的互斥. package locks; /** *会被打乱的效果 */ public class LockTest ...

  7. java多线程批量处理

    前言 高并发,几乎是每个程序员都想拥有的经验.原因很简单:随着流量变大,会遇到各种各样的技术问题,比如接口响应超时.CPU load升高.GC频繁.死锁.大数据量存储等等,这些问题能推动我们在技术深度 ...

  8. 【2021最新版】Java多线程并发面试题总结(108道题含答案解析)

    文章目录 JAVA并发知识库 1.Java中实现多线程有几种方法? 2.继承Thread类 3.实现Runnable接口. 4.ExecutorService.Callable.Future有返回值线 ...

  9. 40个Java多线程问题总结

    (转) 这篇文章作者写的真是不错 40个问题汇总 1.多线程有什么用? 一个可能在很多人看来很扯淡的一个问题:我会用多线程就好了,还管它有什么用?在我看来,这个回答更扯淡.所谓"知其然知其所 ...

最新文章

  1. 数据表的三种基本操作(insert、delete、update)
  2. Sqoop 同步数据到mysql, Can't parse input data: '\N'
  3. Dockerfile使用,怎么通过Dockerfile完成docker映像配置
  4. iOS 一个开发者账号 多台Mac 共用
  5. JBoss BRMS与JasperReports进行报告
  6. Angular 个人深究(四)【生命周期钩子】
  7. 309. zui佳买卖股票时机含冷冻期(JavaScript)
  8. 视图之一--创建简单的视图
  9. Dell服务器中Lsiutil命令常见使用
  10. selenium+python自动化82-只截某个元素的图
  11. struts2 跳转类型 result type=chain、dispatcher、redirect(redirect-action)
  12. jQuery API/1.1.1/CSS
  13. Moodle安装教程以及phpMyAdmin无法访问解决
  14. 铁通玩跑跑卡丁车经常出现服务器无响应之解决办法
  15. 苹果计算机重装系统步骤,苹果笔记本电脑重装mac系统教程
  16. HTML5期末大作业:动漫A网站设计——动画漫展学习资料电影模板(6页) 网页设计作业 / 动漫网页设计作业,网页设计作业 / 动漫网页设计成品,网页设计作业 / 动漫网页设计成品模板下载
  17. 分布式搜索引擎 - 大总结
  18. dct变换的主要优点有哪些_【WIX维克斯】自动变速器AT、AMT、CVT、DCT谁更平顺
  19. NEUQ图灵杯之A题——蔡老板的会议
  20. scrapy 爬取苏宁图书

热门文章

  1. 区块链教程Fabric1.0源代码分析scc(系统链码)
  2. sourcetree 回滚
  3. iOS开发socket程序被SIGPIPE信号Terminate的问题
  4. Vim的简单实用(存活篇)
  5. C#/VB.NET 给Word文档添加/撤销书签
  6. SegmentFault 助力 Uber Hackathon
  7. AndroidManifest.xml文件剖析
  8. 闭关第1天——儿童节快乐,永远年轻快乐
  9. firefox固定为应用标签的功能很好用
  10. 03 Cisco IOS设备