Redis搭建缓存服务器和会话服务器

标签: Redis作为MyBatis的二级缓存  Redis作为Session会话管理服务器

本文的核心内容:使用Redis作为MyBatis的二级缓存、使用Redis作为Session会话服务器统一管理管理Session。

 

一:使用Redis作为MyBatis的二级缓存

 

实战:

准备条件:SSM框架开发环境 【Spring版本4.3.14】

导入核心Jar:

 

Maven坐标如下

 <!--Redis Jar-->
    <!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
    <dependency>
      <groupId>redis.clients</groupId>
      <artifactId>jedis</artifactId>
      <version>2.8.0</version>
    </dependency>

    <!-- Mybatis与Redis 集成Jar -->
    <dependency>
      <groupId>org.mybatis.caches</groupId>
      <artifactId>mybatis-redis</artifactId>
      <version>1.0.0-beta2</version>
    </dependency>

1:引入redis.proterties配置文件

host=192.168.58.128

port=6379

 

2:Spring-Context.xml

    <!--引入局部配置文件-->
    <context:property-placeholder location="classpath:/jdbc.properties"/>

    <!--配置数据源-->
        <bean id="ds" class="org.apache.commons.dbcp.BasicDataSource">
            <property name="driverClassName" value="${driverClassName}"/>
            <property name="url" value="${url}"/>
            <property name="username" value="${name}"/>
            <property name="password" value="${pwd}"/>
        </bean>

    <!--配置SessionFactory-->
    <bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="ds"/>
        <property name="typeAliasesPackage" value="com.redis.entity"/>
        <property name="mapperLocations">
            <list>
                <value>classpath:/com/redis/mapper/*Mapper.xml</value>
            </list>
        </property>
    </bean>

    <!--Mapper扫描仪  扫描注入Dao-->
    <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="sqlSessionFactoryBeanName" value="sessionFactory"/>
        <property name="basePackage" value="com.redis.dao"/>
    </bean>

    <!--配置事务-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="ds"/>
    </bean>

    <!--开启 事务注解扫描-->
    <tx:annotation-driven transaction-manager="transactionManager"/>

    <!--注解扫描 排除Controller包-->
	<context:component-scan base-package="com.redis">
		<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
	</context:component-scan>

 

3:Mapper文件【省略entity实体类、Dao接口】

 

重点【开启缓存<cache type="org.mybatis.caches.redis.RedisCache"/>

<mapper namespace="com.redis.dao.UserDao">
	<!--开启自定义缓存RedisCache-->
	<cache type="org.mybatis.caches.redis.RedisCache"/>
	<insert id="addUser" parameterType="User">
		insert into t_user values(#{id},#{name})
	</insert>
	<select id="selectUserById" resultType="User">
		select * from t_user where id=#{id}
	</select>

	<update id="updateUser" parameterType="User">
		update t_user  set name=#{name} where id=#{id}
	</update>
</mapper>

 

4:ServiceImpl【省略Service接口】

 

import com.redis.dao.UserDao;
import com.redis.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * Created by Maps on 2018/6/27.
 */
@Service
public class UserServiceImpl implements  UserService {
	
	@Autowired
	private UserDao userDao;
	
	@Transactional(readOnly = true)
	public User searchUser(Integer id) {
		return userDao.selectUserById(id);
	}
	@Transactional()
	public Integer addUser(User user) {
		return userDao.addUser(user);
	}
	
	@Transactional()
	public Integer modifyUser(User user) {
		return userDao.updateUser(user);
	}
	public UserDao getUserDao() {
		return userDao;
	}
	
	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}
}

 

5:Test

 

	@Test
	public void method(){
		ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:springContext.xml");
		UserService userService = (UserService) ctx.getBean("userServiceImpl");
		
		User user = userService.searchUser(1);
		System.out.println(user);
	}

第一次查询:redis数据库添加了一条UserDao信息

 

 

 

 

 

第二次查询: 没有看到MyBatis打印sql信息,CacheHitRatio  【说明命中缓存,即Redis作为MyBatis的二级缓存生效】

 

二:使用Redis作为会话服务器,统一管理Session

 

实战:

准备条件:Linux操作系统中配置两台TomCat服务器,以端口号区分不同的TomCat实例。

 

1:将Jar包导入TomCat的lib目录【通过winSCP】

注意目前:Jar包目前支持到TomCat6-7。

 

 

2:配置TomCat的context.xml

【向每个TomCat的context.xml文件中加入下列内容】

修改host、por、database即可。

 

<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />  
	
    <Manager className="com.radiadesign.catalina.session.RedisSessionManager" host="192.168.58.128" port="6379"  database="0" maxInactiveInterval="6000"/>  

3:验证配置

启动两台TomCat服务器 浏览器访问

 

 

查看redis是否存在JSessionId

 

Redis作为会话服务器搭建成功。

版权声明:本文为Sugar_map原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Sugar_map/article/details/80867669