memcached java 多线程_springboot使用memcache缓存
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缓存相关推荐
- java 多线程缓存_[Java教程]【JAVA并发编程实战】12、使用condition实现多线程下的有界缓存先进先出队列...
[Java教程][JAVA并发编程实战]12.使用condition实现多线程下的有界缓存先进先出队列 0 2016-11-29 17:00:10 package cn.study.concurren ...
- java 多线程写缓存,Java多线程_缓存对齐
1.什么是缓存对齐 当前的电脑中,数据存储在磁盘上,可以断电保存,但是读取效率较低.不断电的情况下,数据可以在内存中存储,相对硬盘效率差不多是磁盘的一万倍左右.但是运算时,速度最快的是直接缓存在CPU ...
- 分布式缓存技术memcached学习系列(五)—— memcached java客户端的使用
Memcached的客户端简介 我们已经知道,memcached是一套分布式的缓存系统,memcached的服务端只是缓存数据的地方,并不能实现分布式,而memcached的客户端才是实现分布式的地方 ...
- memcached java 客户端优化,分布式缓存技术memcached学习系列(五)—— memcached java客户端的使用...
Memcached的客户端简介 我们已经知道,memcached是一套分布式的缓存系统,memcached的服务端只是缓存数据的地方,并不能实现分布式,而memcached的客户端才是实现分布式的地方 ...
- Java多线程系列(八):ConcurrentHashMap的实现原理(JDK1.7和JDK1.8)
HashMap.CurrentHashMap 的实现原理基本都是BAT面试必考内容,阿里P8架构师谈:深入探讨HashMap的底层结构.原理.扩容机制深入谈过hashmap的实现原理以及在JDK 1. ...
- java 多线程 张孝祥_多线程11_张孝祥 java5的线程锁技术
本例子因为两个线程公用同线程中,使用同一个对象,实现了他们公用一把锁,实现了同一个方法的互斥. package locks; /** *会被打乱的效果 */ public class LockTest ...
- java多线程批量处理
前言 高并发,几乎是每个程序员都想拥有的经验.原因很简单:随着流量变大,会遇到各种各样的技术问题,比如接口响应超时.CPU load升高.GC频繁.死锁.大数据量存储等等,这些问题能推动我们在技术深度 ...
- 【2021最新版】Java多线程并发面试题总结(108道题含答案解析)
文章目录 JAVA并发知识库 1.Java中实现多线程有几种方法? 2.继承Thread类 3.实现Runnable接口. 4.ExecutorService.Callable.Future有返回值线 ...
- 40个Java多线程问题总结
(转) 这篇文章作者写的真是不错 40个问题汇总 1.多线程有什么用? 一个可能在很多人看来很扯淡的一个问题:我会用多线程就好了,还管它有什么用?在我看来,这个回答更扯淡.所谓"知其然知其所 ...
最新文章
- 数据表的三种基本操作(insert、delete、update)
- Sqoop 同步数据到mysql, Can't parse input data: '\N'
- Dockerfile使用,怎么通过Dockerfile完成docker映像配置
- iOS 一个开发者账号 多台Mac 共用
- JBoss BRMS与JasperReports进行报告
- Angular 个人深究(四)【生命周期钩子】
- 309. zui佳买卖股票时机含冷冻期(JavaScript)
- 视图之一--创建简单的视图
- Dell服务器中Lsiutil命令常见使用
- selenium+python自动化82-只截某个元素的图
- struts2 跳转类型 result type=chain、dispatcher、redirect(redirect-action)
- jQuery API/1.1.1/CSS
- Moodle安装教程以及phpMyAdmin无法访问解决
- 铁通玩跑跑卡丁车经常出现服务器无响应之解决办法
- 苹果计算机重装系统步骤,苹果笔记本电脑重装mac系统教程
- HTML5期末大作业:动漫A网站设计——动画漫展学习资料电影模板(6页) 网页设计作业 / 动漫网页设计作业,网页设计作业 / 动漫网页设计成品,网页设计作业 / 动漫网页设计成品模板下载
- 分布式搜索引擎 - 大总结
- dct变换的主要优点有哪些_【WIX维克斯】自动变速器AT、AMT、CVT、DCT谁更平顺
- NEUQ图灵杯之A题——蔡老板的会议
- scrapy 爬取苏宁图书