打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Simple

1. 依赖JAR文件

 

Simple-spring-memcached 

2. 配置

Xmemcached.xml是simple-spring-memcached主要的一个配置文件,内部配置:

 


<aop:aspectj-autoproxy/>

 

    <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="127.0.0.1:11211"/>

            </bean>

        </property>

        <property name="configuration">

            <bean class="com.google.code.ssm.providers.CacheConfiguration">

                <property name="consistentHashing" value="true"/>

            </bean>

        </property>

</bean>

注意:127.0.0.1是memcached服务的IP,111211是memcached的所属端口。其他配置不允许改动,否则不能实现缓存的效果。


Spring-context.xml内部配置:
<import resource="simplesm-context.xml" />

<import resource="xmemcached.xml"/>

第一个import是导入simple-spring-memcached的核心配置文件;第二个import是导入xmemcached的配置文件。

3. spring注解

该memcached服务缓存适合不经常发生变化但有不经常改动的数据进行注解,主要适合在service层进行做缓存。

注解适合的方法有:查询、修改、删除。

注解的方式有很多,有兴趣的同事可以去网上多了解。

l 查询方法注解方式

查询方式的注解适合返回值为map、list、object,void的不允许加入缓存注解,

A.带参数的方法:A和B属性在对象内部要注解为CacheKeyMethod(见下文)

@Override

@ReadThroughSingleCache(namespace = namespaceName +":getUser",expiration = expirationTime)

public List<UserInfo> getUser(
@ParameterValueKeyProvider(order = 0) String A,
@ParameterValueKeyProvider(order = 1) String B){


}


Memcached将数据放入内存采用的是key和value的方式放入到内存的,ParameterValueKeyProvider表示是要放入内存的key值,order表示参数的顺序,namespace表示缓存的空间名称,expiration表示放入内存的时间,单位是秒,如果过期对象会自动释移除掉,过期时间要根据实际业务情况进行设置。建议:将Assignedkey的值设置为要进行注解的方法名,namespace设置为自己开发模块的名称。

如:getUser是我要注解的方法

B.不带参数的方法:

@ReadThroughAssignCache(namespace = "getUser" , expiration = 3000)

public List<UserInfo> getUser(){

return list;

}

失效缓存的注解

该方要求查询时将对象放入缓存,但是在该对象的删除、修改,添加方方法上一定要加下面注解

注意:UserInfo 的A 和B 两个参数(即作为缓存key的属性)一定要赋值,否则不触发。
@Override
@InvalidateSingleCache(namespace = namespaceName +":getUser")  
public ProcessStatus updateUserInfo(@ParameterValueKeyProvider UserInfo userInfo) throws Exception {


}


UserInfo 对象 内部

public class UserInfo implements Serializable{


private static final long serialVersionUID = -9169068112746565872L;

    private String A;
    private String B;
    private String C;
    private String D;
    private String E;
    private String F;
    private String G;
    private Timestamp H;
    private Timestamp J;
    
    
    @CacheKeyMethod
    public String cacheKey() {
        return A+ "/" + B;
    }

多个属性 作为key 的时候中间用  "/"  隔开。

第一次用 Simple-spring-memcached ,在用的过程中 出现一种情况会报错,当作为缓存key的属性A 和 B实际有一个可以为空(null),但是memcached 会报错,好像错误名大概是 ”The argument passed into  *  at index  * is null“

最后的解决办法是将源码中的代码修改一下,让 memcached 支持null .

com\google\code\ssm\util  包下有个Utils 类

public static Object getMethodArg(int index, Object[] args, String methodDesc)
  {
    if (index < 0) {
      throw new InvalidParameterException(String.format("An index of %s is invalid", new Object[] { Integer.valueOf(index) }));
    }
    if (args.length <= index) {
      throw new InvalidParameterException(String.format("An index of %s is too big for the number of arguments in [%s]", new Object[] { Integer.valueOf(index), methodDesc }));
    }


    Object indexObject = args[index];
    if (indexObject == null) {
      throw new InvalidParameterException(String.format("The argument passed into [%s] at index %s is null.", new Object[] { methodDesc, Integer.valueOf(index) }));
    }
    return indexObject;
  }


将红色部分 改为

 if (indexObject == null) {
      indexObject ="${null}"
    }

用一个特殊的字符 替换就可以。1. 依赖JAR文件

 

Simple-spring-memcached 

2. 配置

Xmemcached.xml是simple-spring-memcached主要的一个配置文件,内部配置:

 


<aop:aspectj-autoproxy/>

 

