springboot缓存篇(二)-redis 做缓存
本文基于上一篇博客springboot的缓存技术,将缓存技术修改为使用redis数据库作为缓存技术。本文结构:- redis 介绍- redis基于docker安装- 添加pom 依赖- 添加 redisconfig 配置- 添加bean的序列化redis 介绍Redis 是一个开源的 使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志 型、
本文基于上一篇博客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;
测试 同上一篇博客。
更多推荐
所有评论(0)