SSM+Redis的小demo
来源:互联网 发布:网络飞机票怎么取登机 编辑:程序博客网 时间:2024/06/12 20:52
准备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服务器IP private 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中做测试了
测试类:
@Test public 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接口,否则会报错
下载源码
阅读全文
0 0
- SSM+Redis的小demo
- ssm(Mysql)+Redis的Demo
- ssm+redis整合的一个Demo
- SSM小Demo
- redis ssm遇到的小问题2
- maven+ssm+redis配置demo
- JAVA操作redis的小demo
- springboot整合redis缓存的小demo
- redis入门 小demo
- ssm+redis+solr小例子
- SSM整合开发的小Demo----毕业设计管理系统之管理员模块
- SSM整合开发的小Demo----毕业设计管理系统之学生模块
- SSM整合开发的小Demo----毕业设计管理系统之教师模块
- ssm+redis的工具类
- SSM 小demo(很详细,适合新手)
- ssm + redis
- ajax小的DEMO
- listView的小demo
- 【Java】clone
- 深入理解const
- 解决方案:webview部分内容不显示的问题,或者无法跳转
- 写一个方法,实现字符串的反转,如:输入abc,输出cba
- AutoLayout的各种使用方法
- SSM+Redis的小demo
- JSP的<c:choose><c:forEach><c:if><c:when><c:set>标签
- MyBatis_ider_九大智能标签样式完美版
- Python 3从入门到精通11- 获取键盘输入函数
- nginx初探——安装、启动、关闭
- “几维安全”获宽带资本千万级Pre-A轮融资,在移动安全上另辟蹊径
- 设计模式之单例模式
- Java学习笔记Day01
- idea