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

一、项目说明

1.1 XMemcached

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

1.2 项目结构

Memcached 的整合配置位于 com.heibaiying.config 文件夹下:

https://github.com/heibaiying

1.3 相关依赖

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

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

二、整合 XMemcached

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 单机版和集群版注入的实例是完全相同的:

@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.4 存储实体对象测试用例

@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 基本命令

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值