先把整合,需要配置的步驟,寫下來。
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中查詢的。