准备ssm工程
准备好redis服务器
构建pom.xml文件,这个pom文件基本和SSM的基本一样,知识增加了几个依赖。
pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>SsmRedisDemo</groupId><artifactId>SsmRedisDemo</artifactId><version>0.0.1-SNAPSHOT</version><packaging>war</packaging><name /><description /><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.apache.openejb</groupId><artifactId>javaee-api</artifactId><version>5.0-1</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.1</version><scope>provided</scope></dependency><!-- mybatis和spring相关 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.3.0</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.2.3</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>3.2.4.RELEASE</version><type>jar</type></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>3.2.4.RELEASE</version><type>jar</type></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>3.2.4.RELEASE</version><type>jar</type></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>3.2.4.RELEASE</version><type>jar</type></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>3.2.4.RELEASE</version><type>jar</type></dependency><dependency><groupId>org.codehaus.jackson</groupId><artifactId>jackson-mapper-asl</artifactId><version>1.9.13</version></dependency><!-- 数据库连接池包 --><dependency><groupId>com.mchange</groupId><artifactId>c3p0</artifactId><version>0.9.5-pre8</version></dependency><!-- log4j日志框架 --><dependency><groupId>org.apache.directory.studio</groupId><artifactId>org.apache.logging.log4j</artifactId><version>1.2.16</version></dependency><!-- sqlserver的连接驱动 --><dependency><groupId>com.microsoft.sqlserver</groupId><artifactId>sqljdbc4</artifactId><version>4.0</version></dependency><!--Redis start --><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-redis</artifactId><version>1.6.1.RELEASE</version></dependency><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.7.3</version></dependency><!--Redis end --><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.8</version></dependency></dependencies><build><plugins><plugin><artifactId>maven-war-plugin</artifactId></plugin><plugin><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.7</source><target>1.7</target></configuration></plugin></plugins></build>
</project>

编写两个工具类(RedisUtil.java和SerializeUtil.java)和一个缓存类(RedisCache.java)
RedisUtil.java

