源码Gitub地址:https://github.com/heibaiying/spring-samples-for-all

一、说明

1.1 XMemcached客户端说明

XMemcached是基于java nio的memcached高性能客户端,支持完整的memcached协议,支持客户端分布并且提供了一致性哈希(consistent hash)算法的实现。

1.2 项目结构说明

  1. memcached的整合配置位于com.heibaiying.config文件夹下。

1.3 依赖说明

除了spring的基本依赖外,需要导入xmemcached依赖包

 <!--memcached java 客户端-->
<dependency>
    <groupId>com.googlecode.xmemcached</groupId>
    <artifactId>xmemcached</artifactId>
    <version>2.4.5</version>
</dependency>

二、spring 整合 memcached

2.1 单机配置

@Bean
public MemcachedClient memcachedClient() {
    XMemcachedClientBuilder builder = new XMemcachedClientBuilder("192.168.200.201:11211");
    MemcachedClient memcachedClient = null;
try {
	memcachedClient = builder.build();
	} catch (IOException e) {
	e.printStackTrace();
}
	return memcachedClient;
}

2.2 集群配置

@Bean
public MemcachedClient memcachedClientForCluster() {

    List<InetSocketAddress> addressList = new ArrayList<InetSocketAddress>();
    addressList.add(new InetSocketAddress("192.168.200.201", 11211));
    addressList.add(new InetSocketAddress("192.168.200.201", 11212));
    // 赋予权重
    int[] weights = {1, 2};
    XMemcachedClientBuilder builder = new XMemcachedClientBuilder(addressList, weights);
    // 设置连接池大小
    builder.setConnectionPoolSize(10);
    // 协议工厂
    builder.setCommandFactory(new TextCommandFactory());
    // 分布策略,一致性哈希KetamaMemcachedSessionLocator或者ArraySessionLocator(默认)
    builder.setSessionLocator(new KetamaMemcachedSessionLocator());
    // 设置序列化器
    builder.setTranscoder(new SerializingTranscoder());
    MemcachedClient memcachedClient = null;
    try {
        memcachedClient = builder.build();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return memcachedClient;
}

2.3 存储基本类型测试用例

xmemcached单机版本和集群版本注入的实例是相同的;

/**
 * @author : heibaiying
 * @description : Memcached 操作基本对象
 */
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {MemcacheConfig.class})
public class MemSamples {

    @Autowired
    private MemcachedClient memcachedClient;

    @Test
    public void operate() throws InterruptedException, MemcachedException, TimeoutException {
        memcachedClient.set("hello", 0, "Hello,cluster xmemcached");
        String value = memcachedClient.get("hello");
        System.out.println("hello=" + value);
        memcachedClient.delete("hello");
        value = memcachedClient.get("hello");
        System.out.println("hello=" + value);
    }
}

2.5 存储实体对象测试用例

/**
 * @author : heibaiying
 * @description :Memcached 序列化与反序列化
 */
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {MemcacheConfig.class})
public class MemObjectSamples {

    @Autowired
    private MemcachedClient memcachedClient;

    @Test
    public void operate() throws InterruptedException, MemcachedException, TimeoutException {
        memcachedClient.set("programmer", 0, new Programmer("xiaoming", 12, 5000.21f, new Date()));
        Programmer programmer = memcachedClient.get("programmer");
        System.out.println("hello ," + programmer.getName());
        memcachedClient.delete("programmer");
        programmer = memcachedClient.get("programmer");
        Assert.assertNull(programmer);
    }
}

附:memcached 基本命令

命令 格式 说明
新增 set set key flags exTime length -> value 无论什么情况,都可以插入
新增 add add key flags exTime length -> value 只有当key不存在的情况下,才可以插入
替换 replace replace key flags exTime length -> value 只修改已存在key的value值
追加内容append append key flags exTime length -> value length表示追加的长度而不是总长度
前面追加prepend prepend key flags exTime length -> value length表示追加的长度而不是总长度
查询操作 get get key  
检查更新 cas cas key flags exTime length version -> value 版本正确才更新
详细获取 gets gets key 返回的最后一个数代表 key 的 CAS 令牌
删除 delete delete key 将数据打一个删除标记
自增 incr incr key 增加偏移量 incr和decr只能操作能转换为数字的Value
自减 decr decr key 减少偏移量 desr不能将数字减少至0以下
清库 flush_all  

附:源码Gitub地址:https://github.com/heibaiying/spring-samples-for-all

