simple-spring-memcached简介

Simple-Spring-Memcached 在JAVA中使用Memcached进行行缓存是比较复杂的。Simple-Spring-Memcachd(SSM)企图通过实现几个基础的使用项来简化Memcached的使用。 该项在java-memcached客户端的基础上使用java5的注解和Sping/AspectJ的AOP,使能够在Sping中管理bean缓存。使用Simple-Spring-Memcached只需要简单的配置和在要缓存的方法的返回值或参数上标注上相应的注解就可以。 立即下载
memcached是一款非常优秀的分布式缓存工具,有效提升了按主键检索数据的性能问题。而simple-spring-memcached组件通过与spring框架整合,让memcached的调用变得更加简单。

simple-spring-memcached本质上是采用了AOP的方式来实现缓存的调用和管理,其核心组件声明了一些Advice,当遇到相应的切入点时,会执行这些Advice来对memcached加以管理。

切入点是通过标签的方式来进行声明的,在项目开发时,通常在DAO的方法上加以相应的标签描述,来表示组件对该方法的拦截
组件所提供的切入点主要包括以下几种:
ReadThroughSingleCache、ReadThroughMultiCache、ReadThroughAssignCache
当遇到查询方法声明这些切入点时,组件首先会从缓存中读取数据,取到数据则跳过查询方法,直接返回。
取不到数据在执行查询方法,并将查询结果放入缓存,以便下一次获取。
InvalidateSingleCache、InvalidateMultiCache、InvalidateAssignCache
当遇到删除方法声明这些切入点时,组件会删除缓存中的对应实体
UpdateSingleCache、UpdateMultiCache、UpdateAssignCache
当遇到更新方法声明这些切入点是,组件会更新缓存中对应的实体,以便下次从缓存中读取出的数据状态是最新的

simple-spring-memcached本身并不提供cache机制的实现,只是为了cache的调用更加简单而设计的。
在cache的实现上使用的是第三方组件(如x-memcached和spy-memcached),官方给出了针对这两种组件的相关配置

http://code.google.com/p/simple-spring-memcached/wiki/Getting_Started

simple-spring-memcached的使用:

1.首先在Spring配置文件中加入如下两句:

<import resource="simplesm-context.xml" />
<aop:aspectj-autoproxy />
simplesm-context.xml封装在simple-spring-memcached-*.jar文件当中,主要用来加载组件核心的Advice,供程序调度使用。
而由于simple-spring-memcached主要是基于AOP的代理,所以加入<aop:aspectj-autoproxy />让代理机制起到作用。

2.定义memcached客户端

memcached比较常用的java客户端有两种,spymemcached和xmemcached,xmemcached支持多线程

<bean name="defaultMemcachedClient" class="com.google.code.ssm.CacheFactory">
		<property name="cacheClientFactory">
			<bean class="com.google.code.ssm.providers.xmemcached.MemcacheClientFactoryImpl" />
		</property>
		<property name="addressProvider">
			<bean class="com.google.code.ssm.config.DefaultAddressProvider">
				<property name="address" value="192.168.7.131:11211" />
			</bean>
		</property>
		<property name="configuration">
			<bean class="com.google.code.ssm.providers.CacheConfiguration">
				<property name="consistentHashing" value="true" />
			</bean>
		</property>
	</bean>
com.google.code.ssm.CacheFactory是一个FactoryBean,会返回Cache实体供Advice使用
address属性定义了缓存节点的IP地址和端口号

consistentHashing属性定义了缓存节点的查找方法

3.实体的定义

memcached相当于一个功能强大的Map,通过Key/Value的形式来缓存POJO实体,在定义实体的时候,可通过@CacheKeyMethod标签来为实体指定Key值,同时实体及实体的每个成员变量必须是可序列化的,可实现Serializable接口,或通过Externalizable接口来为实体指定序列化方法。

public class User implements Serializable {
	private static final long serialVersionUID = 7517080513591583073L;
	private String userId;
	private String username;
	private String password;
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	@CacheKeyMethod
	public String getUserId() {
		return userId;
	}
	public void setUserId(String userId) {
		this.userId = userId;
	}
}
4.DAO的定义
缓存操作通常是对DAO的方法进行拦截,加入必要的通知以达到增删改查的效果

切入点的声明主要通过之前提到的标签来实现

public class UserDaoImpl implements IUserDao {
	private static final String NAMESPACE="ns";
	private Map<String,User> users=new HashMap<String,User>();
	@Override
	public void saveUser(User user) {
		users.put(user.getUserId(), user);
	}
	/**
	 * 当执行getById查询方法时,系统首先会从缓存中获取userId对应的实体
	 * 如果实体还没有被缓存,则执行查询方法并将查询结果放入缓存中
	 */
	@Override
	@ReadThroughSingleCache(namespace = NAMESPACE, expiration = 3600)
	public User getById(@ParameterValueKeyProvider String userId) {
		System.out.println(userId);
		return users.get(userId);
	}
	/**
	 * 当执行updateUser方法时,系统会更新缓存中userId对应的实体
	 * 将实体内容更新成@*DataUpdateContent标签所描述的实体
	 */
	@UpdateSingleCache(namespace = NAMESPACE, expiration = 3600)
	@Override
	public void updateUser(@ParameterValueKeyProvider @ParameterDataUpdateContent User user) {
		users.put(user.getUserId(), user);
	}
	/**
	 * 当执行deleteUser方法时,系统会删除缓存中userId对应的实体
	 */
	@InvalidateSingleCache(namespace = NAMESPACE)
	@Override
	public void deleteUser(@ParameterValueKeyProvider String userId) {
		users.remove(userId);
	}
}

