spring boot redis 接入笔记

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

http://www.cnblogs.com/codersay/p/4301677.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

35. Spring Boot集成Redis实现缓存机制【从零开始学Spring Boot】


原文地址:https://www.cnblogs.com/silyvin/p/9106767.html