java毗连redis

一给  金牌会员 | 2025-2-18 08:54:45 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 845|帖子 845|积分 2535

1.使用

1.创建java工程
2.引入依赖
  1. <dependency>
  2.     <groupId>redis.clients</groupId>
  3.     <artifactId>jedis</artifactId>
  4.     <version>5.2.0</version>
  5. </dependency>
复制代码
3.
  1. //1.获取jedis对象,把所有对redis的操作都封装到该类中
  2.         //默认连接本地localhost,端口号6379
  3.         Jedis jedis=new Jedis("192.168.64.130",6379);
  4.         //key操作
  5.         Set<String> keys = jedis.keys("*");
  6.         System.out.println(keys);
  7.         //判断k1是否存在
  8.         boolean k1 = jedis.exists("k1");
  9.         System.out.println(k1);
  10.         //对string类型的操作
  11.         String set = jedis.set("name", "aaa");
  12.         String name = jedis.get("name");
  13.         System.out.println(name);
  14.         long setnx = jedis.setnx("name", "bbb");
  15.         System.out.println(setnx);
  16.         //对hash类型的操作
  17.         Map<String, String> map = new HashMap<>();
  18.         map.put("name","张三");
  19.         map.put("age","18");
  20.         map.put("sex","男");
  21.         jedis.hset("people",map);
  22.         Map<String, String> people = jedis.hgetAll("people");
  23.         System.out.println(people);
  24.         jedis.close();
复制代码
1.2.Jedis毗连池

作用:
提供效率,减少频仍创建和销毁毗连对象
  1. @Test
  2.     public void test02(){
  3.         //创建jedis连接池的配置
  4.         JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
  5.         //最大值
  6.         jedisPoolConfig.setMaxTotal(10);
  7.         //最小空闲值
  8.         jedisPoolConfig.setMinIdle(5);
  9.         //最大空闲值
  10.         jedisPoolConfig.setMaxTotal(8);
  11.         //拿到jedis对象时,是否验证该对象可用
  12.         jedisPoolConfig.setTestOnBorrow(true);
  13.         //等待时间
  14.         jedisPoolConfig.setMaxWaitMillis(3000);
  15.         //创建jedis连接池
  16.         JedisPool jedisPool = new JedisPool(jedisPoolConfig,"192.168.64.130",6379);
  17.         //获取jedis对象
  18.         Jedis jedis=jedisPool.getResource();
  19.         //key操作
  20.         Set<String> keys = jedis.keys("*");
  21.         System.out.println(keys);
  22.         //判断k1是否存在
  23.         boolean k1 = jedis.exists("k1");
  24.         System.out.println(k1);
  25.         //对string类型的操作
  26.         String set = jedis.set("name", "aaa");
  27.         String name = jedis.get("name");
  28.         System.out.println(name);
  29.         long setnx = jedis.setnx("name", "bbb");
  30.         System.out.println(setnx);
  31.         //对hash类型的操作
  32.         Map<String, String> map = new HashMap<>();
  33.         map.put("name","张三");
  34.         map.put("age","18");
  35.         map.put("sex","男");
  36.         jedis.hset("people",map);
  37.         Map<String, String> people = jedis.hgetAll("people");
  38.         System.out.println(people);
  39.         jedis.close();
  40.     }
复制代码
2.java毗连redis集群

  1. @Test
  2.     public void test05(){
  3.         Set<HostAndPort> nodes=new HashSet<HostAndPort>();
  4.         nodes.add(new HostAndPort("192.168.64.130",7001));
  5.         nodes.add(new HostAndPort("192.168.64.130",7002));
  6.         nodes.add(new HostAndPort("192.168.64.130",7003));
  7.         nodes.add(new HostAndPort("192.168.64.130",7004));
  8.         nodes.add(new HostAndPort("192.168.64.130",7005));
  9.         nodes.add(new HostAndPort("192.168.64.130",7006));
  10.         JedisCluster jedisCluster=new JedisCluster(nodes);
  11.         jedisCluster.set("k1","v1");
  12.         String k1 = jedisCluster.get("k1");
  13.         System.out.println(k1);
  14.         jedisCluster.close();
  15.     }
复制代码
3.springboot整合redis

在springboot中提供了俩个封装类RedisTemplate和StringRedisTemplate。StringRedisTemplate是
RedisTemplate的子类,StringRedisTemplate存储的元素值,都是String类型,不能直接存储对象类型。
1.依赖
  1. <dependency>
  2.     <groupId>org.springframework.boot</groupId>
  3.     <artifactId>spring-boot-starter-data-redis</artifactId>
  4. </dependency>
