dubbo2.5-spring4-mybastis3.2-springmvc4-mongodb3.4-redis3.2整合(五)Spring中spring-data-redis的使用
版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/u010046908/article/details/54170891
前面已經寫了四篇關於dubbo2.5-spring4-mybastis3.2-springmvc4-mongodb3.4-redis3.2整合的文章:
- dubbo2.5-spring4-mybastis3.2-springmvc4-mongodb3.4-redis3.2整合(一)Dubbo的使用
- dubbo2.5-spring4-mybastis3.2-springmvc4-mongodb3.4-redis3.2整合(二)之 JDBC連線池、監控元件 Druid
- dubbo2.5-spring4-mybastis3.2-springmvc4-mongodb3.4-redis3.2整合(三)使用Spring AOP實現mysql的讀寫分離
- dubbo2.5-spring4-mybastis3.2-springmvc4-mongodb3.4-redis3.2整合(四)Spring AOP中使用log4j實現http請求日誌入mongodb
今天繼續寫一篇關於Spring中spring-data-redis的使用。
Redis是一種特殊的型別的資料庫,它被稱為一種key-value儲存。key-value儲存儲存的是鍵值對。實際上,key-value儲存於雜湊Map有很大的相似。
spring data是一種面向模板的資料訪問,能夠在使用Redis的時候,為我們提供了幫助。於是就有了spring-data-redis。
1. spring-data-redis的簡介
spring-data-redis包含了多個模板實現,用來完成Redis資料庫的存取功能。建立spring-data-redis模板之前,我們首先需要一個Redis連線工廠,spring-data-redis提供了四個連線工廠供我們選擇。
2.spring-data-redis所需要依賴
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>1.6.2.RELEASE</version>
</dependency>
3. spring-data-redis的使用
3.1 連線到Redis
Redis連線工廠會生成到Redis資料庫伺服器的連線。spring-data-redis為四種Redis客戶端實現了連線工廠:
- JedisConnectionFactory
- JredisConnectionFactory
- LettuceConnectionFactory
-
SrpConnectionFactory
具體選擇哪一種取決於自己。
(1)建立redis.properties:
maxTotal=8
#最大空閒時間
maxIdle=8
#最短空閒時間
minIdle=0
#最大的等待時間
maxWaitMillis=6000
#Redis的連線地址
hostR=127.0.0.1
#埠
portR=6379
(2)建立spring-redis.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:rabbit="http://www.springframework.org/schema/rabbit"
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/rabbit
http://www.springframework.org/schema/rabbit/spring-rabbit-1.2.xsd">
<!-- 引入redis.properties配置檔案-->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:redis.properties" /> </bean>
<!-- redis連線池的配置 -->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxTotal" value="${maxTotal}" />
<property name="maxIdle" value="${maxIdle}" />
<property name="minIdle" value="${minIdle}" />
<property name="maxWaitMillis" value="10000" />
<property name="minEvictableIdleTimeMillis" value="300000"></property>
<property name="numTestsPerEvictionRun" value="3"></property>
<property name="timeBetweenEvictionRunsMillis" value="60000"></property>
</bean>
<!-- 工廠類配置 -->
<bean id="jedisConnectionFactory"
class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<property name="hostName" value="${hostR}" />
<property name="port" value="${portR}" />
<property name="poolConfig" ref="jedisPoolConfig" />
<property name="timeout" value="15000"></property>
<property name="usePool" value="true"></property>
</bean>
<!-- redisTemplate配置 -->
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
<property name="connectionFactory" ref="jedisConnectionFactory" />
<property name="keySerializer">
<bean
class="org.springframework.data.redis.serializer.StringRedisSerializer" />
</property>
<property name="valueSerializer">
<bean
class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />
</property>
<property name="enableTransactionSupport" value="true" />
</bean>
</beans>
以上是我配置的jedisPoolConfig,jedisConnectionFactory,redisTemplate。
3.2 使用RedisTemplate
Redis連線工廠會生成到Redis key-value儲存的連線(以RedisConnection的形式。)藉助RedisConnection,可以儲存和讀取資料。
spring-redis-data以模板的形式提供了較好等級的資料訪問方案。實際上,spring-data-redis提供了兩個模板:
- RedisTemplate
- StringRedisTemplate
其中RedisTemplate使用兩個型別進行了引數。第一個引數是key的型別,第二個引數是value的型別,而StringRedisTemplate是RedisTemplate的擴充套件,只關注String型別,也就是key和vlaue都是String型別。
3.2.1 RedisTemplate使用簡單值
假設我們想通過RedisTemplate
public class UserRedisDaoImp extends AbstractBaseRedisTemplete<User>
implements IUserRedisDao {
@Override
public User findById(String key) {
return (User) redisTemplate.opsForValue().get(key);
}
@Override
public void saveUser(String key,User user) {
redisTemplate.opsForValue().set(key, user);
}
}
3.2.2 RedisTemplate使用List值
使用List型別的value與之類似,只需要使用opForList()方法,
package com.lidong.core.user.dao;
import java.util.List;
import com.lidong.model.user.User;
import com.lidong.util.AbstractBaseRedisTemplete;
public class UserRedisDaoImp extends AbstractBaseRedisTemplete<User>
implements IUserRedisDao {
@Override
public List<User> getUserList(String key,long start,long end) {
return redisTemplate.opsForList().range(key, 0, end);
}
@Override
public Long addUserToUserList(String key, User user) {
return redisTemplate.opsForList().leftPush(key, user);
}
}
3.2.3 RedisTemplate使用Set值
除了使用List型別和value型別,我們還可以使用opForSet()的方法操作Set,最為常用的的就是向Set中新增一個元素:
@Override
public void saveUser(String key,User user) {
redisTemplate.opsForSet().add(key, user);
}
在我們有多個Set,並對這些Set集合進行差、交、並的操作。
Set<User> difference = redisTemplate.opsForSet().difference("users1", "users2");
Set<User> union = redisTemplate.opsForSet().union("users1", "users2");
Set<User> intersect = redisTemplate.opsForSet().intersect("users1", "users2");
//我還可以移除Set中的元素
Long remove = redisTemplate.opsForSet().remove("user1", user);
3.2.4 RedisTemplete繫結到某個key上
我們可以將Value、List、Set等可以繫結到指定的key上。這些用個的不太多,但是也簡單。這裡就不具體寫了。
3.2.5 構造AbstractBaseRedisTemplete
package com.lidong.util;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.data.redis.core.RedisTemplate;
/**
* 基礎的RedisTemplete
* @author lidong
* @param <T>
* @date 2017-1-5
*/
public abstract class AbstractBaseRedisTemplete<T> implements
ApplicationContextAware {
protected RedisTemplate<String,T> redisTemplate;
/**
* @Description RedisTemplate
* @param redisTemplate
*/
public void setRedisTemplate(RedisTemplate<String,T> redisTemplate) {
this.redisTemplate = redisTemplate;
}
@Override
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
@SuppressWarnings("unchecked")
RedisTemplate<String,T> redisTemplate = applicationContext.getBean(
"redisTemplate", RedisTemplate.class);
setRedisTemplate(redisTemplate);
}
}
Spring-Data-Redis的使用基本最常用 的就是這三種型別value型別、List型別、Set型別。
相關文章
- spring+redis的整合,使用spring-data-redis來整合SpringRedis
- dubbo2.5-spring4-mybastis3.2-springmvc4-mongodb3.4-redis3.2整合(九)之spring中定時器quartz的整合ASTS3SpringMVCMongoDBRedis定時器quartz
- spring-data-redis遇到twemproxySpringRedis
- Spring框架(五)實戰Spring整合MybatisSpring框架MyBatis
- Dozer的使用: 整合SpringSpring
- Spring Boot(五):Spring Boot Jpa 的使用Spring Boot
- Spring中整合Ehcache使用頁面、物件快取Spring物件快取
- spring-data-redis 動態切換資料來源SpringRedis
- 五、Spring Boot整合Spring Security之認證流程2Spring Boot
- Spring Cache + Caffeine的整合與使用Spring
- ActiveMQ的使用及整合spring的使用例項MQSpring
- Spring boot學習(五)Spring boot整合Mybatis Generator以及PageHelperSpring BootMyBatis
- Mybatis 的使用(整合Spring、SpringBoot)MyBatisSpring Boot
- [文件中]Struts與Spring整合Spring
- Spring Boot(十八):使用 Spring Boot 整合 FastDFSSpring BootAST
- 使用Spring Boot整合ConsulSpring Boot
- Spring Boot中整合機器學習簡介Spring Boot機器學習
- springboot(五):spring data jpa的使用Spring Boot
- Spring與Hibernate整合中的session問題SpringSession
- 使用Spring Boot整合Apollo配置中心Spring Boot
- Spring Boot 入門(五):整合 AOP 進行日誌管理Spring Boot
- spring-boot-route(五)整合Swagger生成介面文件SpringbootSwagger
- spring boot使用註解的方式整合mybaitsSpring BootAI
- 銷售使用CRM系統整合Excel的五個技巧Excel
- Spring的Junit整合Spring
- spring:spring與mybatis的整合SpringMyBatis
- Spring Boot 3中將JWT與Spring Security 6整合Spring BootJWT
- 在spring,mybatis整合配置中走的彎路(1)SpringMyBatis
- Spring Boot整合swagger使用教程Spring BootSwagger
- 使用 CXF 整合 Spring 開發 Web ServiceSpringWeb
- Spring3+MyBatis 整合多方法使用SpringMyBatis
- Spring Test 整合 JUnit 4 使用總結Spring
- 五個模型整合模型
- Spring中Enable*功能的使用Spring
- AspectJ 在 Spring 中的使用Spring
- Spring 對Mabatis的整合SpringBAT
- CAS與Spring的整合Spring
- Spring和JUnit的整合Spring