`

springmvc整合redis架构搭建实例

阅读更多

springmvc整合redis架构搭建实例
好久没学习了,因为自己公司主要做ERP系统,我主要负责这些产品的的开发工作,最近面试遇到了一些开发人员使用redis缓存用于web开发,因为自己没用过,也不是很了解就顺便解了一下,顺便在公司已有项目中测试整合redis,具体配置代码在下面贴出:


1.配置文件


 2.使用redis64位下载地址:

   http://download.csdn.net/download/xmt1139057136/9220075


第一步 : 创建 maven 项目 :


1.在已有pom.xml中引入jedis和spring-data-redis架包:

 

     <!-- redis集成 -->
        <dependency>
		  <groupId>redis.clients</groupId>
		  <artifactId>jedis</artifactId>
		  <version>2.9.0</version>
		</dependency>
		<dependency>  
            <groupId>org.springframework.data</groupId>  
            <artifactId>spring-data-redis</artifactId>  
            <version>1.6.2.RELEASE</version>  
        </dependency>  
        <!-- redis集成 -->

 
2.spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:context="http://www.springframework.org/schema/context" 
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
            http://www.springframework.org/schema/beans/spring-beans-4.1.xsd 
            http://www.springframework.org/schema/mvc 
            http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd 
            http://www.springframework.org/schema/context 
            http://www.springframework.org/schema/context/spring-context-4.1.xsd 
            http://www.springframework.org/schema/aop 
            http://www.springframework.org/schema/aop/spring-aop-4.1.xsd 
            http://www.springframework.org/schema/tx 
            http://www.springframework.org/schema/tx/spring-tx-4.1.xsd">

	<!-- 扫描service、dao组件 -->
	<context:component-scan base-package="com.redis,com.ydtx.moudle,com.ydtx.bean.pojo" />
	<context:component-scan base-package="com.redis"> 
	</context:component-scan>
	<!-- 分解配置 jdbc.properites -->
	<context:property-placeholder location="classpath:jdbc.properties" ignore-unresolvable="true" />
	 <!-- 配置redis  --> 
    <context:property-placeholder location="classpath:redis.properties" ignore-unresolvable="true"/>
    
    <!-- 使用annotation 自动注册bean, 并保证@Required、@Autowired的属性被注入 -->
    <context:component-scan
            base-package="com.ydtx.moudle.controller.activiti5">
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
	<!-- 数据源c3p0 -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="driverClass" value="${jdbc.driverClassName}" />
		<property name="jdbcUrl" value="${jdbc.url}" />
		<property name="user" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
		<property name="maxPoolSize" value="${c3p0.pool.size.max}" />
		<property name="minPoolSize" value="${c3p0.pool.size.min}" />
		<property name="initialPoolSize" value="${c3p0.pool.size.ini}" />
		<property name="acquireIncrement" value="${c3p0.pool.size.increment}" />
	</bean>


	<!-- sessionFactory 将spring和mybatis整合 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="configLocation" value="classpath:spring-mybatis.xml" />
		<property name="mapperLocations" value="classpath*:com/ydtx/bean/mapper/**/*.xml" />
	</bean>
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com.ydtx.moudle.service" />
		<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
	</bean>

	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource" />
	</bean>
	<tx:advice id="transactionAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<tx:method name="add*" propagation="REQUIRED" />
			<tx:method name="append*" propagation="REQUIRED" />
			<tx:method name="insert*" propagation="REQUIRED" />
			<tx:method name="save*" propagation="REQUIRED" />
			<tx:method name="update*" propagation="REQUIRED" />
			<tx:method name="modify*" propagation="REQUIRED" />
			<tx:method name="edit*" propagation="REQUIRED" />
			<tx:method name="delete*" propagation="REQUIRED" />
			<tx:method name="remove*" propagation="REQUIRED" />
			<tx:method name="repair" propagation="REQUIRED" />
			<tx:method name="delAndRepair" propagation="REQUIRED" />

			<tx:method name="get*" propagation="SUPPORTS" />
			<tx:method name="find*" propagation="SUPPORTS" />
			<tx:method name="load*" propagation="SUPPORTS" />
			<tx:method name="search*" propagation="SUPPORTS" />
			<tx:method name="datagrid*" propagation="SUPPORTS" />

			<tx:method name="*" propagation="SUPPORTS" />
		</tx:attributes>
	</tx:advice>
	<aop:config>
		<aop:pointcut id="transactionPointcut" expression="execution(* com.ydtx.moudle.service.*.*.*.*(..))" />
		<aop:advisor pointcut-ref="transactionPointcut" advice-ref="transactionAdvice" />
	</aop:config>
	    <!-- 引入同文件夹下的redis属性配置文件 -->
    <import resource="redis-context.xml"/>
</beans>  

 

3.redis-context.xml

 

<beans     xmlns="http://www.springframework.org/schema/beans" 
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:p="http://www.springframework.org/schema/p" 
           xmlns:tx="http://www.springframework.org/schema/tx"
           xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="
            http://www.springframework.org/schema/beans 
            http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
            http://www.springframework.org/schema/tx 
            http://www.springframework.org/schema/tx/spring-tx-4.1.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context-4.1.xsd">
    
    
    <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">  
        <property name="maxIdle" value="${redis.maxIdle}" />  
        <property name="maxTotal" value="${redis.maxTotal}" />  
        <property name="MaxWaitMillis" value="${redis.MaxWaitMillis}" />  
        <property name="testOnBorrow" value="${redis.testOnBorrow}" />  
    </bean>  
      
    <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"  
        p:host-name="${redis.host}" 
        p:port="${redis.port}" 
        p:password="${redis.pass}"  
        p:pool-config-ref="poolConfig"/>  
      
    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">  
        <property name="connectionFactory"   ref="connectionFactory" />  
    </bean>      
     
</beans>   
 4.redis.properties

 

 

# Redis settings
#redis.host=192.168.20.101
#redis.port=6380
#redis.pass=foobared
redis.host=127.0.0.1
redis.port=6379
redis.pass=
  
redis.maxIdle=300
redis.maxTotal=600
redis.MaxWaitMillis=1000
redis.testOnBorrow=true
 

 

5.Redis对象持久化操作类

package com.redis;

import java.io.Serializable;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;

public abstract class RedisGeneratorDao<K extends Serializable, V extends Serializable>  {
    
    @Autowired
    protected RedisTemplate<K,V> redisTemplate ;

    /** 
     * 设置redisTemplate 
     * @param redisTemplate the redisTemplate to set 
     */  
    public void setRedisTemplate(RedisTemplate<K, V> redisTemplate) {  
        this.redisTemplate = redisTemplate;  
    }  
      
    /** 
     * 获取 RedisSerializer 
     * <br>------------------------------<br> 
     */  
    protected RedisSerializer<String> getRedisSerializer() {  
        return redisTemplate.getStringSerializer();  
    }  
    
}

 

 5.在项目中service中使用,直接继承RedisGeneratorDao

IUserInfoService.java

package com.ydtx.moudle.service.system.userInfo;


import com.ydtx.bean.mapper.comm.BaseArgument;
import com.ydtx.bean.pojo.system.User;

public interface IUserInfoService {
	/**
	 * 获取用户信息
	 * @param user
	 * @return
	 */
	public BaseArgument loadInfoData(User user);
	/**
	 * 插入用户信息
	 * @param user
	 * @return
	 */
	public BaseArgument insertUser(User user);
	/**
	 * 删除用户
	 */
	public BaseArgument deleteUser(User user);
	/**
	 * 根据id查询数据
	 * @param staffid
	 * @return
	 */
	public BaseArgument getDataById(int staffid);
	/**
	 * 修改数据
	 * @param user
	 * @return
	 */
	public BaseArgument editData(User user);
	
	/**
	 * Description:更改用户信息 
	 * @author 唐寅建
	 * @date 上午10:22:47
	 */
	public BaseArgument updateUserInfoBySekected (User user);
	public BaseArgument loadAccounts(User user);
}

 UserInfoService.java

package com.ydtx.moudle.service.system.userInfo;


import java.io.Serializable;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.stereotype.Service;

import com.redis.RedisGeneratorDao;
import com.ydtx.bean.mapper.comm.BaseArgument;
import com.ydtx.bean.pojo.system.User;
import com.ydtx.moudle.dao.system.userInfo.IUserInfoDao;
@Service("UserInfoService")
public class UserInfoService extends RedisGeneratorDao<Serializable, Serializable> implements IUserInfoService{
	protected static final Logger logger = Logger.getLogger(UserInfoService.class);
	@Autowired
	IUserInfoDao dao;
	@Override
	public BaseArgument loadInfoData(User user) {
			BaseArgument res=new BaseArgument();
			try {
				res=dao.loadInfoData(user);
			} catch (Exception e) {
				logger.error(e.getMessage());
				throw new RuntimeException(e.getMessage());
			}
			// TODO Auto-generated method stub
			return res;
	}
	
	@Override
	public BaseArgument getDataById(int staffid){
		BaseArgument res=new BaseArgument();
		try {
			res=dao.getDataById(staffid);
		} catch (Exception e) {
			logger.error(e.getMessage());
			throw new RuntimeException(e.getMessage());
		}
		return res;
	}
	
	@Override
	public BaseArgument editData(User user) {
		BaseArgument res=new BaseArgument();
		try {
			res=dao.editData(user);
		} catch (Exception e) {
			logger.error(e.getMessage());
			throw new RuntimeException(e.getMessage());
		}
	    return res;
    }

	@Override
	public BaseArgument insertUser(User user) {
		BaseArgument res=new BaseArgument();
		try {
			res=dao.insertUser(user);
		} catch (Exception e) {
			logger.error(e.getMessage());
			throw new RuntimeException(e.getMessage());
		}
	    return res;
    }
	
	@Override
	public BaseArgument deleteUser(User user) {
		BaseArgument res=new BaseArgument();
		try {
			res=dao.deleteUser(user);
		} catch (Exception e) {
			logger.error(e.getMessage());
			throw new RuntimeException(e.getMessage());
		}
	    return res;
    }

	@Override
	public BaseArgument updateUserInfoBySekected(final User user) {
		BaseArgument res=new BaseArgument();
		try {
			res=dao.updateUserInfoBySekected(user);
                       //将登陆的用户密码保存在redis中
			redisTemplate.execute(new RedisCallback<Boolean>() {  
	            public Boolean doInRedis(RedisConnection connection)  
	                    throws DataAccessException {  
	                RedisSerializer<String> serializer = getRedisSerializer();  
	                byte[] key  = serializer.serialize(user.getUseraccount());  
	                byte[] name = serializer.serialize(user.getPassword());  
	                connection.set(key, name);  
	                return true;  
	            }  
	        });  
		} catch (Exception e) {
			logger.error(e.getMessage());
			throw new RuntimeException(e.getMessage());
		}
	    return res;
	}

	@Override
	public BaseArgument loadAccounts(User user) {
		// TODO Auto-generated method stub
		BaseArgument res=new BaseArgument();
		try {
			res=dao.loadAccounts(user);
		} catch (Exception e) {
			// TODO: handle exception
			logger.error(e.getMessage());
			res.fail();
		}
		return res;
	}
}
6.测试是否将登陆用户成功存入本地redis中

 
7.测试成功

其他文章参考:
    Redis快速入门:http://www.yiibai.com/redis/redis_quick_guide.html    StringRedisTemplate常用语句:http://blog.csdn.net/u011911084/article/details/53435172

 

  • 大小: 14.5 KB
  • 大小: 13.4 KB
分享到:
评论

相关推荐

    redis学习案例

    总结,"redis学习案例"和"springmvc整合redis架构搭建实例"涉及了Redis的基础知识、Spring MVC与Redis的整合方法,以及如何在实际应用中实现Redis的模块化。通过这些知识,我们可以有效地利用Redis提升Web应用的性能...

    maven 创建 spring + springmvc + mybatis + redis + mysql 学生查询例子

    本示例提供了一个使用Maven集成Spring、SpringMVC、MyBatis、Redis和MySQL的综合学生查询系统。下面将详细阐述这些技术栈的核心概念及其整合过程。 首先,Maven是Java项目管理工具,它帮助开发者管理依赖关系,构建...

    springmvc+shiro+spring+hibernate+redis缓存管理示例

    本示例项目"springmvc+shiro+spring+hibernate+redis缓存管理示例"提供了一个全面的框架整合实例,它将几个关键的技术组件融合在一起,旨在帮助开发者实现更优的性能和安全性。以下是关于这些技术组件及其在项目中的...

    SSM架构+redis缓存实例环境搭建

    接下来,我们将介绍如何将Redis缓存整合到SSM架构中: 1. Redis安装与配置:下载并安装Redis服务器,配置相关参数如端口、密码等,确保服务能够正常启动和运行。 2. 添加Redis客户端库:在项目中引入Jedis或...

    ssm+redis整合所需的所有jar包

    5. 配置Redis:配置Redis的连接池,设置RedisTemplate或Jedis实例,实现缓存策略。 6. 编写业务逻辑:在Service层调用Mapper接口执行数据库操作,并利用Redis进行缓存操作。 这个压缩包中的所有jar包涵盖了这些整合...

    SpringMVC精品资源--订单派单中心、springBoot、springMVC、Mybatis、Redis、K.zip

    综合以上信息,我们可以预想这个压缩包中包含了一个完整的微服务架构的订单派送系统实例,包括Spring Boot启动器、SpringMVC负责处理HTTP请求、Mybatis用于数据库操作、Redis用于缓存和队列管理,而Kafka则可能作为...

    框架springmvc3.2+spring3.2+mybatis3.11整合附带jar包

    在SSM整合中,Spring作为容器管理其他两个组件的实例。 3. **MyBatis**: MyBatis是一个轻量级的持久层框架,它允许开发者将SQL语句与Java代码直接映射,避免了传统的JDBC代码编写。MyBatis支持XML或注解方式配置...

    用SpringMVC-MyBatis 搭建高性能安全站点

    SpringMVC作为Spring框架的一部分,提供了强大的Model-View-Controller(MVC)架构支持,而MyBatis则是一个轻量级的持久层框架,简化了数据库操作。接下来,我们将深入探讨如何利用这两个框架搭建一个高性能、安全的...

    solr ssm java

    标题中的"solr ssm java"表明这是一个使用Java语言,结合Spring、SpringMVC和MyBatis(SSM)框架的项目,其中整合了Apache Solr搜索引擎。让我们深入了解一下这些技术及其相互作用。 **Solr**: Apache Solr是基于...

    spring-cloud_yinjihuan.tar.gz

    开发者可能在这个模块中整合了SpringMVC、Mybatis、Redis和Freemarker的功能,实现了如服务注册、服务调用、权限控制、数据缓存等核心功能。 总的来说,"spring-cloud_yinjihuan.tar.gz"项目是一个深入实践Spring ...

    springboot-demo-master.zip

    《Spring Boot + Spring MVC + Redis 实战:一个简单的整合示例》 在现代Web开发中,Spring Boot以其简洁的配置和强大的功能深受开发者喜爱。它极大地简化了Spring应用的初始搭建以及开发过程,使得我们可以快速地...

    基于springboot的火车票订票系统源码数据库.zip

    本项目——“基于SpringBoot的火车票订票系统”是一个典型的Java Web应用实例,它整合了SpringBoot、SSM(Spring、SpringMVC、MyBatis)以及JSP技术,旨在为用户提供便捷的在线火车票预订服务。接下来,我们将深入...

    基于Springboot的漫画网站.zip

    《基于Springboot的漫画网站》项目是一个典型的Java后端开发实例,主要采用了Spring Boot框架,结合其他技术如SSM(Spring、SpringMVC、MyBatis)和微信小程序,构建了一个功能完善的在线漫画阅读平台。下面将详细...

    基于SpringBoot的装饰工程管理系统源码数据库.zip

    总结,基于SpringBoot的装饰工程管理系统源码数据库是一个综合运用Java技术栈的实例,它展示了如何在实际项目中整合各种技术,实现高效、稳定、安全的业务管理。对于学习和提升Java Web开发技能,这个项目提供了宝贵...

    基于springboot的高校心理教育辅导系统源码数据库.zip

    该系统基于SpringBoot框架,SpringBoot简化了Spring应用的初始搭建以及开发过程,通过内嵌的Tomcat服务器,使得项目无需额外配置即可运行。同时,系统还集成了SSM(Spring、SpringMVC、MyBatis)三大组件,实现了...

    Java项目超市购物管理系统

    本项目“Java超市购物管理系统”是一个典型的SSM(Spring、SpringMVC、MyBatis)框架整合的实例,旨在实现对超市商品的入库、出库、销售等业务流程的有效管理。 1. **SSM框架解析** - **Spring**:作为核心容器,...

    SSM框架面试题.pdf

    - Spring Boot是一个基于Spring框架的快速应用开发框架,它简化了Spring应用的初始搭建以及开发过程。Spring Boot为Spring应用提供了开箱即用的体验,减少了配置量。 12. **Spring中的Java配置方式** - 使用`@...

Global site tag (gtag.js) - Google Analytics