zoukankan      html  css  js  c++  java
  • 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】


  • 相关阅读:
    LeetCode之“数学”:Rectangle Area
    HTML5 简介、HTML5 浏览器支持
    Android EditText获取焦点和失去焦点监听事件
    HTML 速查列表
    HTML URL
    HTML 字符实体
    HTML 脚本
    HTML 颜色值
    HTML 颜色名
    HTML 颜色
  • 原文地址:https://www.cnblogs.com/silyvin/p/9106767.html
Copyright © 2011-2022 走看看