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盘:

c31c40797fa5720c9d22637736a000a9.png

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

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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值