zoukankan      html  css  js  c++  java
  • springmvc Cacheable (Redis)

    直接使用spring缓存请见:https://www.cnblogs.com/hanjun0612/p/11661340.html

    RedisTemplate和StringRedisTemplate配置方法基本一致

    废话不多,直接上代码。

    一,单独创建 spring-redis.xml

    看一下我的redis.properties

    # Redis settings
    redis.host=........
    redis.port=6379
    redis.password=123
    redis.timeOut=10000
    redis.pass=
    redis.maxTotal=200
    redis.maxIdle=50
    redis.minIdle=8
    redis.maxWaitMillis=10000
    redis.testOnBorrow=true
    redis.testOnReturn=true
    redis.testWhileIdle=true
    redis.timeBetweenEvictionRunsMillis=30000
    redis.numTestsPerEvictionRun=10
    redis.minEvictableIdleTimeMillis=60000
     
    redis.database=14

    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:context="http://www.springframework.org/schema/context"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xmlns:aop="http://www.springframework.org/schema/aop"
           xmlns:tx="http://www.springframework.org/schema/tx"
           xmlns:p="http://www.springframework.org/schema/p"
           xsi:schemaLocation="http://www.springframework.org/schema/beans 
                               http://www.springframework.org/schema/beans/spring-beans-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/mvc 
                               http://www.springframework.org/schema/mvc/spring-mvc-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"
                               default-lazy-init="true" >
     
        <!--redis配置  -->
        <bean name="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig" lazy-init="true">
            <property name="maxTotal" value="${redis.maxTotal}"/>
            <property name="maxIdle" value="${redis.maxIdle}"/>
            <property name="minIdle" value="${redis.minIdle}"/>
            <property name="maxWaitMillis" value="${redis.maxWaitMillis}"/>
            <property name="testOnBorrow" value="${redis.testOnBorrow}"/>
            <property name="testOnReturn" value="${redis.testOnReturn}"/>
            <property name="testWhileIdle" value="${redis.testWhileIdle}"/>
            <property name="timeBetweenEvictionRunsMillis" value="${redis.timeBetweenEvictionRunsMillis}"/>
            <property name="numTestsPerEvictionRun" value="${redis.numTestsPerEvictionRun}"/>
            <property name="minEvictableIdleTimeMillis" value="${redis.minEvictableIdleTimeMillis}"/>
        </bean>
         <!-- Jedis ConnectionFactory 数据库连接配置-->  
        <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">  
            <property name="hostName" value="${redis.host}" />  
            <property name="port" value="${redis.port}" />
            <property name="password" value="${redis.password}" />
            <property name="database" value="${redis.database}" />
            <property name="poolConfig" ref="jedisPoolConfig" />  
        </bean>
     
        <!-- 将session放入redis -->
        <bean id="redisHttpSessionConfiguration"
             class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration">
            <property name="maxInactiveIntervalInSeconds" value="7200" />
            <property name="cookieSerializer" ref="defaultCookieSerializer"/>
        </bean>
     
    <!--  StringRedisTemplate 序列化方式  -->
        <bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate"   p:connection-factory-ref="jedisConnectionFactory" >
            <property name="keySerializer" ref="keySerializer"/>
            <property name="valueSerializer" ref="jackson2JsonRedisSerializer"/>
        </bean>
        <bean id="keySerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
        <bean id="jackson2JsonRedisSerializer" class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer"/>
     
    <!--@Cacheable使用Redis缓存 :  spring自己的缓存管理器,这里定义了缓存位置名称 ,即注解中的value  -->
        <bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">
            <property name="caches">
                <set>
                    <bean class="org.springframework.data.redis.cache.RedisCache">
                        <constructor-arg name="redisOperations" ref="redisTemplate"></constructor-arg>
                        <constructor-arg name="name" value="accessCode"></constructor-arg>
                        <constructor-arg name="prefix" value="Access:"></constructor-arg>
                        <constructor-arg name="expiration" value="600"></constructor-arg>
                    </bean>
                </set>
            </property>
        </bean>
    </beans>

    主要看 redisTemplate 和 cacheManager 这两块。

    redisTemplate:我使用了StringRedisTemplate,你们也可以使用RedisTemplate,但是当中的序列化方式,需要自己配置。

    而这一块配置的原因,在于@Cacheable使用时,告诉它将对象序列化成string存储。

    cacheManager: 这里就是配置使用redis缓存了。除了accessCode作为@Cacheable(value="accessCode"),其他都没什么关系。

    PS:

    <constructor-arg name="prefix" value="Access:"></constructor-arg>

    中的  Access:  代表生成一个Access文件夹

    不带冒号“:”的话,就只是单纯的前缀

    二,配置applicationContext.xml

    <!-- 引入属性文件 -->
    <bean
            class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            <property name="locations">
                <list>
                    <value>classpath:properties/env.properties</value>
                    <value>classpath:properties/jdbc.properties</value>
                    <value>classpath:properties/redis.properties</value>
                </list>
            </property>
        </bean>
     
    <!-- 启动缓存 -->
    <cache:annotation-driven />

    没什么花头,主要是引入配置文件,以及启动缓存。

    三,使用@Cacheable

    @Cacheable(value="accessCode",key="#userId + #menuUrl")
        public PageAccessCode getPageAccessCode(Integer userId, String menuUrl,String curLang){
        return new PageAccessCode();
    }

    四,验证。

    1 可以在上面方法打断点,刷新页面后,第二次略过。则代表缓存成功了。

    2 可以直接看redis客户端。(记得选择数据库,我选的14)

    PS:

    错误:redis -> 元素 'bean' 必须不含字符 [子级]

    按照配置文件,手打一遍!

    参考文章:

    https://blog.csdn.net/u013041642/article/details/80370156

    https://blog.csdn.net/lingshaoa/article/details/76999811

    https://www.cnblogs.com/yhtboke/p/6429577.html

  • 相关阅读:
    949. Largest Time for Given Digits
    450. Delete Node in a BST
    983. Minimum Cost For Tickets
    16. 3Sum Closest java solutions
    73. Set Matrix Zeroes java solutions
    347. Top K Frequent Elements java solutions
    215. Kth Largest Element in an Array java solutions
    75. Sort Colors java solutions
    38. Count and Say java solutions
    371. Sum of Two Integers java solutions
  • 原文地址:https://www.cnblogs.com/hanjun0612/p/11672915.html
Copyright © 2011-2022 走看看