Spring Data+Redis缓存实现

原创 2016年09月21日 21:33:25

一、所需jar包

spring-data-redis-1.7.2.RELEASE.jar

commons-pool2-2.4.2.jar

commons-logging-1.2.jar

jedis-2.8.2.jar

aopalliance-1.0.jar以及spring相关包

二、spring data连接redis

(1)创建Redis连接工厂

     JedisConnectionFactory   LettuceConnectionFactory

     JredisConnectionFactory 和  SrpConnectionFactory已过时。

默认使用JedisConnectionFactory。

(2)创建Redis模版

    RedisTemplate:极大简化了Redis的数据访问,能够让我们持久化各种类型的key和value

    StringRedisTemplate:扩展了RedisTemplate,只关注String类型

(3)Redis存储序列化

Redis存储时,key和value都会使用Redis的序列化器进行序列化。RedisTemplate会使用JdkSerializationRedisSerializer。StringRedisTemplate默认会使用StringRedisSerializer

当使用RedisTemplate,我们希望将Value序列化为JSON,而key是String类型时,通过keySerializer和valueSerializer改变序列化方式。如:

<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
          <property name="connectionFactory" ref="jedisConnectionFactory" />
          <property name="keySerializer" >
              <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
          </property>
          <property name="valueSerializer" >
              <bean class="org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer"/>
          </property>
      </bean>

Spring Data Redis提供多个序列化器:

    GenericToStringSerializer:使用spring转换服务进行序列化。

    JacksonJsonRedisSerializer:使用Jackson1,将对象序列化为JSON。

    Jackson2JsonRedisSerializer:使用Jackson2,将对象序列化为JSON。

    JdkSerializationRedisSerializer:使用Java序列化

    OxmSerializer:使用Spring O/X映射的编排器和解排器实现序列化,用于XML序列化。

    StringRedisSerializer:序列化String类型的key和value

三、示例

spring配置文件:

<?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:context="http://www.springframework.org/schema/context"  
     xmlns:cache="http://www.springframework.org/schema/cache"
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-3.0.xsd
     http://www.springframework.org/schema/cache
     http://www.springframework.org/schema/cache/spring-cache.xsd">   

  	
  	<context:component-scan base-package="com.learn" />
  	
  	<!-- 开启缓存 -->
  	<cache:annotation-driven/>
  	
  	<!-- redis连接池 -->
  	<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">  
        <property name="maxIdle" value="6"></property>  
        <property name="minEvictableIdleTimeMillis" value="300000"></property>  
        <property name="numTestsPerEvictionRun" value="3"></property>  
        <property name="timeBetweenEvictionRunsMillis" value="60000"></property>
    </bean> 
  	
  	<bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
  		<property name="hostName" value="127.0.0.1" />
  		<property name="port" value="6379" />
  		<property name="poolConfig" ref="jedisPoolConfig"></property>  
        <property name="timeout" value="2000"></property>  
        <property name="usePool" value="true"></property>  
  	</bean>
  	
  	<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
  		<property name="connectionFactory" ref="jedisConnectionFactory" />
  		<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>
  	
  	<bean id="cacheManager" class="org.springframework.data.redis.cache.RedisCacheManager">
		<constructor-arg name="redisOperations" ref="redisTemplate" />
  	</bean>
  	
</beans>
java类:

package com.learn.cache;

import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

@Service("helloService")
public class HelloService {
	
	@Cacheable(value="messageCache" ,key="#name")
	public String getMessage(String name)
	{
		System.out.println("HELLO:" + name);
		return "hello:" + name +"!";
	}
}
测试类:
package com.learn.cache;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App {
	public static void main(String[] args) {
		ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:/applicationContext.xml"); 
		HelloService helloService = (HelloService)ctx.getBean("helloService");
		
		System.out.println(helloService.getMessage("josh"));
		System.out.println("调用缓存,未调用方法--------------");
		System.out.println(helloService.getMessage("josh"));
		System.out.println();
		System.out.println(helloService.getMessage("josha"));
		System.out.println("调用缓存,未调用方法--------------");
		System.out.println(helloService.getMessage("josha"));

	}
}

启动Redis后运行测试类,结果:

HELLO:josh
hello:josh!
调用缓存,未调用方法--------------
hello:josh!

HELLO:josha
hello:josha!
调用缓存,未调用方法--------------
hello:josha!




版权声明:本文为博主原创文章,未经博主允许不得转载。

Spring Cache集成redis

Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted s...
  • zhenghuasheng
  • zhenghuasheng
  • 2016年06月20日 17:22
  • 5546

Redis 缓存 + Spring 的集成示例

《整合 spring 4(包括mvc、context、orm) + mybatis 3 示例》一文简要介绍了最新版本的 Spring MVC、IOC、MyBatis ORM 三者的整合以及声明式事务处...
  • defonds
  • defonds
  • 2015年09月24日 19:53
  • 148898

Spring整合redis(较新版)

前奏Redis是一种特殊类型的数据库,称之为key-value存储。和HashMap有很大相似度。可以不夸张的说,它们就是持久化的哈希Map。 在大部分情况下,我们开发java项目通常会结合Spri...
  • IT_faquir
  • IT_faquir
  • 2017年05月11日 17:32
  • 622

Spring Data Redis ---笔记2

概述: 接着上笔记1 文档结构: 这个部分将介绍Spring Data Redis 核心功能。 Redis support 将介绍Redis 模型的特性 5、Redis support (Redis ...
  • m0_37355951
  • m0_37355951
  • 2017年07月31日 15:42
  • 173

Spring Cache+Redis实现自定义注解缓存

pom中引入 org.springframework.data spring-data-redis 1.6.1.RELEASE redis.clients jedis 2.8.0 在sp...
  • wysnxzm
  • wysnxzm
  • 2017年05月09日 15:23
  • 501

Redis 集成Spring(spring-data-redis)

Spring-data-redis是spring大家族的一部分,提供了在srping应用中通过简单的配置访问redis服务,对reids底层开发包(Jedis,  JRedis, and RJC)进行...
  • tianwei7518
  • tianwei7518
  • 2015年04月07日 22:51
  • 36125

spring-session实现分布式集群session的共享

前言   HttpSession是通过Servlet容器创建和管理的,像Tomcat/Jetty都是保存在内存中的。但是我们把应用搭建成分布式的集群,然后利用LVS或Nginx做负载均衡,那么来自同...
  • ugug654
  • ugug654
  • 2017年08月15日 18:33
  • 140

Spring Session Redis集成(一)

Spring Session Redis集成(一) spring session的介绍在这就不详细讲解了,有兴趣的朋友可以查看这篇博文: http://blog.csdn.net/admin1973/...
  • admin1973
  • admin1973
  • 2017年02月23日 13:44
  • 578

使用Spring Data +Redis实现缓存

 首先,我们给一个服务配置Cache,如下: @Service('helloService') public class HelloServiceImpl implements HelloS...
  • wzf_ccssddnn
  • wzf_ccssddnn
  • 2014年08月18日 15:20
  • 1529

使用Spring Session和Redis解决分布式Session跨域共享问题

前言对于分布式使用Nginx+Tomcat实现负载均衡,最常用的均衡算法有IP_Hash、轮训、根据权重、随机等。不管对于哪一种负载均衡算法,由于Nginx对不同的请求分发到某一个Tomcat,Tom...
  • u010870518
  • u010870518
  • 2017年02月26日 16:01
  • 22696
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spring Data+Redis缓存实现
举报原因:
原因补充:

(最多只允许输入30个字)