最近在研究redis也结合了许多网上的资料分享给大家,有些不足的还望大家多补充提点,下面直接进入主题。

结构图:

几个redis的核心jar,spring的一些jar自行导入

接下来开始配置项目:

1、配置文件

redis.properties

redis.host = 192.168.76.76
redis.port = 6379
redis.pass = admin
redis.maxIdle = 200
redis.maxActive = 1024
redis.maxWait = 10000
redis.testOnBorrow = true

spring-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:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:cache="http://www.springframework.org/schema/cache"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xmlns:jaxrs="http://cxf.apache.org/jaxrs"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee-3.1.xsd
http://www.springframework.org/schema/jdbc
http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd
http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-3.2.xsd
http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd
http://cxf.apache.org/jaxrs
http://cxf.apache.org/schemas/jaxrs.xsd" default-autowire="byName" > <!-- 引入配置文件 -->
<context:property-placeholder location="classpath:/resource/redis.properties"/> <!-- 连接池基本参数配置,类似数据库连接池 -->
<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxIdle" value="${redis.maxIdle}" />
<property name="testOnBorrow" value="${redis.testOnBorrow}"/>
</bean> <!-- 连接池配置,类似数据库连接池 -->
<bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" >
<property name="hostName" value="${redis.host}"></property>
<property name="port" value="${redis.port}"></property>
<property name="password" value="${redis.pass}"></property>
<property name="poolConfig" ref="poolConfig"></property>
</bean> <!-- 调用连接池工厂配置 -->
<bean id="redisTemplate" class=" org.springframework.data.redis.core.RedisTemplate">
<property name="connectionFactory" ref="connectionFactory"></property>
<!-- 自定义json序列化存储 -->
<!-- <property name="defaultSerializer">
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
</property> --> <!-- 如果不配置Serializer,那么存储的时候智能使用String,如果用User类型存储,那么会提示错误User can't cast
to String!!! -->
<property name="keySerializer">
<bean
class="org.springframework.data.redis.serializer.StringRedisSerializer" />
</property>
<property name="valueSerializer">
<bean
class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />
</property>
</bean>
</beans>

spring-source.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:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:cache="http://www.springframework.org/schema/cache"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xmlns:jaxrs="http://cxf.apache.org/jaxrs"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee-3.1.xsd
http://www.springframework.org/schema/jdbc
http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd
http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-3.2.xsd
http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd
http://cxf.apache.org/jaxrs
http://cxf.apache.org/schemas/jaxrs.xsd" default-autowire="byName" > <context:annotation-config />
<!-- 扫描注解web整合时用 -->
<context:component-scan base-package="com.tp.soft.*" /> <bean id="jsonSerializer" class="com.tp.soft.base.redis.JsonRedisSeriaziler"/>
<bean id="userDao" class="com.tp.soft.dao.impl.UserDaoImpl" />
</beans>

2、配置公用Dao

AbstractBaseRedisDao.java

package com.tp.soft.base.dao;

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; import com.tp.soft.base.redis.JsonRedisSeriaziler; /**
* @author taop
*
* @param <K>
* @param <V>
*/ public abstract class AbstractBaseRedisDao<K extends Serializable, V extends Serializable> { @Autowired
protected RedisTemplate<K, V> redisTemplate; //json转换时用 若用系统自带序列对象可不写
@Autowired
private JsonRedisSeriaziler jsonSerializer; /**
* 注入
* 设置redisTemplate
* @param redisTemplate
*/
public void setRedisTemplate(RedisTemplate<K, V> redisTemplate){
this.redisTemplate = redisTemplate;
} //json转换时用 若用系统自带序列对象可不写
public void setJsonRedisSeriaziler(JsonRedisSeriaziler jsonSerializer) {
this.jsonSerializer = jsonSerializer;
} //json转换时用 若用系统自带序列对象可不写
protected String getRedisSerializer(Object obj){
return jsonSerializer.seriazileAsString(obj);
} //json转换时用 若用系统自带序列对象可不写
protected <T> T deserRedisSerializer(String str, Class<T> clazz){
return jsonSerializer.deserializeAsObject(str, clazz);
} /**
* 方法一
* 获取 RedisSerializer
* <br>------------------------------<br>
*/
protected RedisSerializer<String> getRedisSerializer() {
return redisTemplate.getStringSerializer();
}
}

3、若调用jackson 序列化对象 则新建, 若默认序列化对象可不创建

JsonRedisSeriaziler.java

package com.tp.soft.base.redis;

import java.nio.charset.Charset;

