`

使用spring4的cache操作redis

 
阅读更多
1.下载:
<dependency>
      <groupId>redis.clients</groupId>
      <artifactId>jedis</artifactId>
      <version>2.9.0</version>
    </dependency>


    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-redis</artifactId>
        <version>1.8.0.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-keyvalue</artifactId>
        <version>1.2.0.RELEASE</version>
        <scope>test</scop>
spring4.3.6 的jar包

2.配置文件:

<beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:aop="http://www.springframework.org/schema/aop"
           xmlns:tx="http://www.springframework.org/schema/tx"
           xmlns:cache="http://www.springframework.org/schema/cache"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
       http://www.springframework.org/schema/cache
        http://www.springframework.org/schema/cache/spring-cache.xsd
">


   <cache:annotation-driven />
    <context:property-placeholder location="classpath:config/redis.properties" />

    <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxIdle" value="50" />
        <property name="maxTotal" value="50" />
        <property name="maxWaitMillis" value="50" />
        <!--<property name="testOnBorrow" value="${redis.testOnBorrow}" />-->
    </bean>


<!-- redis 集群配 -->
<!--<bean id="redisClusterConfiguration" class=" org.springframework.data.redis.connection.RedisClusterConfiguration">-->
        <!--<property name="clusterNodes">-->
            <!--<set>-->
                <!--<value>192.168.6.24:3679</value>-->
                <!--<value>192.168.6.24:4679</value>-->
                <!--<value>192.168.6.24:5679</value>-->
            <!--</set>-->
        <!--</property>-->
    <!--</bean>-->





    <bean id="connectionFactory"
          class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
        <property name="poolConfig" ref="poolConfig" />
        <property name="port" value="6379" />
        <property name="hostName" value="192.168.6.24" />
        <!--<property name="password" value="${redis.pass}" />-->
        <!--<property name="database" value="1" /> 数据库索引-->
        <property name="timeout" value="6000" />
        <!--<constructor-arg name="clusterConfig" ref="redisClusterConfiguration"></constructor-arg>  集群配置-->

    </bean>

    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
        <property name="connectionFactory" ref="connectionFactory" />
        <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 ref="redisTemplate" />
        <!--<property name="defaultExpiration" value="60" /> 默认缓存失效时间 60秒-->
        <property name="expires">
        <map>
            <entry key="demopo_update" value="180" /> <!--对缓存名称为demopo_update 设置时间1000秒-->
        </map>
        </property>
    </bean>

</beans>




3.service 代码:

package boce.demo.service.demo;

import boce.demo.dao.SelectDemoMapper;
import boce.demo.param.DemoVo;
import boce.demo.pojo.DemoPo;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
* Created by gjp on 2017/6/22.
*/

@Service("demoServiceImp")
public class DemoServiceImp implements  DemoService{

    @Resource
    private SelectDemoMapper selectDemoMapper;

    public int saveDemoPo(DemoPo demoPo) {
        return selectDemoMapper.saveDemoPo(demoPo);
    }
    //更新数据库时,清空缓存中的信息(防止不更新数据库)
    @CacheEvict(value ="DemoServiceImp.getDemoPoById",key = "'getDemoPoById_id'+#demoPo.did")
    public int updateDemoPo(DemoPo demoPo) {
        return selectDemoMapper.updateDemoPo(demoPo);
    }
    //查询数据,如果没有缓存到数据时缓存,已经缓存从数据库中查询
    @Cacheable(value = "DemoServiceImp.getDemoPoById",key = "'getDemoPoById_id'+#id")
    public DemoPo getDemoPoById(final Integer id){
        DemoPo demoPo = selectDemoMapper.getDemoPoById(id);
        return demoPo;
    }

    @Cacheable(value = "demopo_update",key = "'getDemoPoById_id'+#demoPo.did")
    public DemoPo updateDemoPoVal(DemoPo demoPo) {
        int res = selectDemoMapper.updateDemoPo(demoPo);
        if(res <=0){
            demoPo = null;
        }
        return demoPo;
    }
    //删除数据库时,删除缓存
    @CacheEvict(value ="DemoServiceImp.getDemoPoById",key = "'getDemoPoById_id'+#id")
    public int deleteById(Integer id) {
        return selectDemoMapper.deleteById(id);
    }

    public void testMethod() {

    }


}


4.测试类:

package gjp.test;

import boce.demo.pojo.DemoPo;
import boce.demo.service.demo.DemoService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import javax.annotation.Resource;

/**
* Created by gjp on 2017/7/5.
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:dataSpring.xml",
        "classpath:application-service.xml","classpath:redis-config.xml"})//
public class TestUtil extends AbstractJUnit4SpringContextTests {
    @Resource
    private DemoService demoServiceImp;

    @Test
    public void isUserTest() {
        int id = 61;
            DemoPo po = demoServiceImp.getDemoPoById(id);
            if (null != po) {
                System.out.println(po + "-----------第一次查询");
            }

            DemoPo po1 = demoServiceImp.getDemoPoById(id);
            if (null != po1) {
                System.out.println(po1 + "=============第二次信息");
            }

    }

    @Test
    public void delbyId(){
        int id =73;
        int i =demoServiceImp.deleteById(id);
        System.out.println(i);
    }


    @Test
    public void saveObj(){
        for(int i=0;i<3;i++) {
            DemoPo demoPo = new DemoPo();
            demoPo.setUnitcost("50"+i);
            demoPo.setAttr1("60"+i);
            demoPo.setPstatus("1");
            demoPo.setProductid("1234567"+i);
            demoPo.setListprice("30");
            int res = demoServiceImp.saveDemoPo(demoPo);
            System.out.println(res);
        }
    }


    @Test
    public void updateObj(){
        //int i=9;
        for(int i=0;i<4;i++) {
            DemoPo demoPo = new DemoPo();
            demoPo.setUnitcost("300"+i);
            demoPo.setAttr1("3000"+i);
            demoPo.setPstatus("1");
            demoPo.setProductid("365"+i);
            demoPo.setListprice("330");
            demoPo.setDid(61);
            int res = demoServiceImp.updateDemoPo(demoPo);
            System.out.println(res +"更新次数"+i);
        }
    }


    @Test
    public void updateObjVal(){
        //int i=9;
         for(int i=0;i<3;i++) {
        DemoPo demoPo = new DemoPo();
        demoPo.setUnitcost("100"+i);
        demoPo.setAttr1("100"+i);
        demoPo.setPstatus("1");
        demoPo.setProductid("199"+i);
        demoPo.setListprice("30");
        demoPo.setDid(70);
        DemoPo poVal = demoServiceImp.updateDemoPoVal(demoPo);
        System.out.println(poVal +"更新次数"+i);
         }
    }

}


查询日志:

2017-07-19 11:06:43 DEBUG 150 [org.mybatis.spring.SqlSessionUtils] SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1e45f13] was not registered for synchronization because synchronization is not active
2017-07-19 11:06:43 DEBUG 87 [org.mybatis.spring.transaction.SpringManagedTransaction] JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@a809c0] will not be managed by Spring
2017-07-19 11:06:43 DEBUG 139 [boce.demo.dao.SelectDemoMapper.getDemoPoById] ==>  Preparing: select * from demopo p where p.did=?
2017-07-19 11:06:43 DEBUG 139 [boce.demo.dao.SelectDemoMapper.getDemoPoById] ==> Parameters: 61(Integer)
2017-07-19 11:06:43 DEBUG 139 [boce.demo.dao.SelectDemoMapper.getDemoPoById] <==      Total: 1
2017-07-19 11:06:43 DEBUG 123 [com.alibaba.druid.pool.PreparedStatementPool] {conn-10001, pstmt-20000} enter cache
2017-07-19 11:06:43 DEBUG 193 [org.mybatis.spring.SqlSessionUtils] Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1e45f13]
boce.demo.pojo.DemoPo@98daa5-----------第一次查询
boce.demo.pojo.DemoPo@12d0e04=============第二次信息

从日志可以看出:第一次数据从数据库中得到,第二次数据从redis 缓存中获得。


分享到:
评论

相关推荐

    SpringCache与redis集成,优雅的缓存解决方案.docx

    使用SpringCache与Redis集成的优雅缓存解决方案,可以大大减少编写模板代码的工作量,提高应用程序的开发效率。同时,它还可以提高应用程序的性能,减少数据库压力。 SpringCache与Redis集成的优雅缓存解决方案是一...

    spring cache + redis 主从

    此外,还需要掌握如何将Spring Cache与Redis整合,以便在应用中高效使用缓存机制。 一、Redis的主从配置 1. 准备工作: - 操作系统要求:Ubuntu 16.04。 - Redis版本:选择适合的稳定版本,例如redis-4.0.9.tar....

    springcache+redis springboot maven

    在这个项目中,"springcache+redis"的整合意味着我们要利用Spring Cache的特性,将缓存存储在Redis中,以提升应用的性能。 首先,Spring Cache提供了`@Cacheable`、`@CacheEvict`和`@Caching`等注解,允许我们在...

    Springboot 2.X中Spring-cache与redis整合

    **Spring Boot 2.X 中 Spring Cache 与 Redis 整合详解** 在现代的 Web 应用开发中,缓存机制是提升系统性能的关键技术之一。Spring Cache 是 Spring 框架提供的一种统一的缓存抽象,它允许开发者通过简单的注解来...

    redis-cluster和spring集成,基于cache注解

    综上所述,"redis-cluster和spring集成,基于cache注解" 的项目是一个使用 Spring Cache 集成 Redis 集群的实例,旨在通过注解的方式简化缓存管理,提高应用性能。开发者可以通过导入提供的项目,快速了解和实践这一...

    spring boot cache 整合 redis demo (redis windows 安装包,和redis desktop管理工具)

    **Spring Boot Cache** 是Spring Boot对缓存功能的抽象,它支持多种缓存机制,包括Redis。通过简单的注解,如`@Cacheable`、`@CacheEvict`和`@CachePut`,我们可以轻松地在代码中加入缓存逻辑,提高应用程序性能。 ...

    springboot 使用spring cache缓存 和 使用fastjson配置redis系列化

    在本篇文档中,我们将探讨如何使用Spring Cache来缓存数据,并结合Fastjson配置Redis序列化,确保数据正确存储和读取。 首先,我们需要在`pom.xml`中添加必要的依赖。Spring Boot的`spring-boot-starter-cache`模块...

    扩展spring boot cache实现redis一二级分布式缓存

    接下来,启用Spring Cache并配置使用Redis作为缓存管理器。在`@EnableCaching`注解的配置类中,使用`CacheManager`的`RedisCacheManagerBuilder`来创建Redis缓存管理器。 ```java @Configuration @EnableCaching ...

    springboot_springcache_redis入门实例

    SpringBoot、SpringCache和Redis是Java开发中常用的三大技术组件,它们在构建高效、可扩展的应用程序中扮演着重要角色。让我们深入探讨一下这三个技术及其整合使用的入门实例。 SpringBoot是由Pivotal团队开发的...

    Spring3.0整合redis相关jar

    4. **使用Spring Data Redis的Repository**: 如果需要更高级的功能,如面向对象的CRUD操作,可以定义一个接口继承自`CrudRepository`,然后由Spring自动实现。例如: ```java public interface MyRedisRepository ...

    spring-data-redis

    Spring Data Redis能很好地与其他Spring框架集成,如Spring Cache可以利用Redis作为缓存后端,Spring Session可以使用Redis存储用户的会话信息,Spring Cloud Data Flow可以利用Redis作为任务调度的存储。...

    在Spring体系中使用redis.spring集成redis缓存

    这个模块提供了对Redis操作的高级抽象,使得在Spring应用中使用Redis变得简单。 **一、集成步骤** 1. **依赖添加**:首先,在项目中添加Spring-data-redis和Redis客户端库(如Jedis或Lettuce)的依赖。通常在Maven...

    SpringCache整合Redis简单练习

    SpringCache整合Redis简单练习

    SpringDataRedis的jar包.rar

    7. **Redis Cache**:Spring框架的缓存抽象可以与Redis集成,将缓存数据存储在Redis中,提升应用程序的性能。通过`@Cacheable`, `@CacheEvict`, `@CachePut`等注解,可以方便地控制缓存的存取和更新。 8. **消息...

    Spring Cache使用RedisCache案例解析

    Spring Cache使用RedisCache案例解析 Spring Cache是Spring框架中的一种缓存机制,主要用于优化应用程序的性能和响应速度。通过使用缓存,可以减少对数据库的访问次数,降低系统的负载,提高系统的整体性能。在...

    spring + ehcache + redis两级缓存

    在Spring中,可以通过`RedisTemplate`或`StringRedisTemplate`来操作Redis,并配置`@EnableCaching`中的`CacheResolver`和`CacheManager`以使用Redis作为二级缓存。 3. **实现缓存策略**: 缓存策略决定了何时从...

    SpringCache+Redis实现高可用缓存解决方案.docx

    ### SpringCache+Redis实现高可用缓存解决方案 #### 前言 在现代软件开发中,缓存技术是提升系统性能的重要手段之一。Spring Boot框架自带的`ConcurrentMapCacheManager`虽然简单易用,但对于分布式环境下的应用来...

    spring-data-redis-1.0.1

    4. **RedisTemplate与Key Bindings**:RedisTemplate是Spring Data Redis的核心,用于执行Redis操作。它允许开发者以模板化的方式操作Redis,同时还提供了Key Bindings,让操作特定类型的键值对更加方便。 5. **...

    Spring Cache整合Redis实现方法详解

    将Spring Cache与Redis结合使用,可以实现高效、可靠的缓存机制。下面将详细介绍Spring Cache整合Redis实现方法详解。 为什么需要缓存 在Web应用中,缓存机制可以提高系统性能、减少数据库查询次数、提高用户体验...

Global site tag (gtag.js) - Google Analytics