springmvc整合redis
来源:互联网 发布:mmd动作数据下载极乐 编辑:程序博客网 时间:2024/06/07 16:09
参考的博客:http://www.cnblogs.com/fengzheng/p/5941953.html
看之前,建议先花点时间去看下jedis的使用。
项目目录如下:
依赖的架包(pom.xml配置):
<!-- spring redis --><dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.8.7.RELEASE</version> </dependency><!-- jedis --><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.9.0</version></dependency>
redis.properties资源文件如下:
#地址,端口号,密码redis.host=redis.port=redis.pass=#最大空闲数redis.maxIdle=300#最大连接数redis.maxTotal=600#最大建立连接等待时间redis.maxWaitMillis=1000#指明是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个redis.testOnBorrow=true
由于我的*.properties文件已经在applicationContext-dao.xml中加载过了,所以这里就不需要重新加载了。
applicationContext-dao.xml中的资源文件加载
<!-- 加载资源文件 --><context:property-placeholder ignore-resource-not-found="true" location="classpath:conf/*.properties"/>
spring的redis配置(我的文件名称:applicationContext-redis.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: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.2.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.2.xsd"><!-- redis.properties已在applicationContext-dao.xml加载 --><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.StringRedisTemplate"><property name="connectionFactory" ref="connectionFactory" /></bean> </beans>
web.xml配置,项目运行时,加载配置文件
<!-- 容器创建项目运行环境时的配置文件路径 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring/applicationContext-*.xml</param-value></context-param>实体类:
import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import org.apache.commons.lang3.StringUtils;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.core.RedisTemplate;import org.springframework.stereotype.Service;import com.service.redis.RedisService;@Servicepublic class RedisService {@Autowiredprivate RedisTemplate<String, String> redisTemplate;/** * 添加 */public void put(String key, Object value) {put(key, value, null);}/** * 添加 */public void put(String key, Object value, Long expiredTime) {if(StringUtils.isBlank(key)) {return;}if (null == value) {return;}redisTemplate.execute(new RedisCallback<Long>() {@Overridepublic Long doInRedis(RedisConnection conn) throws DataAccessException {byte[] keyb = key.getBytes();byte[] valueb = toByteArray(value);conn.set(keyb, valueb);if (null != expiredTime) {conn.expire(keyb, expiredTime);// 以下方法我没有亲测,所以使用时请先测试下哈。我只是根据jedis里推断出来的,应该是对jedis里的方法的进行了封装。//conn.expire(key, seconds) // 多少秒后过期//conn.expireAt(key, unixTime) // 在什么时候过期,即:System.currentTimeMillis()/1000 + 多少s//conn.pExpire(key, millis) // 多少毫秒后过期//conn.pExpireAt(key, unixTimeInMillis) // 在什么时候过期,即:System.currentTimeMillis() + 多少ms}return 1l;}});}/** * 获取 */public Object get(String key) {Object value;value = redisTemplate.execute(new RedisCallback<Object>() {@Overridepublic Object doInRedis(RedisConnection conn) throws DataAccessException {byte[] keyb = key.getBytes();byte[] valueb = conn.get(keyb);return toObject(valueb);}});return value;}/** * 将byte[] 转成 Object * * @param bytes * @return */private Object toObject(byte[] bytes) {Object obj = null;ByteArrayInputStream bais = null;ObjectInputStream ois = null;try {bais = new ByteArrayInputStream(bytes);ois = new ObjectInputStream(bais);obj = ois.readObject();} catch(IOException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();} finally {try {ois.close();bais.close();} catch (IOException e) {e.printStackTrace();}}return obj;}/** * object 转成 byte[] * @param obj * @return */private byte[] toByteArray(Object obj) {byte[] bytes = null;ByteArrayOutputStream baos = null;ObjectOutputStream oos = null;try {baos = new ByteArrayOutputStream();oos = new ObjectOutputStream(baos);oos.writeObject(obj);oos.flush();bytes = baos.toByteArray();} catch (IOException e) {e.printStackTrace();} finally {try {oos.close();baos.close();} catch (IOException e) {e.printStackTrace();}}return bytes;}}
需要注意的是,RedisService中的put(),get()是配套的。因为保存value时通过输出流将value值序列化了,所以需要通过输入流进行反序列化才能取出。
比如保存value值未通过输出流直接将值存入,然后用get()直接取是会报java.io.StreamCorruptedException错误。
阅读全文
0 0
- springmvc整合redis
- SpringMVC 整合Redis
- springmvc整合redis
- SpringMVC+Redis整合
- SpringMVC+redis整合
- springmvc整合redis
- SpringMVC+redis整合
- SpringMvc整合redis
- SpringMVC整合Redis实例
- Springmvc + Redis 整合
- springmvc整合redis
- SpringMVC+redis整合
- SpringMvc 4.3 整合redis
- springmvc整合redis架构搭建
- springMVC整合jedis+redis注解
- 5. SpringMVC+redis整合-上篇
- 5. SpringMVC+redis整合-下篇
- springMVC整合jedis+redis注解
- JavaScript原型链__proto__与prototype的理解
- isset(), !empty(), !is_null(),以自身为参数的区别
- Java 计数排序
- 位运算符
- dcm4che3在Windows与Linux环境下压缩dicom文件
- springmvc整合redis
- 二叉树
- 欢迎使用CSDN-markdown编辑器
- c++设计模式七,模板方法模式
- 阿里云何万青:搭建首个全球云上超算中心,做超算能力的普惠者
- 解决多次点击出现蓝色背景
- 关于ViewPager高度自适应(随着页面高度改变Viewpager的高度)
- 微服务架构的分布式事务解决方案
- css控制页面文字不能被选中user-select:none;