1. 安装redis
redis官网地址:http://www.redis.io/
最新版本:2.8.3
在Linux下安装Redis非常简单,具体步骤如下(官网有说明):
1、下载源码,解压缩后编译源码。
$ wget http://download.redis.io/releases/redis-2.8.3.tar.gz $ tar xzf redis-2.8.3.tar.gz $ cd redis-2.8.3 $ make
2、编译完成后,在Src目录下,有四个可执行文件redis-server、redis-benchmark、redis-cli和redis.conf(在上一目录)。然后拷贝到一个目录下。
mkdir /usr/redis cp redis-server /usr/redis cp redis-benchmark /usr/redis cp redis-cli /usr/redis cp redis.conf /usr/redis cd /usr/redis
3、启动Redis服务。
$ redis-server redis.conf
4、然后用客户端测试一下是否启动成功。
$ redis-cli redis> set foo bar OK redis> get foo "bar"
http://www.cnblogs.com/silent2012/p/3499654.html
使用 ./redis-server redis.conf & 来后台启动redis服务
redis-cli -p 端口号 shutdown 关闭redis服务
从外部链接调试:
telnet xxx.xxx.xxx.xxx 6379
2. spring boot 接入 redis 客户端
http://wiselyman.iteye.com/blog/2184884
(1)maven依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
<version>1.3.1.RELEASE</version>
</dependency>
(2)属性:
# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=xxx.xxx.xxx.xxx
# Redis服务器连接端口
spring.redis.port=xxxx
# Redis服务器连接密码(默认为空)
spring.redis.password=
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
# 连接池中的最大空闲连接
spring.redis.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.pool.min-idle=0
# 连接超时时间(毫秒)
spring.redis.timeout=0
database 生产环境可设置为其他数字,区分测试环境
(3)代码注入:
@Configuration
@EnableCaching
@EnableRedisHttpSession
public class RedisConfig extends CachingConfigurerSupport {
@Bean
public KeyGenerator wiselyKeyGenerator(){
return new KeyGenerator() {
@Override
public Object generate(Object target, Method method, Object... params) {
StringBuilder sb = new StringBuilder();
sb.append(target.getClass().getName());
sb.append(method.getName());
for (Object obj : params) {
sb.append(obj.toString());
}
return sb.toString();
}
};
}
@Bean
public static ConfigureRedisAction configureRedisAction() {
return ConfigureRedisAction.NO_OP;
}
@Bean
public CacheManager cacheManager(
@SuppressWarnings("rawtypes") RedisTemplate<?,?> redisTemplate) {
return new RedisCacheManager(redisTemplate);
}
@Bean
public RedisTemplate<String, Object> stringRedisTemplate(
RedisConnectionFactory factory) {
RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
template.setConnectionFactory(factory);
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
template.setValueSerializer(stringRedisSerializer);
template.setKeySerializer(stringRedisSerializer);
template.setHashKeySerializer(stringRedisSerializer);
template.setHashValueSerializer(stringRedisSerializer);
template.afterPropertiesSet();
return template;
}
@Bean
public RedisTemplate<String, Object> jdkRedisTemplate(
RedisConnectionFactory factory) {
RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
template.setConnectionFactory(factory);
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
JdkSerializationRedisSerializer jdkSerializationRedisSerializer = new JdkSerializationRedisSerializer();
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
template.setValueSerializer(jdkSerializationRedisSerializer);
template.setKeySerializer(stringRedisSerializer);
template.setHashKeySerializer(stringRedisSerializer);
template.setHashValueSerializer(jdkSerializationRedisSerializer);
template.afterPropertiesSet();
return template;
}
}
这里同时注入了stringRedisTemplate 和 jdkRedisTemplate,未在@Bean处指定名称(@Bean(name="xxx")),直接取工厂方法名
业务装配时:
@Resource(name = "jdkRedisTemplate")
private RedisTemplate<String, Object> jdkRedisTemplate;
@Resource(name = "stringRedisTemplate") // if stringRedisTemplate, result in SmsCheck cannot be cast to java.lang.String
private RedisTemplate<String, Object> stringRedisTemplate;
3. 简单使用调试
SmsCheck smsCheck = new SmsCheck();
smsCheck.setMobile("xxx");
// 设置缓存
jdkRedisTemplate.opsForValue().set("test",smsCheck);
Object o = jdkRedisTemplate.opsForValue().get("test");
// if stringRedisTemplate result in SmsCheck cannot to String Exception
stringRedisTemplate.opsForValue().set("testInt", new Integer(2));//报错
测试通过,更详细的使用在未来更新,如果此处装配的是stringRedisTemplate,则由于该bean以
template.setValueSerializer(stringRedisSerializer);
作为value的序列化方案,所以会导致SmsCheck无法序列化为String,抛出一个
SmsCheck cannot be cast to java.lang.String
异常
最后一行也报错,
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
spring在序列化时抛出异常,Integer无法直接使用stringRedisTemplate序列化
4.相关推荐
http://www.jianshu.com/p/7bf5dc61ca06
如何使用RedisTemplate访问Redis数据结构
http://412887952-qq-com.iteye.com/blog/2294942