zoukankan      html  css  js  c++  java
  • Springboot 整合Redis

    pom.xml

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

    application.yml

    server:
      port: 9891
    
    spring:
      redis:
        host: 106.xx.xxx.229
        port: 6379
        password: 123456
    

    具体配置属性在org.springframework.boot.autoconfigure.data.redis.RedisProperties
    测试代码

    @RestController
    public class RedisController {
        @Autowired
        StringRedisTemplate redisTemplate;
    
        @GetMapping(value="/put/")
        public String put(){
            try{
                redisTemplate.opsForValue().set("key1","hello world!");
                return redisTemplate.opsForValue().get("key1");
            }catch (Exception e){
                return e.getMessage();
            }
        }
        @GetMapping(value="/get/")
        public String get(){
            try{
               String mes= redisTemplate.opsForValue().get("key1");
                return mes;
            }catch (Exception e){
                return e.getMessage();
            }
        }
    }
    
    


    SpringBoot Redis使用
    RedisTemplate
    • 使用RedisTemplate时对象需要实现序列化接口
    • 需要重新配置序列化(默认JdkSerializationRedisSerializer,转化为byte[]redis服务器中不便查看,其它序列化方式在org.springframework.data.redis.serializer包下,存储形式如下)
      测试
     @GetMapping(value="/put/obj")
        public String putList(){
            try{
                redisTemplate.opsForValue().set("user1",new User("张三","北京"));
                return redisTemplate.opsForValue().get("user1").toString();
            }catch (Exception e){
                return e.getMessage();
            }
        }
        @GetMapping(value="/get/obj")
        public String getList(){
            try{
                User user= (User)redisTemplate.opsForValue().get("user1");
                return user.toString();
            }catch (Exception e){
                return e.getMessage();
            }
        }
    

    默认


    创建配置类自定义序列化类

    @Configuration
    public class RedisConfig extends CachingConfigurerSupport {
        /**
         * 配置Jackson2JsonRedisSerializer序列化策略
         */
        private Jackson2JsonRedisSerializer<Object> Jackson2JsonSerializer() {
            // 使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值
            Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
            ObjectMapper objectMapper = new ObjectMapper();
    
            // 指定要序列化的域,field,get和set,以及修饰符范围,ANY是都有包括private和public
            objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
    
            // 指定序列化输入的类型,类必须是非final修饰的,final修饰的类,比如String,Integer等会跑出异常
            objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL);
    
            jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
            return jackson2JsonRedisSerializer;
        }
    
        @Bean
        public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
            RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
            redisTemplate.setConnectionFactory(redisConnectionFactory);
            // 用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值
            redisTemplate.setValueSerializer(Jackson2JsonSerializer());
    
            StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
            // 使用StringRedisSerializer来序列化和反序列化redis的key值
            redisTemplate.setKeySerializer(stringRedisSerializer);
            //其他数据类型略...
            
            redisTemplate.afterPropertiesSet();
            return redisTemplate;
        }
    }
    

    Sentinel 哨兵模式(springboot创建JedisConnectionFactory时会先判断是否是哨兵模式或者集群、最后才是单机模式)
    spring:
      redis:
        timeout: 10000  # 连接超时时间(毫秒)
    # 单机模式
    #    host: 106.xx.xxx.229
    #    port: 6379
        password: 123456
    #哨兵模式
    
        sentinel:
          #password: 123456
          master: mymaster
    #两个sentinel
          nodes:
            - 106.xx.xxx.229:6384 
            - 106.xx.xxx.229:6383
    
        jedis:
          pool:
            max-active: 8 # 连接池最大连接数(使用负值表示没有限制)
            max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制)
            max-idle: 8 # 连接池中的最大空闲连接
            min-idle: 0  # 连接池中的最小空闲连接
    
    private JedisConnectionFactory createJedisConnectionFactory(
    			ObjectProvider<JedisClientConfigurationBuilderCustomizer> builderCustomizers) {
    		JedisClientConfiguration clientConfiguration = getJedisClientConfiguration(builderCustomizers);
    		if (getSentinelConfig() != null) {
    			return new JedisConnectionFactory(getSentinelConfig(), clientConfiguration);
    		}
    		if (getClusterConfiguration() != null) {
    			return new JedisConnectionFactory(getClusterConfiguration(), clientConfiguration);
    		}
    		return new JedisConnectionFactory(getStandaloneConfig(), clientConfiguration);
    	}
    
  • 相关阅读:
    ios8的图标尺寸
    Xcode 6.1 正式版如何创建一个Empty Application
    xcode真机调试
    iOS基础控件
    iOS开发系列之二 – UILabel 用法小结
    (转)25个增强iOS应用程序性能的提示和技巧--初级篇
    IOS开发第三方开源库
    ios -- NSdata 与 NSString,Byte数组,UIImage 的相互转换
    4.组件的语法糖注册方式
    3.父组件和子组件
  • 原文地址:https://www.cnblogs.com/jinit/p/13739703.html
Copyright © 2011-2022 走看看