当前位置:首页 > 开发 > 开源软件 > 正文

[JShop]开源电子商务系统jshop的系统缓存实现

发表于: 2015-05-25   作者:dinguangx   来源:转载   浏览:
摘要: 前言 jeeshop中通过SystemManager管理了大量的缓存数据,来提升系统的性能,但这些缓存数据全部都是存放于内存中的,无法满足特定场景的数据更新(如集群环境)。JShop对jeeshop的缓存机制进行了扩展,提供CacheProvider来辅助SystemManager管理这些缓存数据,通过CacheProvider,可以把缓存存放在内存,ehcache,redis,memcache

前言

jeeshop中通过SystemManager管理了大量的缓存数据,来提升系统的性能,但这些缓存数据全部都是存放于内存中的,无法满足特定场景的数据更新(如集群环境)。JShop对jeeshop的缓存机制进行了扩展,提供CacheProvider来辅助SystemManager管理这些缓存数据,通过CacheProvider,可以把缓存存放在内存,ehcache,redis,memcached等各种不同的容器中,从而实现高度可定制的缓存管理机制。

CacheProvider

JShop中提供了三种不同类型的CacheProvider,分别为SimpleCacheProvider,EhcacheCacheProviderRedisCacheProvider, 分别使用内存,ehcache和redis来管理缓存数据. 开发者可以方便地定制自己的CacheProvider,来实现对缓存的管理。

CacheProvider接口定义

public interface CacheProvider {
    /**
     * 放入cache中
     * @param key
     * @param cacheObject
     */
    public void put(String key, Serializable cacheObject);

    /**
     * 获取放在cache中的内容
     * @param key
     * @return
     */
    public Serializable get(String key);

    /**
     * 清除cache中对应的值
     * @param key
     */
    public void remove(String key);

    /**
     * 清除所有的cache
     */
    public void clear();
}

CacheProvider与SystemManager配置

Jshop的缓存机制配置位于spring/applicationContext-cache.xml, 缓存配置示例如下:

    <bean id="systemManager" class="net.jeeshop.core.front.SystemManager">
        <property name="cacheProvider" ref="ehcacheCacheProvider"/>
    </bean>

    <bean id="ehcacheCacheProvider" class="net.jeeshop.core.cache.EhcacheCacheProvider">
        <property name="configLocation" value="classpath:ehcache.xml"></property>
        <property name="cacheName" value="eternalCache"/>
    </bean>

SimpleCacheProvider

SimpleCacheProvider内部通过Map来将所有缓存数据存放在内存中,所以相对简单,并会占用较多的内存资源,可以在一般的小型应用中使用,它的使用不需要其他的配置信息,只需要在配置文件中注入到systemManager即可,如:

    <bean id="systemManager" class="net.jeeshop.core.front.SystemManager">
        <property name="cacheProvider" ref="simpleCacheProvider"/>
    </bean>

    <!-- cache provider -->
    <bean id="simpleCacheProvider" class="net.jeeshop.core.cache.SimpleCacheProvider"/>

EhcacheCacheProvider

EhcacheCacheProvider通过ehcache管理缓存数据,使用它需要提供两个属性: configLocation: ehcache配置文件路径 cacheName : 所用的Cache名称(这里需要配置cache为永不过期,即eternal=true) 示例:

    <bean id="ehcacheCacheProvider" class="net.jeeshop.core.cache.EhcacheCacheProvider">
        <property name="configLocation" value="classpath:ehcache.xml"></property>
        <property name="cacheName" value="eternalCache"/>
    </bean>

RedisCacheProvider

EhcacheCacheProvider通过redis管理缓存数据,使用它需要提供Redis相关的配置信息,如数据源,连接池等。 相关的配置位于conf.properties,如下:

##redis配置##
redis.ip=localhost
redis.port=6379
redis.password=
redis.pool.maxIdle=200
redis.pool.testOnBorrow=true

完整的spring配置信息如下:

    <bean id="redisCacheProvider" class="net.jeeshop.core.cache.RedisCacheProvider">
        <property name="redisTemplate" ref="redisTemplate"/>
    </bean>

    <bean id="jedisConnectionFactory"
          class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
        <property name="hostName" value="${redis.ip}"/>
        <property name="port" value="${redis.port}"/>
        <property name="password" value="${redis.password}"/>
        <property name="poolConfig" ref="jedisPoolConfig"/>
    </bean>
    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
        <property name="connectionFactory" ref="jedisConnectionFactory"/>
    </bean>
    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <!--<property name="maxActive" value="${redis.pool.maxActive}"/>-->
        <property name="maxIdle" value="${redis.pool.maxIdle}"/>
        <!--<property name="maxWait" value="${redis.pool.maxWait}"/>-->
        <property name="testOnBorrow" value="${redis.pool.testOnBorrow}"/>
    </bean>

[JShop]开源电子商务系统jshop的系统缓存实现

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
下载源代码 git clone https://git.oschina.net/dinguangx/jshop.git 使用maven编译并生成eclipse/i
下载源代码 git clone https://git.oschina.net/dinguangx/jshop.git 使用maven编译并生成eclipse/i
这篇文章,将有实质的进展。先把大体的需求整理了一份用例图,自认为粒度做的已经很细了,再细就没
这篇文章,将有实质的进展。先把大体的需求整理了一份用例图,自认为粒度做的已经很细了,再细就没
自己一直在做门户网站,一直没机会去接触仓存网站,例如B2C,所以想找一篇关于订单流程的文章看看,
1. 认识OpenCart网站后台界面 相关教程链接: http://www.opencartchina.com/bbs/topic885.html htt
欢迎大家加入QQ群讨论opencart使用及技术问题 1. 认识OpenCart网站后台界面 相关教程链接: http://
商品模块是支撑整个架构的核心,如果这块没设计好,那么所有后期的复杂的统计需求基本都满足不了。
iWebShop 是一款面向独立卖家的单用户开源网店系统,基于PHP+MySQL框架开发,通过它可以迅速建立起
在网站中加入电子商务功能越来越重要,不管是出于时髦还是实用,本文介绍了22个国外最常用的电子商
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号