public class RedisUtil {// Redis服务器IPprivate static String ADDR = "192.168.0.19";// Redis的端口号private static int PORT = 6379;// 访问密码// private static String AUTH = "admin";// 可用连接实例的最大数目,默认值为8;// 如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。private static int MAX_ACTIVE = 1024;// 控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也是8。private static int MAX_IDLE = 200;// 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException;private static int MAX_WAIT = 10000;private static int TIMEOUT = 10000;// 在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;private static boolean TEST_ON_BORROW = true;private static JedisPool jedisPool = null;/*** 初始化Redis连接池*/static {try {JedisPoolConfig config = new JedisPoolConfig();config.setMaxIdle(MAX_ACTIVE);config.setMaxTotal(MAX_ACTIVE);config.setMaxIdle(MAX_IDLE);config.setMaxWaitMillis(MAX_WAIT);config.setTestOnBorrow(TEST_ON_BORROW);jedisPool = new JedisPool(config, ADDR, PORT, TIMEOUT);} catch (Exception e) {e.printStackTrace();}}/*** 获取Jedis实例* * @return*/public synchronized static Jedis getJedis() {try {if (jedisPool != null) {Jedis resource = jedisPool.getResource();return resource;} else {return null;}} catch (Exception e) {e.printStackTrace();return null;}}/*** 释放jedis资源* * @param jedis*/public static void returnResource(final Jedis jedis) {if (jedis != null) {jedisPool.returnResource(jedis);}}}

SerializeUtil.java

public class SerializeUtil {public static byte[] serialize(Object object) {ObjectOutputStream oos = null;ByteArrayOutputStream baos = null;try {// 序列化baos = new ByteArrayOutputStream();oos = new ObjectOutputStream(baos);oos.writeObject(object);byte[] bytes = baos.toByteArray();return bytes;} catch (Exception e) {e.printStackTrace();}return null;}public static Object unserialize(byte[] bytes) {if (bytes == null)return null;ByteArrayInputStream bais = null;try {// 反序列化bais = new ByteArrayInputStream(bytes);ObjectInputStream ois = new ObjectInputStream(bais);return ois.readObject();} catch (Exception e) {e.printStackTrace();}return null;}
}

RedisCache.java

/** 使用第三方缓存服务器,处理二级缓存*/
public class RedisCache implements Cache {private static Logger logger = LoggerFactory.getLogger(RedisCache.class);/** The ReadWriteLock. */private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock();private String id;private final String COMMON_CACHE_KEY = "COM:";/*** 按照一定规则标识key*/private String getKey(Object key) {StringBuilder accum = new StringBuilder();accum.append(COMMON_CACHE_KEY);accum.append(this.id).append(":");accum.append(DigestUtils.md5Hex(String.valueOf(key)));return accum.toString();}/*** redis key规则前缀*/private String getKeys() {return COMMON_CACHE_KEY + this.id + ":*";}public RedisCache() {}public RedisCache(final String id) {if (id == null) {throw new IllegalArgumentException("必须传入ID");}logger.debug(">>>>>>>>>>>>>>>>>>>>>MybatisRedisCache:id=" + id);this.id = id;}public String getId() {return this.id;}public int getSize() {return Integer.valueOf(RedisUtil.getJedis().dbSize().toString());}public void putObject(Object key, Object value) {logger.debug(">>>>>>>>>>>>>>>>>>>>>>>>putObject:"+key+"="+value);RedisUtil.getJedis().set(SerializeUtil.serialize(key.toString()), SerializeUtil.serialize(value));}public Object getObject(Object key) {Object value = SerializeUtil.unserialize(RedisUtil.getJedis().get(SerializeUtil.serialize(key.toString())));logger.debug(">>>>>>>>>>>>>>>>>>>>>>>>getObject:"+key+"="+value);return value;}public Object removeObject(Object key) {return RedisUtil.getJedis().expire(SerializeUtil.serialize(key.toString()),0);}public void clear() {RedisUtil.getJedis().flushDB();}public ReadWriteLock getReadWriteLock() {return readWriteLock;}
}

实体映射文件配置:
<cache type="com.immense.tw.util.RedisCache"></cache>
这个很关键

在spring-base.xml中配置redis

<!-- redis 配置 --><bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig"></bean><bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" p:host-name="${redis.host}" p:port="${redis.port}" p:pool-config-ref="poolConfig"/> <bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">  <property name="connectionFactory"   ref="connectionFactory" />  </bean>

开启mybatis对缓存的支持

<!-- 加载mybatis配置文件 --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="configLocation" value="classpath:mybatis.xml"></property><property name="dataSource" ref="comboPooledDataSourceID"></property><!-- 开启缓存支持 --><property name="configurationProperties"><props><prop key="cacheEnabled">true</prop><!-- 查询时,关闭关联对象即时加载以提高性能 --><prop key="lazyLoadingEnabled">false</prop><!-- 设置关联对象加载的形态,此处为按需加载字段(加载字段由SQL指定),不会加载关联表的所有字段,以提高性能 --><prop key="aggressiveLazyLoading">true</prop><!-- 对于未知的SQL查询,允许返回不同的结果集以达到通用的效果 --><prop key="multipleResultSetsEnabled">true</prop><!-- 允许使用列标签代替列名 --><prop key="useColumnLabel">true</prop><!-- 允许使用自定义的主键值(比如由程序生成的UUID 32位编码作为键值),数据表的PK生成策略将被覆盖 --><prop key="useGeneratedKeys">true</prop><!-- 给予被嵌套的resultMap以字段-属性的映射支持 --><prop key="autoMappingBehavior">FULL</prop><!-- 对于批量更新操作缓存SQL以提高性能 --><prop key="defaultExecutorType">BATCH</prop><!-- 数据库超过25000秒仍未响应则超时 --><prop key="defaultStatementTimeout">25000</prop></props></property></bean>

其中

<prop key="cacheEnabled">true</prop>

最关键

然后就可以在自己写的测试类或者controller中做测试了
测试类:

@Testpublic void getAll(){ApplicationContext ac=new ClassPathXmlApplicationContext("spring.xml");StudentService studentService =  (StudentService) ac.getBean("studentService");List<Student> students = studentService.getAll();for (Student student : students) {System.out.println(student);}}

需要注意的是在实体编写的时候需要实现Serializeable接口,否则会报错
下载源码

SSM+Redis的小demo相关推荐

  1. SSM练手小demo——BookShop图书网络销售系统

