基spring cache 整合redis

先把整合,需要配置的步驟,寫下來。

1.配置 連接池    核心類JedisPoolConfig

2.配置 連接工廠   核心類JedisCoonectionFactory

3.配置 序列化類型 核心類StringRedisSerializer

4.配置Redis核心操作類  RedisTemplate

5.配置 基於spring cache的redisCacheManager  核心類RedisCacheManager



<!-- 配置連接池 -->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<!-- 最大允許,有多少個狀態爲 Idle的Jedis空閒實例 默認爲8 -->
<property name="maxIdle" value="100" />
<!-- 最大連接數 -->
<property name="maxTotal" value="15" />
<!-- 最大等待時間 (根據jedis jar包版本不同 ,這個屬性也是不同的,低版本爲 MAX_WAIT ) -->
<property name="maxWaitMillis" value="10000" />
<!-- 在borrow一個jedis實例時,是否提前進行validate操作;如果爲true,則得到的jedis實例均是可用的 -->
<property name="testOnBorrow" value="true" />
</bean>

<!-- Redis的連接工廠 -->
<bean id="connectionFactory"
class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<!-- 連接地址 我的是本機上的redis -->
<property name="hostName" value="127.0.0.1" />
<!-- 連接密碼 redis默認是沒有密碼的 沒有直接 "" -->
<property name="password" value="106310" />
<!-- redis端口 默認6379 -->
<property name="port" value="6379" />
<!-- 引用連接池 -->
<property name="poolConfig" ref="jedisPoolConfig" />
</bean>

<!-- 序列化 key (保證存入redis 的key 不亂碼) -->
<bean id="stringRedisSerializer"
class="org.springframework.data.redis.serializer.StringRedisSerializer">
</bean>

<!-- 操作redis核心類 -->
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
<!-- 引入redis工廠 -->
<property name="connectionFactory" ref="connectionFactory" />
<!-- 引入 spring Key的序列化(還可以設置 hashKey,這裏舉例,簡單起見只插入spring 的鍵值對) -->
<property name="keySerializer" ref="stringRedisSerializer" />
</bean>

<!-- 基於spring cache的redisCacheManager -->
<bean id="cacheManager" class="org.springframework.data.redis.cache.RedisCacheManager"
c:template-ref="redisTemplate" />


基於spring-mybatis寫一個簡單的查詢和插入,這裏就不多說了,直接看Service層代碼

查詢操作:

其中Cacheable註解 先查詢緩存中有沒有 該key的值,沒有查詢數據庫,並將該方法的返回值結果保存到緩存中。

屬性:key  Redis鍵值對 中的key 讀取緩存時使用(該屬性不是必須的,key會自動生成)

屬性:value  將生成的鍵保存到那個cache中(因爲我們是在Redis操作的,鍵都是唯一的,所以這裏的value就顯得多餘了,不過是必須得填寫的)

CacheAble  CachePut  CacheEvict用法: http://blog.csdn.net/u014381863/article/details/48788199

springEl表達式生成key策略:http://blog.csdn.net/fireofjava/article/details/48913335

 @Cacheable(key = "#user1.id",value="user")
 @Override
 public User login(User user1) {
  List<User> list = dao.select(user1);
  return list.get(0);
 }


測試:先去緩存中查找(redis),沒有則查數據庫,並將結果保存到Redis中

1.首先將數據庫中手動插入一條信息 ID=1 username="張三" password="123456";

2.運行測試代碼

ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
  UserService bean = app.getBean(UserService.class);

User user = new User();
  user.setId("1");
  User login = bean.login(user);
  System.out.println(login);

輸入結果:1 張三 123456


3.然後去查看 redis 在控制檯輸入 get 1   有值說明,已經保存到了Redis中了。

4.然後刪除數據庫中的信息,在運行查詢的例子。

依然輸出 :1 張三 123456 

說明第二此查詢是從redis中查詢的。














發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章