初识Memcache---(2)使用memcache
Memcache服务端已经安装好,此时我们可以在程序中进行缓存操作了,这时我们需要Memcache客户端进行操作。市场上Memcache客户端有很多种,这里我们对两种使用比较广泛的客户端进行介绍。
我们常使用客户的方法为以下几种:
public interface IMemCacheClient {public Object get(String key);//从缓存获取一个指定的值,获取的值需要进行强制转换
public boolean set(String key,Object value);//添加一个指定的值到缓存,如果key存在则替换它
public boolean set(String key,Object value,int expiry);//添加一个指定的值到缓存,并且指定value的生命周期,如果key存在则替换它
public boolean add(String key,Object value);//添加一个指定的值到缓存,如果key存在返回false
public boolean add(String key,Object value,int expiry);//添加一个指定的值到缓存,并且指定value的生命周期,如果key存在返回false
public boolean replace(String key,Object value);//替换一个值到缓存,失败false
public boolean replace(String key,Object value,int expiry);//替换一个值到缓存,失败false,并指定生命周期
public boolean del(String key);//删除指定的值
public boolean flushAll();//删除指定的值,置为失效
}
主要的区别是客户端初始化方法,这两种客户端初始化方法代码如下:
1、Memcached-Java-Client
// 创建全局的唯一实例private MemcachedClient client = new MemcachedClient();// 设置与缓存服务器的连接池static{// 服务器列表和其权重String[] servers = { "192.168.56.102:11211" };// 获取soket 连接池的实例对象SockIOPool pool = SockIOPool.getInstance();// 设置服务器信息pool.setServers(servers);pool.setFailover(true);//设置初始连接数、最小和最大连接数以及最大处理时间pool.setInitConn(10);pool.setMinConn(5);pool.setMaxConn(250);// 设置主线程的睡眠时间pool.setMaintSleep(30);// 设置TCP的参数和连接超时pool.setNagle(false);pool.setSocketTO(3000);pool.setAliveCheck(true);// 初始化连接池pool.initialize();}
2、XmemcacheClient
private static XmemcacheClient instance = new XmemcacheClient();/** XMemCache允许开发者通过设置节点权重来调节MemCache的负载,设置的权重越高,该MemCache节点存储的数据越多,负载越大 */private static MemcachedClientBuilder mcb = new XMemcachedClientBuilder(AddrUtil.getAddresses("192.168.56.102:11211"), new int[]{1});private static MemcachedClient mc = null;/** 初始化加载客户端MemCache信息 */static{mcb.setCommandFactory(new BinaryCommandFactory()); // 使用二进制文件mcb.setConnectionPoolSize(10); // 连接池个数,即客户端个数try{mc = mcb.build();}catch (IOException e){e.printStackTrace();}}
3、完整示例(Memcached-Java-Client)
MemcacheClient1.java
/*** */
package com.css.sword.cache;import java.util.Calendar;
import java.util.Date;import com.meetup.memcached.MemcachedClient;
import com.meetup.memcached.SockIOPool;/*** <p>Title:MemcacheClient1</p>* <p>Description: 使用memcache_client.jar(Memcached-Java-Client-master) com.meetup.memcached</p> * @author yuanxj* @date 2017-2-27*/
public class MemcacheClient1 implements IMemCacheClient{// 创建全局的唯一实例private MemcachedClient client = new MemcachedClient();private static MemcacheClient1 client1 = new MemcacheClient1();// 设置与缓存服务器的连接池static{// 服务器列表和其权重String[] servers = { "192.168.56.102:11211" };// 获取soket 连接池的实例对象SockIOPool pool = SockIOPool.getInstance();// 设置服务器信息pool.setServers(servers);pool.setFailover(true);//设置初始连接数、最小和最大连接数以及最大处理时间pool.setInitConn(10);pool.setMinConn(5);pool.setMaxConn(250);// 设置主线程的睡眠时间pool.setMaintSleep(30);// 设置TCP的参数和连接超时pool.setNagle(false);pool.setSocketTO(3000);pool.setAliveCheck(true);// 初始化连接池pool.initialize();}private MemcacheClient1 (){} public static MemcacheClient1 getInstance() { return client1; } @Overridepublic Object get(String key) {// TODO Auto-generated method stub return client.get(key);}@Overridepublic boolean set(String key, Object value) {// TODO Auto-generated method stub//client.setSanitizeKeys(false);return client.set(key, value);}@Overridepublic boolean set(String key, Object value, int expiry) {// TODO Auto-generated method stubCalendar nowTime = Calendar.getInstance();nowTime.add(Calendar.SECOND, expiry);return client.set(key, value,nowTime.getTime());}@Overridepublic boolean add(String key, Object value) {// TODO Auto-generated method stubreturn client.add(key, value);}@Overridepublic boolean add(String key, Object value, int expiry) {// TODO Auto-generated method stubCalendar nowTime = Calendar.getInstance();nowTime.add(Calendar.SECOND, expiry);return client.add(key, value,expiry);}@Overridepublic boolean replace(String key, Object value) {// TODO Auto-generated method stubreturn client.replace(key, value);}@Overridepublic boolean replace(String key, Object value, int expiry) {// TODO Auto-generated method stubCalendar nowTime = Calendar.getInstance();nowTime.add(Calendar.SECOND, expiry);return client.replace(key, value,expiry);}@Overridepublic boolean del(String key) {// TODO Auto-generated method stubreturn client.delete(key);}@Overridepublic boolean flushAll() {// TODO Auto-generated method stubreturn client.flushAll();}
}
测试:
public static void main(String[] args){try { MemcacheClient1 client1 = new MemcacheClient1();client1.set("name", "liuhuao"); String myObject = (String) client1.get("name"); System.out.println(myObject);} catch (Exception e) { e.printStackTrace(); } }
这只是个简单的示例,XmemcacheClient和这个类似,需要注意的有两点:
(1)Memcached-Java-Client客户端的生命周期 expiry是Date类型,而XmemcacheClient是int类型,所以需要转换下;
(2)关于key值,例如key值为+iBGV1cMhD+sQmK1rxUMtQ==
Memcached-Java-Client 会将key值设为%2BiBGV1cMhD%2BsQmK1rxUMtQ%3D%3D
而XmemcacheClient是原值,查看Memcached-Java-Client源码发现该客户端会对key进行编码URLEncoder.encode,如果不行进行编码,可用client.setSanitizeKeys(false)解决。
初识Memcache---(2)使用memcache相关推荐
- 用memcache.php监测memcache的状况
最新的memcache pecl中,新增了一个memcache.php,这个php文件可以用来方便的查看memcache的状况,界面上与apc自带的apc.php风格一致. 如图: 应该算是最方便的监 ...
- thinkphp memcache mysql_thinkphp中memcache的用法实例
本文实例讲述了thinkphp中memcache的用法.分享给大家供大家参考.具体分析如下: 1.下载并安装memcache ① window下安装memcache. 下载memcached.exe ...
- mysql memcache redis_redis,mysql,memcache的區別與比較,redis兩種數據存儲持久化方式
redis與mysql比較 區別:mysql中一個中小型的網絡數據庫,比oracle和sqlserver小, 但是並發能力遠超過acess這樣的桌面數據庫:redis是一個內存鍵值數據庫,支持網絡.可 ...
- php遍历memcache,php遍历memcache所有键值
很有用的东东,PHP遍历MEMCACHE的所有键,在做管理memcache的时候会用到. $items=$this->memcache->getExtendedStats ('items' ...
- php中获取memcache所有key,Memcache查看列出所有key方法及memkeys实时查看key使用情况...
本文我们来分享关于Memcache查看列出所有key方法及利用memkeys实时查看memcached key使用情况,smemkeys是tumblr开源的类似top的工具,可用于实时查看memcac ...
- php memcache 数组,PHP Memcache
Memcache: memcache是一套分布式的高速缓存系统,目前被许多网站使用提升网站的访问速度,尤其是对于一些大型的.需要频繁访问数据库的网站访问速度提升效果很明显.具体是在内存中维护一个巨大的 ...
- nginx+tomcat+memcache实现负载均衡、session共享
实验架构图: Table of Contents 1.配置tomcat 2.安装memcache 3.查看tomcat和memcache是否配置好 4.nginx实现负载均衡: 5.客户端进行测试: ...
- ubuntu php7 memcache,linux ubuntu下安装php memcache扩展
memcached 安装 sudo apt-get install memcached memcached 参数说明 memcached -d -m 50 -p 11211 -u root -m 指定 ...
- Redis、MongoDB、Memcache的比较
Redis和Memcache都是将数据放在内存中,都是内存数据库,不过Memcache还可以缓存注入图片.视频等文件 数据类型:memcache在添加数据时需要指定数据库的字节长度,而Redis不需要 ...
最新文章
- 2015内蒙古计算机考试成绩,2015年新疆公务员考试笔试成绩计算机加分说明
- 038_JDK的Iterable接口
- Python数据结构与算法(第五天)
- java循坏_Java的坏功能是什么
- configparser logging
- python画建筑分析图_教你用GH绘制酷炫的流线分析图
- flex java oracle_Flex使用Blazeds与Java交互及自定义对象转换详解-DATAGRID读取ORACLE数据...
- OpenShift 4 - 用CA证书或Token访问Internal Registry中的容器
- memcached linux 配置文件,Linux下Memcached服务器部署 | 系统运维
- MySQL 5.7 多实例单配置 多实例多配置文件安装 | 资料
- 比尔·盖茨:如果你想了解硅谷,就看《硅谷》吧 1
- Traceview命令
- 再见了,收费的XShell,我改用国产良心工具!
- Ps学习(色彩范围工具使用和多边形抠图案例)
- 完全免费无限量京东联盟高级API - 高并发京东联盟转链接口 京东客转链接口 京粉转链接口 京东联盟返利接口 京东返利接口,线报无广告接口
- 电脑出现“由于该设备有问题,Windows 已将其停止(代码 43)”的提示,该怎么解决?
- [[机缘参悟-87]:每个人需要了解自己的性格特征(老虎、孔雀、考拉、猫头鹰、变色龙)
- Kubernetes K8S之资源控制器Job和CronJob详解
- python求均值 有限存储量_python计算均值
- 跟着老猫来搞GO-基础语法
热门文章
- STM32的中断优先级说明(抢占式与响应式优先级)
- 阿里云服务器ECS怎么重装系统?
- php挂载webdav,phpweb服务器开启了WebDAV的关闭方法
- ffmpeg视频特效
- 王菲语法11 动词(非谓语动词)
- 数字集成电路设计-1-用一个mux和一个inv实现异或
- Javascript - 1 引入方式,变量常量,数据类型,运算符,流程控制,数组,函数,对象,DOM
- win10如何更改计算机的用户名称,win10账户名修改,详细教您win10怎么更改账户名称...
- Lightning Network模拟器
- DB2如何修改某个字段由非空转变为可以为空