• springBoot整合Ridis


    springBoot整合Ridis

    SpringBoot 操作数据:spring-data jpa jdbc mongodb redis!

    SpringData 也是和 SpringBoot 齐名的项目! 说明: 在 SpringBoot2.x 之后,原来使用的jedis 被替换为了 lettuce?

    jedis : 采用的直连,多个线程操作的话,是不安全的,如果想要避免不安全的,使用 jedis pool 连接 池! 更像 BIO 模式

    lettuce : 采用netty,实例可以再多个线程中进行共享,不存在线程不安全的情况!可以减少线程数据 了,更像 NIO 模式

    自动配置源码

    @Bean
    @ConditionalOnMissingBean(name = "redisTemplate") // 我们可以自己定义一个
    redisTemplate来替换这个默认的!
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)throws UnknownHostException {
        // 默认的 RedisTemplate 没有过多的设置,redis 对象都是需要序列化!
        // 两个泛型都是 Object, Object 的类型,我们后使用需要强制转换 <String, Object>
        RedisTemplate<Object, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory);
        return template;
    }
    @Bean
    @ConditionalOnMissingBean // 由于 String 是redis中最常使用的类型,所以说单独提出来了一个bean!
    public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
        StringRedisTemplate template = new StringRedisTemplate();
        template.setConnectionFactory(redisConnectionFactory);
        return template;
    }
    

    整合

    1. 导入依赖

      <!-- 操作redis -->
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-data-redis</artifactId>
      </dependency>
      
    2. 配置连接

      # 配置redis
      spring.redis.host=127.0.0.1
      spring.redis.port=6379
      
    3. 测试

      @SpringBootTest
      class Redis02SpringbootApplicationTests {
      @Autowired
      private RedisTemplate redisTemplate;
      @Test
      void contextLoads() {
              // redisTemplate 操作不同的数据类型,api和我们的指令是一样的
              // opsForValue 操作字符串 类似String
              // opsForList 操作List 类似List
              // opsForSet
              // opsForHash
              // opsForZSet
              // opsForGeo
              // opsForHyperLogLog
              // 除了进本的操作,我们常用的方法都可以直接通过redisTemplate操作,比如事务,和基本的CRUD
              // 获取redis的连接对象
              // RedisConnection connection =
              redisTemplate.getConnectionFactory().getConnection();
              // connection.flushDb();
              // connection.flushAll();
              redisTemplate.opsForValue().set("mykey","myValue");
              System.out.println(redisTemplate.opsForValue().get("mykey"));
          }
      }
      
      

    自定义RedisTemplate

    @Configuration
    public class RedisConfig {
    	// 自己定义了一个 RedisTemplate
        @Bean
        @SuppressWarnings("all")
        public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
            // 我们为了自己开发方便,一般直接使用 <String, Object>
            RedisTemplate<String, Object> template = new RedisTemplate<String,Object>();
            template.setConnectionFactory(factory);
            // Json序列化配置
            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);
            // String 的序列化
            StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
            // key采用String的序列化方式
            template.setKeySerializer(stringRedisSerializer);
            // hash的key也采用String的序列化方式
            template.setHashKeySerializer(stringRedisSerializer);
            // value序列化方式采用jackson
            template.setValueSerializer(jackson2JsonRedisSerializer);
            // hash的value序列化方式采用jackson
            template.setHashValueSerializer(jackson2JsonRedisSerializer);
            template.afterPropertiesSet();
            return template;
        }
    }
    
  • 相关阅读:
    记开发个人图书收藏清单小程序开发(二)
    记一次使用MemoryCache不能Get的问题
    Linux:系统安全相关优化,(firewalld、iptables、selinux)
    linux:操作系统优化
    Linux:日志,cpu,memory,mount,load等系统信息查看
    linux:yum系统如何安装软件
    Linux:系统运行级别
    linux:eth0(ens33)-网卡名称及配置文件信息解析
    linux:linux系统中的挂载技术
    linux:命令行常用快捷方式
  • 原文地址:https://www.cnblogs.com/junlinsky/p/13262456.html
Copyright © 2020-2023  润新知