Java中操作Redis+SpringBoot整合Redis

使用之前linux放行指定端口或关闭防火墙,设置Redis允许远程访问(bind 0.0.0.0 -::1 && protected no)

1.Java通过Jedis操作Redis

引入Redis依赖

     <dependency>
         <groupId>redis.clients</groupId>
         <artifactId>jedis</artifactId>
         <version>3.6.0</version>
     </dependency>
     <dependency>
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-pool2</artifactId>
      </dependency>

使用Jedis操作Redis的步骤:

  1. 获取连接

     //默认ip是localhost
     Jedis jedis = new Jedis("192.168.1.35",6379);
  2. 执行操作

             //2.1.字符串
             jedis.set("username","xiaoming");
             String value = jedis.get("username");
             System.out.println(value);
             System.out.println(jedis.type("username"));
             //2.2.hash
             jedis.hset("myhash","name","xiaomei");
             String hget = jedis.hget("myhash", "name");
             System.out.println(hget);
             System.out.println(jedis.type("myhash"));
             //2.3.list
             String[] strings = new String[]{"xiaoxin","xiaoli","xiaoguang"};
             jedis.lpush("mylist",strings);
             List<String> mylist = jedis.lrange("mylist", 0, -1);
            //获取所有的key
             Set<String> keys = jedis.keys("*");
             for (String key : keys) {
                 System.out.println(key);
             }
  3. 关闭连接

     jedis.close();

2.Java通过JedisPool获取Jedis

         //创建jedis连接池的配置
         JedisPoolConfig config = new JedisPoolConfig();
         config.setMaxTotal(10);//最多连接个数
         config.setMinIdle(5);//最小空闲值
         config.setMaxIdle(8);//最大空闲值
         config.setTestOnBorrow(true);//在拿到jedis对象时,是否验证该对象可用
         config.setMaxWaitMillis(3000);//等待时间
         //创建jedis连接池
         JedisPool pool = new JedisPool(config,"192.168.1.35",6379);
         //获取jedis连接对象
         Jedis jedis = pool.getResource();
         //jedis对象归还到连接池
         jedis.close();

作用:提高效率,减少频繁地创建和销毁连接对象。

3.Java连接Redis集群

         Set<HostAndPort> nodes = new HashSet<>();
         nodes.add(new HostAndPort("192.168.1.35",7000));
         nodes.add(new HostAndPort("192.168.1.35",7001));
         nodes.add(new HostAndPort("192.168.1.35",7002));
         nodes.add(new HostAndPort("192.168.1.35",7003));
         nodes.add(new HostAndPort("192.168.1.35",7004));
         nodes.add(new HostAndPort("192.168.1.35",7005));
         JedisCluster jedisCluster = new JedisCluster(nodes);
 ​
         jedisCluster.close();

4.SpringBoot整合Redis

Spring Data Redis(SpringBoot项目中提供了对应的Starter,即spring-boot-starter-data-redis)

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

RedisTemplate springboot针对jedis的高度封装类,该类可以存储任意类型的数据,但是必须序列化,默认采用的时JDK序列化,但是阅读不方便。我们一般不是jdk的序列化方式

StringRedisTemplate springboot针对jedis的高度封装类,RedisTemplate的子类,该类存储的元素值,都是String类型,不能直接存储对象类型;如果想存储对象,则需要把对象进行序列化存储,获取时需要反序列化

 #redis相关配置
 spring.redis.port=6379
 spring.redis.host=192.168.1.35
 spring.redis.database=0
 ​
 spring.redis.lettuce.pool.max-active=10
 spring.redis.lettuce.pool.max-wait=-1ms
 spring.redis.lettuce.pool.max-idle=10
 spring.redis.lettuce.pool.min-idle=0

RedisTemplate和StringRedisTemplate会把对每一种数据的操作封装成一个类

  • ValueOperations: 简单K-V操作

  • SetOperations: set类型数据操作

  • ZSetOperations: zset类型数据操作

  • HashOperations: 针对map类型的数据操作

  • ListOperations: 针对list类型数据操作

 @Autowired
     private StringRedisTemplate stringRedisTemplate;
     @Test
     public void testS() throws JsonProcessingException {
         ValueOperations<String, String> valueOperations = stringRedisTemplate.opsForValue();
         //可以通过序列化把对象转换为相应的json字符串
         ObjectMapper objectMapper = new ObjectMapper();
         valueOperations.set("sasd",objectMapper.writeValueAsString(new Object()));
         String s = valueOperations.get("sasd");
         //反序列化
         Object o = objectMapper.readValue(s, Object.class);
     }

redisTemplate 配置序列化:

 /**
  * Redis配置类
  */
 public class RedisConfig {
     
     @Bean //该方法的返回对象交于spring容器管理
     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);
         //key hashmap序列化
         template.setHashKeySerializer(jackson2JsonRedisSerializer);
         //value hashmap序列化
         template.setHashValueSerializer(jackson2JsonRedisSerializer);
         return template;
     }
 }
 //解决redis-cli.exe中key序列化问题

5.SpringBoot整合Redis集群

 spring.redis.jedis.pool.max-active=10
 spring.redis.lettuce.pool.max-idle=10
 spring.redis.lettuce.pool.max-wait=-1ms
 spring.redis.lettuce.pool.min-idle=0
 ​
 #设置redis重定向的次数---根据主节点的个数
 spring.redis.cluster.max-redirects=3
 ​
 spring.redis.cluster.nodes=192.168.1.35:7000,192.168.1.35:7001,192.168.1.35:7002,192.168.1.35:7003,192.168.1.35:7004,192.168.1.35:7005
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值