本地緩存java
本地緩存存儲在內存當中,實現緩存以下redis
首先須要引入包spring
<dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache</artifactId> <version>2.10.1</version> </dependency>
------------------------------------------------------------------------------------------------------------------------------------------------------------------apache
緩存服務接口:
package com.mobcb.platform.service.common; import net.sf.ehcache.Cache; public interface EhcacheService { public void clearCache(String cacheName, String cacheKey); public void putCache(String cacheName, String cacheKey, Object value); public Object getCacheValue(String cacheName, String cacheKey); public Cache getCache(String cacheName); /** * 設置緩存 * * @param cacheName 緩存名稱 * @param cacheKey 緩存key * @param value 值 * @param timeToLiveSeconds 存在時間,單位秒 */ public void putCache(String cacheName, String cacheKey, Object value, int timeToLiveSeconds); }
------------------------------------------------------------------------------------------------------------------------------------------------------------------
EhcacheService 接口實現:
package com.mobcb.platform.service.impl.common; import com.mobcb.platform.service.common.EhcacheService; import javax.annotation.Resource; import net.sf.ehcache.Cache; import net.sf.ehcache.CacheManager; import net.sf.ehcache.Element; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.stereotype.Service; @Service("ehcacheService") public class EhcacheServiceImpl implements EhcacheService { private static Log logger = LogFactory.getLog(EhcacheServiceImpl.class); @Resource(name = "ehCacheManager") private CacheManager cacheManger; private boolean createCacheIfNotFound = true; @Override public void clearCache(String cacheName, String cacheKey) { Cache cache = getCache(cacheName); if (cache == null) { return; } cache.remove(cacheKey); } @Override public void putCache(String cacheName, String cacheKey, Object value) { Cache cache = getCache(cacheName); if (cache == null) { return; } cache.put(new Element(cacheKey, value)); } @Override public Object getCacheValue(String cacheName, String cacheKey) { Cache cache = getCache(cacheName); if (cache == null) { return null; } Element element = cache.get(cacheKey); if (element == null || element.isExpired()) { return null; } return element.getObjectValue(); } @Override public Cache getCache(String cacheName) { Cache cache = cacheManger.getCache(cacheName); if (cache == null && createCacheIfNotFound) { cache = (Cache) cacheManger.addCacheIfAbsent(cacheName); } if (cache == null) { logger.error("EHCache: cache not config and not auto created, cacheName=" + cacheName); } return cache; } @Override public void putCache(String cacheName, String cacheKey, Object value, int timeToLiveSeconds) { Cache cache = getCache(cacheName); if (cache == null) { return; } cache.put(new Element(cacheKey, value, timeToLiveSeconds, timeToLiveSeconds)); } }
------------------------------------------------------------------------------------------------------------------------------------------------------------------
緩存使用示例:
引入緩存服務接口
/** * 緩存服務 */ @Resource(name = "ehcacheService") private EhcacheService ehcacheService;
調用:緩存
Object requestSource = ehcacheService.getCacheValue( "SHCAuth", "SHCAuthKey"); logger.info("------------------------緩存獲取認證碼"+requestSource+"-----------------------");
第一個參數是緩存名,第二個是緩存名下的鍵值app
------------------------------------------------------------------------------------------------------------------------------------------------------------------ide
Redis緩存spa
緩存接口:orm
package com.mobcb.platform.service.common; /** * 緩存服務,提供緩存操做方法 * <p> * </p> * Created by storm on 2016-05-26. */ public interface CacheService { /** * 清除緩存 * * @param cacheName 緩存名稱 * @param cacheKey 緩存key */ void clearCache(String cacheName, String cacheKey); /** * 增長緩存 * * @param cacheName 緩存名稱 * @param cacheKey 緩存key * @param value 值 */ void putCache(String cacheName, String cacheKey, Object value); /** * 獲取緩存值 * * @param cacheName 緩存名稱 * @param cacheKey 緩存key * @return */ Object getCacheValue(String cacheName, String cacheKey); }
------------------------------------------------------------------------------------------------------------------------------------------------------------------
緩存接口實現:
package com.mobcb.platform.service.impl.common; import com.mobcb.platform.service.common.CacheService; import javax.annotation.Resource; import org.springframework.cache.Cache; import org.springframework.cache.CacheManager; import org.springframework.stereotype.Service; /** * Created by storm on 2016-05-26. */ @Service("cacheService") public class CacheServiceImpl implements CacheService { @Resource(name = "cacheManager") private CacheManager cacheManger; @Override public void clearCache(String cacheName, String cacheKey) { // 清除緩存 Cache cache = getCache(cacheName); if(cache == null) { return; } cache.evict(cacheName + "-" + cacheKey); } @Override public void putCache(String cacheName, String cacheKey, Object value) { Cache cache = getCache(cacheName); if(cache == null) { return; } cache.put(cacheName + "-" + cacheKey, value); } @Override public Object getCacheValue(String cacheName, String cacheKey) { Cache cache = getCache(cacheName); if(cache == null) { return null; } Cache.ValueWrapper element = cache.get(cacheName + "-" + cacheKey); if(element == null) { return null; } return element.get(); } public Cache getCache(String cacheName) { Cache cache = cacheManger.getCache(cacheName); return cache; } }
------------------------------------------------------------------------------------------------------------------------------------------------------------------
cacheManger配置以下:
@Bean public CacheManager cacheManager( @SuppressWarnings("rawtypes") RedisTemplate redisTemplate) { RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate); // cacheManager.setDefaultExpiration(86400); cacheManager.setDefaultExpiration(172800); return cacheManager; }