    下载地址 https://github.com/superdoog/bookshop 项目预览 http://49.235.62.115:8080/BookShop 前台 http://49.235. ...

  2. SSM 小demo(很详细,适合新手)

    自己做了一个基于SSM框架的小项目,跟大家分享一下.. 首先,你需要开发工具netbeans或者eclipse一枚,我习惯用netbeans,这个随意,mysql数据库, 此为前提条件,因为是小项目, ...

  3. ssm radis mysql_从零开始搭建框架SSM+Redis+Mysql(一)之摘要

    从零开始搭建框架SSM+Redis+Mysql(一)之摘要 本文章为本人实际的操作后的回忆笔记,如果有步骤错漏,希望来信307793969@qq.com或者评论指出. 本文章只体现过程,仅体现操作流程 ...

  4. 金融新手投标模块布局小Demo

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...

  5. android jsoup简书,jsoup爬虫简书首页数据做个小Demo

    昨天LZ去面试,遇到一个大牛,被血虐一番,发现自己基础还是很薄弱,对java一些原理掌握的还是不够稳固,比如java反射注解,知道一点就是说不出来,很尴尬... 生命不止,学习不止啊 之前那个项目 Q ...

  6. 运用vue.js写的表格小demo

    2019独角兽企业重金招聘Python工程师标准>>> 最近在学习vue.js,我把工作中项目里面的一个小实例用vue.js重构了下,写成一个小demo,巩固自己所学,并与大家分享, ...

  7. 入门Leaflet之小Demo

    入门 Leaflet 之小 Demo 写在前面 ---- WebGIS 开发基础之 Leaflet GIS 基本概念:GIS.Map.Layer.Feature.Geometry.Symbol.Dat ...

  8. 云服务器apache mysql php_服务器配置教程:阿里云服务器安装PHP环境(附PHP+MySQL+Apache后台小Demo)...

    前言 搭建Apache HTTP Server往往都会安装PHP环境,因为很多人都使用PHP做web.其实相对我而言,我是用PHP做后台.主要是因为我是移动端方向:做iOS和Android.往往需要通 ...

  9. Nancy之基于Self Hosting的补充小Demo

    原文:Nancy之基于Self Hosting的补充小Demo 前面把Hosting Nancy with ASP.NET.Self Hosting Nancy和Hosting Nancy with ...

最新文章

  1. webstorm激活+汉化教程
  2. [机器学习笔记]Note5--归一化
  3. mysql master host_mysql异步备份的有关问题,MASTER_HOST可否指定多个
  4. 训练日志 2019.9.15
  5. 详解协方差与协方差矩阵计算
  6. Python之路(二)Python基础
  7. devops java使用_谁会在使用DevOps时最大程度地退缩?
  8. python的一些解释
  9. spi收发时的寄存器sr不变_「正点原子Linux连载」第二十七章SPI实验(一)
  10. flash 定义主舞台窗口大小
  11. java 打印 型比卡丘_Java_总结三(选择与循环)
  12. 【转】 sqlserver 异地备份
  13. java自动机字符串匹配_字符串匹配之有限自动机
  14. C语言中的 pow 函数 使用方法及注意事项,和常见报错原因,且分享实战中的使用
  15. Excel使用技巧大全
  16. 交换机路由器常用命令大全
  17. 锁屏状态可以远程连接服务器,锁屏状态下如何远程控制安卓手机? 向日葵远程控制完美诠释...
  18. python opengl书籍_初试PyOpenGL一 (Python+OpenGL)
  19. 禁止 input 自动填充
  20. linux下查看系统内存使用情况的几个命令

热门文章

  1. c/c艹常用类型数据范围
  2. 我的项目1-DS7400报警主机调试工具V1.0
  3. spring boot 整合MQTT高并发处理方案
  4. 力扣 695. 岛屿的最大面积
  5. 安庆师范学院计算机专业分数线,安庆师范大学
  6. 二本师大计算机排名,全国师范类大学排名 二本师范大学有哪些
  7. python海龟图画龙珠_Python批量复制修改文件名[七龙珠版]
  8. FWT(Fast Walsh Transformation)快速沃尔什变换学习笔记
  9. 北京奥特易雨量灯光传感器
  10. 电销外呼系统如何用电脑打电话,提速增业绩?