• 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

  • 相关阅读:
    Linux Xshell常用命令(项目部署)
    返回的数据转换成百分比分的方法
    百度分享插件
    vue请求中 post get传参方式是不同的哦
    Axios 中文使用
    关于iview ui的"Page分页"组件的使用
    Vue 实现前进刷新,后退不刷新的效果
    Vue框架Element UI教程-axios请求数据
    Spring学习总结(8)-接口多个实现类的动态调用
    Redis集群
  • 原文地址:https://www.cnblogs.com/hanjun0612/p/11672915.html
Copyright © 2020-2023  润新知