本文基于上一篇博客springboot的缓存技术,将缓存技术修改为使用redis数据库作为缓存技术。

本文结构:
- redis 介绍
- redis基于docker安装
- 添加pom 依赖
- 添加 redisconfig 配置
- 添加bean的序列化


redis 介绍

Redis 是一个开源的 使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志 型、Key-Value 数据库。

Redis 的 key 是字符串类型,但是 key 中不能包括边界字符 ,由于 key 不是 binary safe 的字符串,所以像”my key”和”mykey\n”这样包含空格和换行的 key 是不允许的。

Redis的vaule redis提供五种数据类型:string,hash,list,set及sorted set。

redis基于docker安装

docker 安装redis,安装命令如下

docker pull  redis:3.2

启动命令

启动前需要建立映射目录“redis/data“
docker run -p 6379:6379 -v $PWD/redis/data:/data  -d redis:3.2 redis-server --appendonly yes

基于linux 的安装

参考:http://www.runoob.com/redis/redis-install.html
安装要注意,Linux是否为纯净版,纯净版需要安装GCC ,gcc 下载网址:http://download.csdn.net/download/u012373815/9817204

如果安装中遇到错误:
错误“centOS6.3 安装redis make报错 zmalloc.h:50:31: 错误:jemalloc/jemalloc.h:没有那个文件或目录”

解决方案:
make MALLOC=libc 代替 make


代码修改

本例的代码是基于上一篇博客springboot的缓存技术的例子对代码进行新增。

添加pom 依赖

在pom.xml文件中新增redis的依赖

  <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-redis</artifactId>
        </dependency>

添加 redisconfig 配置

新建RedisConfig.java 配置文件,内容如下:

package com.us.example.config;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.Cache;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.interceptor.CacheErrorHandler;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
/**
 * Created by yangyibo on 17/1/16.
 */
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport{
    private static final Logger logger = LoggerFactory.getLogger(RedisConfig.class);

    @Autowired
    private Environment env;

    @Bean
    public JedisConnectionFactory redisConnectionFactory() {
        JedisConnectionFactory redisConnectionFactory = new JedisConnectionFactory();
        redisConnectionFactory.setHostName(env.getProperty("redis.hostname"));
        redisConnectionFactory.setPort(Integer.parseInt(env.getProperty("redis.port")));
        return redisConnectionFactory;
    }

    @Bean
    public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory cf) {
        RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(cf);
        return redisTemplate;
    }

    @Bean
    public CacheManager cacheManager(RedisTemplate<?, ?> redisTemplate) {
        RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
        cacheManager.setDefaultExpiration(600);
        return cacheManager;
    }

    public CacheErrorHandler errorHandler() {
        return new CacheErrorHandler(){

            @Override
            public void handleCacheGetError(RuntimeException exception, Cache cache, Object key) {
                logger.warn("handleCacheGetError in redis: {}", exception.getMessage());
            }

            @Override
            public void handleCachePutError(RuntimeException exception, Cache cache, Object key, Object value) {
                logger.warn("handleCachePutError in redis: {}", exception.getMessage());
            }

            @Override
            public void handleCacheEvictError(RuntimeException exception, Cache cache, Object key) {
                logger.warn("handleCacheEvictError in redis: {}", exception.getMessage());
            }

            @Override
            public void handleCacheClearError(RuntimeException exception, Cache cache) {
                logger.warn("handleCacheClearError in redis: {}", exception.getMessage());
            }};
    }
}

在src/main/resources 目录下的application.properties文件中新增redis 的配置项

redis.hostname=localhost
redis.port=6379

添加bean的序列化

Person 类实现Serializable 接口

public class Person implements Serializable {

    private static final long serialVersionUID = 133938246231808718L;

测试 同上一篇博客。

本文完整代码:https://github.com/527515025/springBoot.git

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