simple-spring-memcached(ssm) 和spring的集成 一个maven工程,使用spring集成了simple-spring-memcached的demo示例 立即下载

相关推荐

simple-spring-memcached集成memcache

NULL 博文链接:https://younglibin.iteye.com/blog/2157666

memcached问题

今天搭建simple-spring-memcached过程中遇到了一个这样的问题,报一个错误,说是没有找到相应的方法,但我看到源码里面存在这个方法,不知道问什么?org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cacheBase' defined in class pat...

weixin_30526593的博客 141

ADP在线自适应动态规划之持续激励条件

在线自适应动态规划之持续激励条件 在在线自适应动态规划算法中,需要通过满足持续激励条件(Persistent Excitation Condition)保证critic网络权值的收敛性,一般的做法都是在算法初期在输入端引入探测噪声(Probing Noises)来保证数据的丰富性,但是由于在输入端引入噪声会给系统带来一些不好的影响,甚至可能破坏系统的稳定性。因此,出现了一些其他的方法来避免引入探测噪声,受阅读所限,我目前了解两种: Concurrent Learning(CL) Experience Re

qq_43435956的博客 6162

Memcached之——Simple-Spring-Memcached(SSM) 的简单使用

memcached是一种分布式缓存工具,有效提升了按主键检索数据的性能问题。Simple-Spring-Memcached 是memcached与spring 框架整合的一种缓存框架,本质是采用aop的方式实现缓存的调用和管理。其核心组件声明了一些Advice,当遇到相应的切入点时,会执行这些Advice来对memcached 加以管理。Simple-Spring-Memcached 本身不提供c...

冰河的专栏 1937

黏菌算法(Slime Mould Algorithm,SMA)

这是一篇关于黏菌算法的总结博客,包含算法思想,算法步骤,求函数最值(Python实现),算法改进等,持续更新ing

weixin_46838605的博客 1万+

Ubuntu升级遇到grub-efi-amd64-signed安装失败?3步搞定这个烦人错误

本文深度解析Ubuntu系统升级时grub-efi-amd64-signed安装失败并提示“cannot find EFI directory”错误的根本原因。该错误通常由EFI系统分区挂载异常、BIOS/UEFI引导模式不匹配或dpkg包状态死锁导致。文章提供了三步精准修复流程:首先检查并修复ESP分区挂载,其次处理dpkg依赖问题,最后针对传统BIOS系统提供适配方案,帮助用户安全彻底地解决这一常见升级难题。

r7s8t的博客 398

simple-spring-memcached 注解配置

一、序言        有了缓存,还是喜欢用注解去使用,本想和spring 写一个类似ehcache 的东西,后来发google 已经提供了spring 和memcache 的 注解配置,那就先拿来用用了~。~。   二、基本配置:        2.1 先把spring 和 memcached 结合起来,创建一个spring-xmemcached.xml 的文件         ...

Hello World 332

ADS1299寄存器配置与应用实战指南

本文提供了ADS1299高精度生物电信号采集芯片的寄存器配置与应用实战指南。详细解析了采样率、增益、转换模式等核心寄存器的设置方法,并分享了数据读取、高级功能配置及常见问题的调试心得,帮助开发者快速掌握ADS1299的配置技巧,实现稳定的ECG/EEG信号采集。

weixin_28278377的博客 194

Simple-spring-memcached 缓存的应用

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33963189的博客 113

大模型-CLIP 详细介绍

最先进的计算机视觉系统通常被训练来预测一组预定义的对象类别。这种受限的监督形式限制了它们的通用性和可用性,因为要指定任何其他视觉概念,就需要额外的标注数据。比如,它们可以识别“猫”、“狗”、“汽车”等。但是,这种做法有一个明显的局限性:如果你想让系统识别一个新的类别,比如说“独角兽”,你就必须提供大量带有“独角兽”标签的图片来训练系统。这不仅耗时费力,而且限制了系统的灵活性和广泛适用性。直接从原始文本中学习关于图像的信息是一种很有前途的替代方案,因为它利用了更广泛的监督来源。

晓的博客 9723

OTFS 消息传递算法信号检测【附matlab代码详解】

OTFS 消息传递算法方面的一些浅浅理解。

Cuby的博客 4013
上一篇: Jackrabbit之DataStore
下一篇: BerkeleyDB简介
JavaMan_chen
博客等级 码龄19年 329粉丝 82原创
评论 17
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值