    <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="127.0.0.1:11211"/>

            </bean>

        </property>

        <property name="configuration">

            <bean class="com.google.code.ssm.providers.CacheConfiguration">

                <property name="consistentHashing" value="true"/>

            </bean>

        </property>

</bean>

注意:127.0.0.1是memcached服务的IP,111211是memcached的所属端口。其他配置不允许改动,否则不能实现缓存的效果。


Spring-context.xml内部配置:
<import resource="simplesm-context.xml" />

<import resource="xmemcached.xml"/>

第一个import是导入simple-spring-memcached的核心配置文件;第二个import是导入xmemcached的配置文件。

3. spring注解

该memcached服务缓存适合不经常发生变化但有不经常改动的数据进行注解,主要适合在service层进行做缓存。

注解适合的方法有:查询、修改、删除。

注解的方式有很多,有兴趣的同事可以去网上多了解。

l 查询方法注解方式

查询方式的注解适合返回值为map、list、object,void的不允许加入缓存注解,

A.带参数的方法:A和B属性在对象内部要注解为CacheKeyMethod(见下文)

@Override

@ReadThroughSingleCache(namespace = namespaceName +":getUser",expiration = expirationTime)

public List<UserInfo> getUser(
@ParameterValueKeyProvider(order = 0) String A,
@ParameterValueKeyProvider(order = 1) String B){


}


Memcached将数据放入内存采用的是key和value的方式放入到内存的,ParameterValueKeyProvider表示是要放入内存的key值,order表示参数的顺序,namespace表示缓存的空间名称,expiration表示放入内存的时间,单位是秒,如果过期对象会自动释移除掉,过期时间要根据实际业务情况进行设置。建议:将Assignedkey的值设置为要进行注解的方法名,namespace设置为自己开发模块的名称。

如:getUser是我要注解的方法

B.不带参数的方法:

@ReadThroughAssignCache(namespace = "getUser" , expiration = 3000)

public List<UserInfo> getUser(){

return list;

}

失效缓存的注解

该方要求查询时将对象放入缓存,但是在该对象的删除、修改,添加方方法上一定要加下面注解

注意:UserInfo 的A 和B 两个参数(即作为缓存key的属性)一定要赋值,否则不触发。
@Override
@InvalidateSingleCache(namespace = namespaceName +":getUser")  
public ProcessStatus updateUserInfo(@ParameterValueKeyProvider UserInfo userInfo) throws Exception {


}


UserInfo 对象 内部

public class UserInfo implements Serializable{


private static final long serialVersionUID = -9169068112746565872L;

    private String A;
    private String B;
    private String C;
    private String D;
    private String E;
    private String F;
    private String G;
    private Timestamp H;
    private Timestamp J;
    
    
    @CacheKeyMethod
    public String cacheKey() {
        return A+ "/" + B;
    }

多个属性 作为key 的时候中间用  "/"  隔开。

第一次用 Simple-spring-memcached ,在用的过程中 出现一种情况会报错,当作为缓存key的属性A 和 B实际有一个可以为空(null),但是memcached 会报错,好像错误名大概是 ”The argument passed into  *  at index  * is null“

最后的解决办法是将源码中的代码修改一下,让 memcached 支持null .

com\google\code\ssm\util  包下有个Utils 类

public static Object getMethodArg(int index, Object[] args, String methodDesc)
  {
    if (index < 0) {
      throw new InvalidParameterException(String.format("An index of %s is invalid", new Object[] { Integer.valueOf(index) }));
    }
    if (args.length <= index) {
      throw new InvalidParameterException(String.format("An index of %s is too big for the number of arguments in [%s]", new Object[] { Integer.valueOf(index), methodDesc }));
    }


    Object indexObject = args[index];
    if (indexObject == null) {
      throw new InvalidParameterException(String.format("The argument passed into [%s] at index %s is null.", new Object[] { methodDesc, Integer.valueOf(index) }));
    }
    return indexObject;
  }


将红色部分 改为

 if (indexObject == null) {
      indexObject ="${null}"
    }

用一个特殊的字符 替换就可以。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
JSP与数据库的增删改查
缓存-MemCache
guice 的@Nullable
 Mybatis @Param注解使用总结
Discuz!NT中集成Memcached分布式缓存
XMemcached与Spring3.2缓存框架集成
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服