import org.apache.commons.lang.SerializationException;
import org.codehaus.jackson.map.ObjectMapper; public class JsonRedisSeriaziler {
public static final String EMPTY_JSON = "{}"; public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8"); protected ObjectMapper objectMapper = new ObjectMapper();
public JsonRedisSeriaziler(){} /**
* java-object as json-string
* @param object
* @return
*/
public String seriazileAsString(Object object){
if (object== null) {
return EMPTY_JSON;
}
try {
return this.objectMapper.writeValueAsString(object);
} catch (Exception ex) {
throw new SerializationException("Could not write JSON: " + ex.getMessage(), ex);
}
} /**
* json-string to java-object
* @param str
* @return
*/
public <T> T deserializeAsObject(String str,Class<T> clazz){
if(str == null || clazz == null){
return null;
}
try{
return this.objectMapper.readValue(str, clazz);
}catch (Exception ex) {
throw new SerializationException("Could not write JSON: " + ex.getMessage(), ex);
}
}
}

4、实体类

AuUser.java

package com.tp.soft.entity;

import java.io.Serializable;

public class AuUser implements Serializable{

    /**
*
*/
private static final long serialVersionUID = -1695973853274402680L; private String id; private String username; private String password; public AuUser() { } public AuUser(String id, String username, String password) {
super();
this.id = id;
this.username = username;
this.password = password;
} public String getId() {
return id;
} public void setId(String id) {
this.id = id;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} }

5、接口

UserDao.java

package com.tp.soft.dao;

import java.util.List;

import com.tp.soft.entity.AuUser;

public interface UserDao {
boolean add(AuUser auUser) ;
boolean add(List<AuUser> list);
void delete(String key);
void delete(List<String> keys);
boolean update(AuUser auUser);
AuUser get(String keyId);
}

6、接口实现类

UserDaoImpl.java

package com.tp.soft.dao.impl;