spring 5.x 系列第12篇 —— 整合memcached (代码配置方式)的更多相关文章

  1. spring 5.x 系列第11篇 —— 整合memcached (xml配置方式)

    文章目录 一.说明 1.1 XMemcached客户端说明 1.2 项目结构说明 1.3 依赖说明 二.spring 整合 memcached 2.1 单机配置 2.2 集群配置 2.3 存储基本类型 ...

  2. spring 5.x 系列第10篇 —— 整合mongodb (代码配置方式)

    源码Gitub地址:https://github.com/heibaiying/spring-samples-for-all 一.说明 1.1 项目结构说明 配置文件位于com.heibaiying. ...

  3. spring 5.x 系列第14篇 —— 整合RabbitMQ (代码配置方式)

    源码Gitub地址:https://github.com/heibaiying/spring-samples-for-all 一.说明 1.1 项目结构说明 本用例关于rabbitmq的整合提供简单消 ...

  4. spring 5.x 系列第18篇 —— 整合websocket (代码配置方式)

    源码Gitub地址:https://github.com/heibaiying/spring-samples-for-all 一.说明 1.1 项目结构说明 项目模拟一个简单的群聊功能,为区分不同的聊 ...

  5. spring 5.x 系列第16篇 —— 整合dubbo (代码配置方式)

    文章目录 一. 项目结构说明 二.项目依赖 三.公共模块(dubbo-ano-common) 四. 服务提供者(dubbo-ano-provider) 4.1 提供方配置 4.2 使用注解@Servi ...

  6. spring 5.x 系列第2篇 —— springmvc基础 (代码配置方式)

    文章目录 一.搭建hello spring工程 1.1 项目搭建 1.2 相关注解说明 二.配置自定义拦截器 三.全局异常处理 四.参数绑定 4.1 参数绑定 4.2 关于日期格式转换的三种方法 五. ...

  7. spring 5.x 系列第9篇 —— 整合mongodb (xml配置方式)

    源码Gitub地址:https://github.com/heibaiying/spring-samples-for-all 一.说明 1.1 项目结构说明 配置文件位于resources下,项目以单 ...

  8. spring 5.x 系列第13篇 —— 整合RabbitMQ (xml配置方式)

    源码Gitub地址:https://github.com/heibaiying/spring-samples-for-all 一.说明 1.1 项目结构说明 本用例关于rabbitmq的整合提供简单消 ...

  9. spring 5.x 系列第17篇 —— 整合websocket (xml配置方式)

    源码Gitub地址:https://github.com/heibaiying/spring-samples-for-all 一.说明 1.1 项目结构说明 项目模拟一个简单的群聊功能,为区分不同的聊 ...

随机推荐

  1. python 强制类型转换 以及 try expect

    强制类型转换: 字符串 -->  整型: 字符串 第一个  是 +  或者 -  ,会直接去掉 符号 ,返回 数字 如: a = '+123456' s = int(a) print(s) s ...

  2. 采用Fiddler建立Asp.net webapi与Android/IOS调试环境

    最近,他们正在做Android+Asp.net WebApi练习,通过发现visual studio debug模式启动Asp.net之后,无法响应Android寄过来http求,设置一个很好的休息不 ...

  3. 实用WordPress后台MySQL操作命令

    关键字: WordPress MySQL 后台 数据库 地址:http://www.cnblogs.com/txw1958/archive/2013/01/06/wordpress-sql.html ...

  4. Python算法(含源代码下载)

    关键字:Python Algorithms Python算法  Mastering Basic Algorithms in the Python Language 使用Python语言掌握基本算法 P ...

  5. 此C语言功能---A

    功能名称: abort 动力 能够: 异常终止的过程的 使用 法国: void abort(void); 程序示例: #include <stdio.h> #include <std ...

  6. 带农历日历的DatePicker控件!Xamarin控件开发小记

    原文:带农历日历的DatePicker控件!Xamarin控件开发小记 闲来无事开发了个日期选择控件,感兴趣的同学前往: https://github.com/MatoApps/Mato.DatePi ...

  7. GFS读后笔记

    GFS读后笔记 Q&A 为什么存储三个副本?而不是两个或者四个? ANS: 可能取得某些平衡点 Chunk的大小为何选择64MB?这个选择主要基于哪些考虑? ANS: GFS主要支持appen ...

  8. 用SendNotifyMessage代替PostMessage避免消息丢失(WIN7下消息队列的默认长度是10000,队列满后消息将被丢弃)

    大家都知道PostMessage会丢消息,但是消息队列的大小是多少呢,下面做了一个测试. 代码:   1 unit Unit1; 2 3 interface 4 5 uses 6 Windows, M ...

  9. .net中模拟键盘和鼠标操作

    原文:.net中模拟键盘和鼠标操作 周银辉 其实SendKeys类提供的方法蛮好用的,可惜的是WPF中不能用了,说是WPF的消息循环方式改成了Dispatcher,所以直接调用System.Windo ...

  10. JS超链接动态显示图片

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...