复制代码
2.设置文件
  1. #redis相关配置
  2. spring.data.redis.host=192.168.64.130
  3. spring.data.redis.port=6379
  4. spring.data.redis.jedis.pool.max-idle=8
  5. spring.data.redis.jedis.pool.min-idle=0
  6. spring.data.redis.jedis.pool.max-wait=3000
  7. spring.data.redis.jedis.pool.max-active=10
复制代码
3.测试

3.1StringRedisTemplate

  1. @Autowired
  2.     private StringRedisTemplate redisTemplate;
  3.     @Test
  4.     public void test01() throws JsonProcessingException {
  5.        //操作redis服务 key操作
  6.         Boolean k1 = redisTemplate.delete("k1");
  7.         System.out.println(k1);
  8.         Boolean k11 = redisTemplate.hasKey("k1");
  9.         System.out.println(k11);
  10.         //2.string操作,redis对每一种类型的操作都封装了相应的类,由相应类对象操作相应的数据类型
  11.         ValueOperations<String, String> forValue = redisTemplate.opsForValue();
  12.         forValue.set("k1","v1",30, TimeUnit.SECONDS);
  13.         String k12 = forValue.get("k1");
  14.         System.out.println(k12);
  15.         //可以通过序列化吧对象转换为相应的json字符
  16.         ObjectMapper objectMapper=new ObjectMapper();
  17.         forValue.set("k3",objectMapper.writeValueAsString(new User("bbb", 18)));
  18.         String k3 = forValue.get("k3");
  19.         //反序列化
  20.         User user = objectMapper.readValue(k3, User.class);
  21.         System.out.println(user);
  22.         //如果指定的key存在则存储失败,如果不存在则存储成功
  23.         Boolean k13 = forValue.setIfAbsent("k2", "333", 30, TimeUnit.SECONDS);
  24.         System.out.println(k13);
  25.         //3.hash操作
  26.         HashOperations<String, Object, Object> forHash = redisTemplate.opsForHash();
  27.         forHash.put("people","name","aaa");
  28.         forHash.put("people","age","18");
  29.         Map<Object, Object> people = forHash.entries("people");
  30.         System.out.println(people);
  31.     }
复制代码
上面的StringRedisTemplate的key和value都是string类型
默认不能存储对象类型,要想存储须要把对象序列化,获取时反序列化

3.2RedisTemplate

  1. @Data
  2. @AllArgsConstructor
  3. @NoArgsConstructor
  4. //默认采用jdk的序列化方式
  5. public class User implements Serializable {
  6.     private String name;
  7.     private Integer age;
  8. }
复制代码
  1. @Autowired
  2.     private RedisTemplate redisTemplate;
  3.     @Test
  4.     public void test02(){
  5.         //可以操作字符串类型
  6.         ValueOperations valueOperations = redisTemplate.opsForValue();
  7.         valueOperations.set("k1","v1");
  8.         System.out.println(valueOperations.get("k1"));
  9.         //User类不能序列化
  10.         valueOperations.set("k2",new User("张三",18));
  11.         System.out.println(valueOperations.get("k2"));
  12.     }
复制代码

因为RedisTemplate默认序列化方式为jdk序列化方式,可以指定序列化方式
如果是hash类型还须要设置hash的
  1. redisTemplate.setHashKeySerializer(new GenericJackson2JsonRedisSerializer());
复制代码


使用一次须要设置一次
可以使用设置类
  1. @Configuration
  2. public class RedisConfig {
  3.     @Bean
  4.     public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory factory){
  5.         RedisTemplate<String, Object> template= new RedisTemplate<>();
  6.         RedisSerializer<String> redisSerializer=new StringRedisSerializer();
  7.         Jackson2JsonRedisSerializer jackson2JsonRedisSerializer=new Jackson2JsonRedisSerializer(Object.class);
  8.         ObjectMapper om=new ObjectMapper();
  9.         om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
  10.         om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
  11.         jackson2JsonRedisSerializer.setObjectMapper(om);
  12.         //key序列化方式
  13.         template.setConnectionFactory(factory);
  14.         //value序列化方式
  15.         template.setKeySerializer(redisSerializer);
  16.         template.setValueSerializer(jackson2JsonRedisSerializer);
  17.         template.setHashKeySerializer(redisSerializer);
  18.         return template;
  19.     }
  20. }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

一给

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表