import java.io.Serializable;
import java.util.List; import org.springframework.dao.DataAccessException;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.BoundValueOperations;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.data.redis.serializer.RedisSerializer; import com.tp.soft.base.dao.AbstractBaseRedisDao;
import com.tp.soft.dao.UserDao;
import com.tp.soft.entity.AuUser; public class UserDaoImpl extends AbstractBaseRedisDao<String, AuUser> implements UserDao{ @Override
public boolean add(final AuUser auUser) {
// this.redisTemplate.opsForValue().set("pwd", "123456");
// ValueOperations<String, String> operations = redisTemplate
// .opsForValue();
// String redisSerializer = getRedisSerializer(auUser);
// operations.set("user:"+auUser.getId(), redisSerializer);
// return true; //方法一
// redisTemplate.execute(new RedisCallback<Object>() {
// public Object doInRedis(RedisConnection connection)
// throws DataAccessException {
// RedisSerializer<String> serializer = getRedisSerializer();
// byte[] key = serializer.serialize(auUser.getId());
// byte[] name = serializer.serialize(auUser.getUsername());
// connection.set(key, name);
// return null;
// }
// }); //方法二
ValueOperations<String, AuUser> valueOps = redisTemplate.opsForValue();
valueOps.set(auUser.getId(), auUser); return true;
} @Override
public AuUser get(final String keyId) {
//System.out.println(this.redisTemplate.opsForValue().get("pwd"));
// ValueOperations<String, String> operations = redisTemplate
// .opsForValue();
// String json = operations.get("user:"+keyId);
// return deserRedisSerializer(json, AuUser.class);
//return null; //方法一
/*AuUser result = redisTemplate.execute(new RedisCallback<AuUser>() {
public AuUser doInRedis(RedisConnection connection)
throws DataAccessException {
RedisSerializer<String> serializer = getRedisSerializer();
byte[] key = serializer.serialize(keyId);
byte[] value = connection.get(key);
if (value == null) {
return null;
}
String nickname = serializer.deserialize(value);
return new AuUser(keyId, nickname, "1234");
}
});
return result; */ //方式2:不在redistemplate中配置Serializer,而是在Service的实现类中单独指定Serializer。
BoundValueOperations<String, AuUser> boundValueOps = redisTemplate.boundValueOps(keyId);
AuUser user = (AuUser) boundValueOps.get();
return user;
} @Override
public boolean add(List<AuUser> list) {
// TODO Auto-generated method stub
return false;
} @Override
public void delete(String key) {
// TODO Auto-generated method stub } @Override
public void delete(List<String> keys) {
// TODO Auto-generated method stub } @Override
public boolean update(AuUser auUser) {
// TODO Auto-generated method stub
return false;
}
}

6、junit测试类

RedisZhTest.java

package junit;

import junit.framework.Assert;

import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests; import com.tp.soft.dao.UserDao;
import com.tp.soft.entity.AuUser; @ContextConfiguration(locations = {"classpath:/resource/spring-*.xml"})
public class RedisZhTest extends AbstractJUnit4SpringContextTests{
@Autowired
private UserDao userDao; @Test
public void testAddUser(){
AuUser user = new AuUser();
user.setId("1");
user.setUsername("taop");
user.setPassword("12345");
boolean result = userDao.add(user);
//Assert.assertTrue(result);
AuUser auUser = userDao.get("1");
System.out.println(auUser.getUsername());
System.out.println(auUser.getPassword());
}
}

结果打印:

redis+spring 整合的更多相关文章

  1. spring和redis的整合

    spring和redis的整合-超越昨天的自己系列(7) 超越昨天的自己系列(7) 扯淡:  最近一直在慢慢多学习各个组件,自己搭建出一些想法.是一个涉猎的过程,慢慢意识到知识是可以融汇贯通,举一反三 ...

  2. Redis和Spring整合

    Redis和Spring整合 Redis在这篇里就不做介绍了~以后系统的学学,然后整理写出来. 首先是环境的搭建 通过自己引包的方式,将redis和spring-redis的包引到自己的项目中,我项目 ...

  3. redis集群配置,spring整合jedis,缓存同步

    前台的商品数据(图片等加载缓慢)查询,先从redis缓存查询数据. redis是一个nosql数据库,内存版数据库,读取速度11w/s.本身具有内存淘汰机制,是单线程服务器(分时操作系统),线程安全. ...

  4. 【Spring】17、spring cache 与redis缓存整合

    spring cache,基本能够满足一般应用对缓存的需求,但现实总是很复杂,当你的用户量上去或者性能跟不上,总需要进行扩展,这个时候你或许对其提供的内存缓存不满意了,因为其不支持高可用性,也不具备持 ...

  5. 网站性能优化小结和spring整合redis

    现在越来越多的地方需要非关系型数据库了,最近网站优化,当然从页面到服务器做了相应的优化后,通过在线网站测试工具与之前没优化对比,发现有显著提升. 服务器优化目前主要优化tomcat,在tomcat目录 ...

  6. Spring整合Redis&JSON序列化&Spring/Web项目部署相关

    几种JSON框架用法和效率对比: https://blog.csdn.net/sisyphus_z/article/details/53333925 https://blog.csdn.net/wei ...

  7. spring整合redis之hello

    1.pom.xml文件 <dependencies> <!-- spring核心包 --> <dependency> <groupId>org.spri ...

  8. Spring整合Redis时报错:java.util.NoSuchElementException: Unable to validate object

    我在Spring整合Redis时报错,我是犯了一个很低级的错误! 我设置了Redis的访问密码,在Spring的配置文件却没有配置密码这一项,配置上密码后,终于不报错了!

  9. Spring Boot + MyBatis + Druid + Redis + Thymeleaf 整合小结

    Spring Boot + MyBatis + Druid + Redis + Thymeleaf 整合小结 这两天闲着没事想利用**Spring Boot**加上阿里的开源数据连接池**Druid* ...

随机推荐

  1. C# 封装winio.dll 驱动级按键鼠标操作模拟

    using System;using System.Collections.Generic;using System.Text;using System.Runtime.InteropServices ...

  2. PHP 标准规范,PSR-1,PSR-2,PSR-3,PSR-4,PSR-5,PSR-6,PSR-7及其他标准

    官方网站:https://psr.phphub.org/ 这里还有其他很多规范,但是很多都是英文. github:https://github.com/summerblue/psr.phphub.or ...

  3. Java发送邮件功能

    package com.hd.all.test.testjava; import java.util.Properties; import javax.mail.Address; import jav ...

  4. 2019.04.13 python基础

    第一节    主要讲python背景  没什么要注意的  了解记住概念就好 python官网  python.org  自带shell  可以运行python代码 在IDLE中怎么运行代码 新建文本  ...

  5. Python基础(五) python装饰器使用

    这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 # -*- coding:gbk -*- '''示例1: 最简单的函数,表示调用了两次 ...

  6. Archlinux软件包管理pacman基本使用说明

    熟悉APT和YUM包管理的应该都知道,这两个包管理的使用命令都是采用"主命令+参数"的格式,比如"sudo apt-get install --reinstall pac ...

  7. centos7安装zabbix3.0超详细步骤解析

    centos7安装zabbix3.0超详细步骤解析 很详细,感谢作者 以下是我操作的history 622 java -version 623 javac -version 624 grep SELI ...

  8. [antd-design-pro] mock 数据(post,request不一致)Sorry, we need js to run correctly!

    Sorry, we need js to run correctly! 可能问题: mock数据 api  和  request  api 不一致 'POST /api/banners/left'   ...

  9. ANNOTATION 注解

    注解(Annotation)很重要,未来的开发模式都是基于注解的,JPA是基于注解的,Spring2.5以上都是基于注解的,Hibernate3.x以后也是基于注解的,现在的Struts2有一部分也是 ...

  10. 洛谷P2820 局域网 (最小生成树)

    题目链接:https://www.luogu.org/problemnew/show/P2820 题目背景 某个局域网内有n(n<=100)台计算机,由于搭建局域网时工作人员的疏忽,现在局域网内 ...