基于spring框架的redis缓存

Posted yangcnye

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于spring框架的redis缓存相关的知识,希望对你有一定的参考价值。

前言:redis使用的非常广泛,其优点是速度快、支持丰富的数据类型、支持事物操作等,适用于会话缓存(session cache)、全页缓存(FPC)、队列等,极大的减少了数据库的负担。

1.安装下载redis

   网址:https://github.com/MicrosoftArchive/redis/releases,安装成功后,开启redis服务。

2.导入jar包

   commons-pool.jar  jedis.jar spring-data-redis.jar fastjson.jar  aopalliance.jar

 注意:jedis和Commons-pool两个jar包的版本是有对应关系的,注意引用的时候要配对使用,否则将报错。

3.配置redis文件

redis.properties:

redis.hostName=127.0.0.1
redis.port=6379
redis.timeout=15000
redis.usePool=true

redis.maxTotal=32
redis.maxIdle=20
redis.minIdle=10
redis.minEvictableIdleTimeMillis=300000
redis.numTestsPerEvictionRun=3
redis.timeBetweenEvictionRunsMillis=60000

spring-redis.xml:

   <context:property-placeholder location="classpath:redis.properties" ignore-unresolvable="true"/>    
    <!-- redis 单点配置 -->
    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxTotal" value="${redis.maxTotal}"></property>
        <property name="maxIdle" value="${redis.maxIdle}"></property>
        <property name="minIdle" value="${redis.minIdle}"></property>
        <property name="minEvictableIdleTimeMillis" value="${redis.minEvictableIdleTimeMillis}"></property>
        <property name="numTestsPerEvictionRun" value="${redis.numTestsPerEvictionRun}"></property>
        <property name="timeBetweenEvictionRunsMillis" value="${redis.timeBetweenEvictionRunsMillis}"></property>
        <property name="testOnBorrow" value="true"></property>
    </bean>
       
    <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" destroy-method="destroy">
        <property name="database" value="5"></property>
        <property name="poolConfig" ref="jedisPoolConfig"></property>
        <property name="hostName" value="${redis.hostName}"></property>
        <property name="port" value="${redis.port}"></property>
        <property name="timeout" value="${redis.timeout}"></property>
        <property name="usePool" value="true"></property>
    </bean>

    <bean id="jedisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
        <property name="connectionFactory" ref="jedisConnectionFactory"></property>
    </bean>

    <bean id="redisUtil" class="com.util.RedisUtil">
        <property name="redisTemplate" ref="jedisTemplate"></property>
    </bean>

4.在spring的主配置文件中填入以下信息:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
        <property name="ignoreResourceNotFound" value="true" />
        <property name="locations">
            <list>
                <value>classpath:redis.properties</value>
            </list>
        </property>
    </bean>
<import resource="spring-redis.xml" />

5.创建工具类(RedisUtil)

package com.util;
import java.io.UnsupportedEncodingException;
import java.util.List;

import org.springframework.dao.DataAccessException;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate;

/**
 * 
 * <p>Title: Redis操作类</p>
 * <p>Description: redis操作的基本方法</p>
 * <p>Company: yangcnye</p>
 */
public class RedisUtil<T> {
    private final static String redisCode = "utf-8";
    protected RedisTemplate<String, T> redisTemplate;
    
    public RedisTemplate<String, T> getRedisTemplate() {
        return redisTemplate;
    }

    public void setRedisTemplate(RedisTemplate<String, T> redisTemplate) {
        this.redisTemplate = redisTemplate;
    }
       /**
     * 字符串添加
     * @param key
     * @param value
     * @param liveTime
     */
    public void set(String key, String value, long liveTime) {
        try {
            this.set(key.getBytes(redisCode), value.getBytes(redisCode), liveTime);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    }

}

5.测试缓存是否成功,创建个controller

package com.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import com.alibaba.fastjson.JSON;
import com.util.RedisUtil;

/***
 * redis缓存运用
 * 
 * @author yangcnye
 *
 */
@Controller
@RequestMapping("/redis")
public class RedisController {
    private static int i = 1;
    private static int j = 1;
    private static int k = 0;
    private static final int l = 0;
    @Autowired
    private RedisUtil<Object> redis;

    @RequestMapping(value = "/RedisTest", method = RequestMethod.POST)
    public String RedisTest(@RequestParam("description") String description) {
        System.out.println(description);
        redis.set("num", JSON.toJSONString(description), 6000);
        return "success";
    }
}

以上就是基于spring项目中的redis简单应用,后续补充,欢迎大家交流。

技术分享图片      技术分享图片
 
技术分享图片      技术分享图片
 
技术分享图片
技术分享图片      技术分享图片
 
技术分享图片      技术分享图片
 
技术分享图片

以上是关于基于spring框架的redis缓存的主要内容,如果未能解决你的问题,请参考以下文章

分布式缓存技术redis学习系列----深入理解Spring Redis的使用

Spring Boot 集成 Redis 配置 MyBatis 二级缓存

基于内存和 Redis 的两级 Java 缓存框架

SpringBoot集成Redis实现缓存处理(Spring AOP实现)

Spring Boot 和 Redis 容器之间的通信

Spring Boot (24) 使用Spring Cache集成Redis