redis與spring的完全整合
下載spring-data-redis,gav如下:
<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.0.1.RELEASE</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> <exclusion> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> </exclusion> </exclusions> </dependency>
其中exclusion了兩個包,原因是與專案裡其它包衝突。
bean配置如下,可在web.xml裡配置載入bean檔案:
<bean id="redisCacheManager" class="com.cr.common.cache.base.RedisCacheManger"> <property name="pool" ref="shardedJedisPool"/> </bean> <!-- jedis 連線池配置--> <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> <!-- jedis 多個伺服器配置--> <bean id="jedisShardInfo1" class="redis.clients.jedis.JedisShardInfo"> <constructor-arg index="0" value="${redis2.ip}" /> <constructor-arg index="1" value="${redis.port}" type="int" /> </bean> <bean id="jedisShardInfo2" class="redis.clients.jedis.JedisShardInfo"> <constructor-arg index="0" value="${redis.ip}" /> <constructor-arg index="1" value="${redis.port}" type="int" /> </bean> <bean id="shardedJedisPool" class="redis.clients.jedis.ShardedJedisPool"> <constructor-arg index="0" ref="jedisPoolConfig" /> <constructor-arg index="1"> <list> <ref bean="jedisShardInfo1" /> <ref bean="jedisShardInfo2"/> </list> </constructor-arg> </bean> <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" > <property name="hostName" value="${redis.ip}" /> <property name="port" value="${redis.port}" /> <property name="poolConfig" ref="jedisPoolConfig" /> <!--<property name="shardInfo" ref="shardedJedisPool"></property>--> </bean> <context:property-placeholder location="/WEB-INF/spring/SystemContext.properties"/> <context:component-scan base-package="org.springframework.data.redis.samples"/>
屬性檔案內容如下:
redis.ip=192.168.1.110 redis2.ip=192.168.1.112 #Port redis.port=6379 #最大分配的物件數 redis.pool.maxActive=1024 #最大能夠保持idel狀態的物件數 redis.pool.maxIdle=200 #當池內沒有返回物件時,最大等待時間 redis.pool.maxWait=1000 #當呼叫borrow Object方法時,是否進行有效性檢查 redis.pool.testOnBorrow=true #當呼叫return Object方法時,是否進行有效性檢查 redis.pool.testOnReturn=true
快取管理介面:
public interface RedisCache {
public <T> T getRedisCacheInfo(String key);
public <T> boolean setRedisCacheInfo(String key, T value);
}
快取管理實現:
public class RedisCacheManger implements RedisCache {
private ShardedJedisPool pool ;
private Logger log = Logger.getLogger(RedisCacheManger.class);
public ShardedJedisPool getPool() {
return pool;
}
public void setPool(ShardedJedisPool pool) {
this.pool = pool;
}
public <T> T getRedisCacheInfo(String key) {
try {
log.info("get from redisCache :"+key);
System.out.println("get from rediscache");
ShardedJedis jedis = pool.getResource();
pool.returnResource(jedis);
return (T)jedis.get(key);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public <T> boolean setRedisCacheInfo(String key, T value) {
try {
log.info("add to redisCache :"+key);
System.out.println("add to rediscache");
ShardedJedis jedis = pool.getResource();
jedis.set(key, (String)value);
pool.returnResource(jedis);
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
public static void main(String[] args) {
new RedisCacheManger().setRedisCacheInfo("12345", "asdfg");
}
}
快取切面註解:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface NeedRedisCached {}
快取切面處理類:
@Aspect
public class RedisCacheAspect implements Ordered {
private static Logger log = Logger.getLogger(RedisCacheAspect.class);
private RedisCache redisCacheManager;
private int orderValue = 3;
public RedisCache getRedisCacheManager() {
return redisCacheManager;
}
public void setRedisCacheManager(RedisCache redisCacheManager) {
this.redisCacheManager = redisCacheManager;
}
@Pointcut("@annotation(com.jd.bi.odp.common.cache.core.NeedRedisCached)")
public void needRedisCached() {
}
@Around("needRedisCached() && args(filter,..)")
public Object aroundInvoke(ProceedingJoinPoint pjp, QueryFilter filter) throws Throwable {
log.info("enter aroundInvoke!!!");
if (filter.getValue() == null) {
return null;
}
boolean cacheEnabled = CommonUtil.parseBoolean(HBaseConfig.getProperty("redisCache.enabled"), false);
if (cacheEnabled) {
String md5key = MD5Util.getMD5(filter.getValue().toString());
Object value = redisCacheManager.getRedisCacheInfo(md5key);
boolean flag = false;
if (null != value) {
JSONObject json = new JSONObject(value.toString());
return json;
} else if ("null".equals(value)) {
return null;
} else { //執行hbase查詢
value = pjp.proceed();
if(null!=value){//此處根據業務邏輯判斷不快取的條件
}
else{
flag = redisCacheManager.setRedisCacheInfo(md5key, value.toString());
if(flag)
log.info("add a cache success by key: "+md5key);
else
log.warn("add a cache failure by key: "+md5key);
}
}
return value;
}
} else {// 執行hbase查詢
return pjp.proceed();
}
}
@Override
public int getOrder() {
return orderValue;
}
public int getOrderValue() {
return orderValue;
}
public void setOrderValue(int orderValue) {
this.orderValue = orderValue;
}
}
快取存在直接返回,不存在的話執行資料來源查詢,此處是hbase查詢,並設定快取。
切面配置:
<!-- redis快取執行切面 -->
<bean id="RedisCacheAspect"
class="com.cr.common.cache.core.RedisCacheAspect">
<property name="orderValue" value="3" />
<property name="redisCacheManager" ref="redisCacheManager"/>
</bean>
<!-- 切面申明配置-->
<aop:aspectj-autoproxy>
<aop:include name="RedisCacheAspect" />
</aop:aspectj-autoproxy>
此時,前端web頁面使用者的訪問觸發的action如果滿足條件,則會進入切面方法處理,完成redis快取的使用。
相關推薦
redis與spring的完全整合
下載spring-data-redis,gav如下: <dependency> <groupId>org.springframework.data</groupId> <artifa
redis與spring整合·
odi pro classpath sch isp stack exception tst 阻塞 配置spring配置文件applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <bea
四:redis主從讀寫分離,哨兵模式與spring的整合
本篇主要介紹redis實現主從讀寫分離,採用哨兵模式後如何與spring整合在專案中進行開發 主要依賴的jar包,其他專案中實際依賴的jar包很多這裡就不一一列舉了: jar包依賴 <dependency> <grou
Redis叢集與spring的整合
上一篇詳細的贅述了Redis的curd操作及叢集的搭建。下面我們開始將他整合到我們實際的專案中去。我的專案採用的是標準的ssm框架,ssm框架這裡不說,直接開始整合。 首先在maven管理中將我們的jar包引入 <!--1.7.2 開始支援Re
redis 與 spring整合 hash 增刪改操作 list增刪改操作
對於以前redis的學習是非常痛苦的!近期將以前的東西撿起來。以部落格的形式儲存,以便於以後快速撿起來,並和廣大同胞一起分享! 1):簡單介紹 redis 是基於C語言開發。 redis是一個key-value儲存系統。和Memcached類似,它支援儲存的value型別相
Redis的叢集搭建與Redis與spring整合
叢集: 高可用,滿足高併發, 把資料分佈在不同的節點上,提高單個節點的效能 1.redis叢集 架構細節: (1)所有的redis節點彼此互聯(PING-PONG機制),內部使用二進位制協議優化傳輸
redis與spring整合--不使用spring-data-redis
個人感覺如果使用spring-data-redis只作為快取的話有點累贅,所以有了以下方式 之前在網上搜索了一些資料,但是其中的配置總是報錯,原因是JedisShardInfo類缺少相應的構造方法...... 1.redis.xml配置 spring的配置檔案 <?
MyBatis與Spring的整合
mybatis 目錄 user 準備工作 事務管理 項目 pac 映射文件 pla 1.Spring整合MyBatis的準備工作 在項目中加入Spring、MyBatis及整合相關的JAR文件 建立開發目錄結構,創建實體類 創建數據訪問接口(UserMapper) 配置S
WebService--CXF與Spring的整合(jaxws:endpoint形式配置)
tid archetype 全路徑 systems hide onf -o hot conf 一、CXF與Spring整合(jaxws:endpoint形式配置) 工具要點:idea、maven 1.新建一個maven項目 <?xml version="1.0"
Elastic-Job原始碼解析(一)之與Spring完美整合
看過小編寫SpringFramework原始碼解析的同學應該對Spring支援自定義標籤還有點印象吧,沒有的話我們回顧下,然後看看Elastic-Job是如何巧妙的利用自定義標籤生成Job任務的吧。請注意這裡用了一個巧妙關鍵字。我們看它如何巧妙的吧。 Spring自定義
Spring data redis 之 spring 系統整合
第一步: 新增依賴(以maven為例) <!-- redis相關jar包依賴 --> <dependency> &
FastDFS與spring boot整合
在專案Pom當中加入依賴 Maven依賴為 com.github.tobato fastdfs-client 1.26.3 將Fdfs配置引入專案 將FastDFS-Client客戶端引入本地化專案的方式非常簡單,在SpringBoot專案/src/[com.xxx.
activemq 學習系列(五) activemq 與 spring boot 整合
-a pool autowire mapping pri control ESS fin tid activemq 與 spring boot 整合 1、添加依賴 <dependency> <groupId>
JavaEE MyBatis與Spring的整合——基於mapper介面方式開發(教材學習筆記)
在MyBatis與Spring的整合開發中雖然可以通過傳統的DAO開發方式,但是採用DAO方式會產生大量的重複程式碼,因此學習另外一種程式設計方式就很重要了,即Mapper介面程式設計(本章程式碼是基於上一篇部落格的點這裡) 一、基於MapperFactoryBean的整合 Mapper
Spring Boot開發系列(Redis)(三)--Spring boot 整合redis完成簡單的get,set操作
Spring Boot開發系列(Redis)(三)–Spring boot 整合redis完成簡單的get,set操作 【1】匯入reids相關依賴 <dependency> <groupId>redis.clients</g
javaEE Freemarker模板引擎,Freemarker與Spring的整合,生成靜態頁面
applicationContext.xml(Spring配置檔案): <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/sche
springBoot redis -- spring-boot-starter-data-redis與spring-boot-starter-redis兩個包的區別
1、下面是Spring Boot的版本為1.5.9的時候的spring-boot-starter-data-redis的jar包的情況: 2、下面是Spring Boot的版本為1.4.0的時候的spring-boot-starter-data-redis的jar包的情
Thymeleaf Or Freemarker 與Spring boot 整合
整體步驟:(1) 在pom.xml中引入thymeleaf;(2) 如何關閉thymeleaf快取(3) 編寫模板檔案.htmlSpring Boot預設就是使用thymeleaf模板引擎的,所以只需要在pom.xml加入依賴即可:<de
ActiveMQ與Spring進行整合
ActiveMQ與Spring進行整合 Activ
morphia與spring的整合
簡單的來說Morphia與MongoDB的關係就如Hibernate與關係資料庫的關係, 是一個實現Java物件到MongoDB雙向對映的類庫。 首先我們需要一個生成和配置mongodb的工廠類: [java] view plain copy print? p