美文网首页Redis总结
七、Redis_Jedis及整合SpringBoot

七、Redis_Jedis及整合SpringBoot

作者: 不减肥到一百三不改名字 | 来源:发表于2021-10-19 17:56 被阅读0次

    1、Jedis所需要的jar包

    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>3.2.0</version>
    </dependency>
    

    2、连接redis注意事项

    禁用Linux的防火墙:Linux(CentOS7)里执行命令
    systemctl stop/disable firewalld.service
    redis.conf中注释掉bind 127.0.0.1 ,然后 protected-mode no

    3、Jedis常用操作

    3.1、创建Maven项目工程

    3.2、创建测试程序

    package com.atguigu.jedis;
    import redis.clients.jedis.Jedis;
    public class Demo01 {
          public static void main(String[] args) {
                Jedis jedis = new Jedis("192.168.137.3",6379);
                String pong = jedis.ping();
                System.out.println("连接成功:"+pong);
                jedis.close();
          }
    }
    

    4、测试相关数据类型

    • Jedis-API:Key
    jedis.set("k1", "v1");
    jedis.set("k2", "v2");
    jedis.set("k3", "v3");
    Set<String> keys = jedis.keys("*");
    System.out.println(keys.size());
    for (String key : keys) {
          System.out.println(key);
    }
    System.out.println(jedis.exists("k1"));
    System.out.println(jedis.ttl("k1"));                
    System.out.println(jedis.get("k1"));
    
    
    • Jedis-API:String
    jedis.mset("str1","v1","str2","v2","str3","v3");
    System.out.println(jedis.mget("str1","str2","str3"));
    
    • Jedis-API:List
    List<String> list = jedis.lrange("mylist",0,-1);
    for (String element : list) {
           System.out.println(element);
    }
    
    • Jedis-API:set
    jedis.sadd("orders", "order01");
    jedis.sadd("orders", "order02");
    jedis.sadd("orders", "order03");
    jedis.sadd("orders", "order04");
    Set<String> smembers = jedis.smembers("orders");
    for (String order : smembers) {
          System.out.println(order);
    }
    jedis.srem("orders", "order02");
    
    • Jedis-API:hash
    jedis.hset("hash1","userName","lisi");
    System.out.println(jedis.hget("hash1","userName"));
    Map<String,String> map = new HashMap<String,String>();
    map.put("telphone","13810169999");
    map.put("address","atguigu");
    map.put("email","abc@163.com");
    jedis.hmset("hash2",map);
    List<String> result = jedis.hmget("hash2", "telphone","email");
    for (String element : result) {
          System.out.println(element);
    }
    
    • Jedis-API:zset
    jedis.zadd("zset01", 100d, "z3");
    jedis.zadd("zset01", 90d, "l4");
    jedis.zadd("zset01", 80d, "w5");
    jedis.zadd("zset01", 70d, "z6");
     
    Set<String> zrange = jedis.zrange("zset01", 0, -1);
    for (String e : zrange) {
            System.out.println(e);
    }
    

    5、Redis与SpringBoot整合

    Spring Boot整合Redis非常简单,只需要按如下步骤整合即可
    1、 在pom.xml文件中引入redis相关依赖

    <!-- redis -->
    <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    
    <!-- spring2.X集成redis所需common-pool2-->
    <dependency>
          <groupId>org.apache.commons</groupId>
          <artifactId>commons-pool2</artifactId>
          <version>2.6.0</version>
    </dependency>
    

    2、 application.properties配置redis配置

    #Redis服务器地址
    spring.redis.host=192.168.140.136
    #Redis服务器连接端口
    spring.redis.port=6379
    #Redis数据库索引(默认为0)
    spring.redis.database= 0
    #连接超时时间(毫秒)
    spring.redis.timeout=1800000
    #连接池最大连接数(使用负值表示没有限制)
    spring.redis.lettuce.pool.max-active=20
    #最大阻塞等待时间(负数表示没限制)
    spring.redis.lettuce.pool.max-wait=-1
    #连接池中的最大空闲连接
    spring.redis.lettuce.pool.max-idle=5
    #连接池中的最小空闲连接
    spring.redis.lettuce.pool.min-idle=0
    

    3、 添加redis配置类

    @EnableCaching
    @Configuration
    public class RedisConfig extends CachingConfigurerSupport {
    
        @Bean
        public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
            RedisTemplate<String, Object> template = new RedisTemplate<>();
            RedisSerializer<String> redisSerializer = new StringRedisSerializer();
            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);
            template.setConnectionFactory(factory);
    //key序列化方式
            template.setKeySerializer(redisSerializer);
    //value序列化
            template.setValueSerializer(jackson2JsonRedisSerializer);
    //value hashmap序列化
            template.setHashValueSerializer(jackson2JsonRedisSerializer);
            return template;
        }
    
        @Bean
        public CacheManager cacheManager(RedisConnectionFactory factory) {
            RedisSerializer<String> redisSerializer = new StringRedisSerializer();
            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);
    // 配置序列化(解决乱码的问题),过期时间600秒
            RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
                    .entryTtl(Duration.ofSeconds(600))
                    .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
                    .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer))
                    .disableCachingNullValues();
            RedisCacheManager cacheManager = RedisCacheManager.builder(factory)
                    .cacheDefaults(config)
                    .build();
            return cacheManager;
        }
    }
    

    4、测试一下
    RedisTestController中添加测试方法

    @RestController
    @RequestMapping("/redisTest")
    public class RedisTestController {
        @Autowired
        private RedisTemplate redisTemplate;
    
        @GetMapping
        public String testRedis() {
            //设置值到redis
            redisTemplate.opsForValue().set("name","lucy");
            //从redis获取值
            String name = (String)redisTemplate.opsForValue().get("name");
            return name;
        }
    }
    

    相关文章

      网友评论

        本文标题:七、Redis_Jedis及整合SpringBoot

        本文链接:https://www.haomeiwen.com/subject/vifawltx.html