当前位置: 首页 > news >正文

java连接redis

1.使用

1.创建java工程

2.引入依赖

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

3.

 //1.获取jedis对象,把所有对redis的操作都封装到该类中//默认连接本地localhost,端口号6379Jedis jedis=new Jedis("192.168.64.130",6379);//key操作Set<String> keys = jedis.keys("*");System.out.println(keys);//判断k1是否存在boolean k1 = jedis.exists("k1");System.out.println(k1);//对string类型的操作String set = jedis.set("name", "aaa");String name = jedis.get("name");System.out.println(name);long setnx = jedis.setnx("name", "bbb");System.out.println(setnx);//对hash类型的操作Map<String, String> map = new HashMap<>();map.put("name","张三");map.put("age","18");map.put("sex","男");jedis.hset("people",map);Map<String, String> people = jedis.hgetAll("people");System.out.println(people);jedis.close();

1.2.Jedis连接池

作用:

提供效率,减少频繁创建和销毁连接对象

 @Testpublic void test02(){//创建jedis连接池的配置JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();//最大值jedisPoolConfig.setMaxTotal(10);//最小空闲值jedisPoolConfig.setMinIdle(5);//拿到jedis对象时,是否验证该对象可用jedisPoolConfig.setTestOnBorrow(true);//等待时间Duration of = Duration.of(1000, ChronoUnit.MILLIS);jedisPoolConfig.setMaxWait(of);//创建jedis连接池JedisPool jedisPool = new JedisPool(jedisPoolConfig,"192.168.64.130",6379);//获取jedis对象Jedis jedis=jedisPool.getResource();//key操作Set<String> keys = jedis.keys("*");System.out.println(keys);//判断k1是否存在boolean k1 = jedis.exists("k1");System.out.println(k1);//对string类型的操作String set = jedis.set("name", "aaa");String name = jedis.get("name");System.out.println(name);long setnx = jedis.setnx("name", "bbb");System.out.println(setnx);//对hash类型的操作Map<String, String> map = new HashMap<>();map.put("name","张三");map.put("age","18");map.put("sex","男");jedis.hset("people",map);Map<String, String> people = jedis.hgetAll("people");System.out.println(people);jedis.close();}

 @Testpublic void test02_1(){JedisPool jedisPool=new JedisPool("192.168.64.130",6379);jedisPool.setMaxTotal(10);jedisPool.setMaxIdle(5);jedisPool.setMaxWait(Duration.of(1000, ChronoUnit.MILLIS));//获取jedis对象Jedis jedis=jedisPool.getResource();jedisPool.close();}

2.java连接redis集群

@Testpublic void test05(){Set<HostAndPort> nodes=new HashSet<HostAndPort>();nodes.add(new HostAndPort("192.168.64.130",7001));nodes.add(new HostAndPort("192.168.64.130",7002));nodes.add(new HostAndPort("192.168.64.130",7003));nodes.add(new HostAndPort("192.168.64.130",7004));nodes.add(new HostAndPort("192.168.64.130",7005));nodes.add(new HostAndPort("192.168.64.130",7006));JedisCluster jedisCluster=new JedisCluster(nodes);jedisCluster.set("k1","v1");String k1 = jedisCluster.get("k1");System.out.println(k1);jedisCluster.close();}

3.springboot整合redis

在springboot中提供了俩个封装类RedisTemplate和StringRedisTemplate。StringRedisTemplate是
RedisTemplate的子类,StringRedisTemplate存储的元素值,都是String类型,不能直接存储对象类型。

1.依赖

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

2.配置文件

#redis相关配置
spring.data.redis.host=192.168.64.130
spring.data.redis.port=6379
spring.data.redis.jedis.pool.max-idle=8
spring.data.redis.jedis.pool.min-idle=0
spring.data.redis.jedis.pool.max-wait=3000
spring.data.redis.jedis.pool.max-active=10

3.测试

3.1StringRedisTemplate

@Autowiredprivate StringRedisTemplate redisTemplate;@Testpublic void test01() throws JsonProcessingException {//操作redis服务 key操作Boolean k1 = redisTemplate.delete("k1");System.out.println(k1);Boolean k11 = redisTemplate.hasKey("k1");System.out.println(k11);//2.string操作,redis对每一种类型的操作都封装了相应的类,由相应类对象操作相应的数据类型ValueOperations<String, String> forValue = redisTemplate.opsForValue();forValue.set("k1","v1",30, TimeUnit.SECONDS);String k12 = forValue.get("k1");System.out.println(k12);//可以通过序列化吧对象转换为相应的json字符ObjectMapper objectMapper=new ObjectMapper();forValue.set("k3",objectMapper.writeValueAsString(new User("bbb", 18)));String k3 = forValue.get("k3");//反序列化User user = objectMapper.readValue(k3, User.class);System.out.println(user);//如果指定的key存在则存储失败,如果不存在则存储成功Boolean k13 = forValue.setIfAbsent("k2", "333", 30, TimeUnit.SECONDS);System.out.println(k13);//3.hash操作HashOperations<String, Object, Object> forHash = redisTemplate.opsForHash();forHash.put("people","name","aaa");forHash.put("people","age","18");Map<Object, Object> people = forHash.entries("people");System.out.println(people);}

上面的StringRedisTemplate的key和value都是string类型

默认不能存储对象类型,要想存储需要把对象序列化,获取时反序列化

3.2RedisTemplate

@Data
@AllArgsConstructor
@NoArgsConstructor
//默认采用jdk的序列化方式
public class User implements Serializable {private String name;private Integer age;
}
 @Autowiredprivate RedisTemplate redisTemplate;@Testpublic void test02(){//可以操作字符串类型ValueOperations valueOperations = redisTemplate.opsForValue();valueOperations.set("k1","v1");System.out.println(valueOperations.get("k1"));//User类不能序列化valueOperations.set("k2",new User("张三",18));System.out.println(valueOperations.get("k2"));}

因为RedisTemplate默认序列化方式为jdk序列化方式,可以指定序列化方式

如果是hash类型还需要设置hash的

redisTemplate.setHashKeySerializer(new GenericJackson2JsonRedisSerializer());

使用一次需要设置一次

可以使用配置类

@Configuration
public class RedisConfig {@Beanpublic 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);//key序列化方式template.setConnectionFactory(factory);//value序列化方式template.setKeySerializer(redisSerializer);template.setValueSerializer(jackson2JsonRedisSerializer);template.setHashKeySerializer(redisSerializer);return template;}
}


http://www.mrgr.cn/news/91344.html

相关文章:

  • javacv将视频切分为m3u8视频并播放
  • 【分布式理论11】分布式协同之分布式事务(一个应用操作多个资源):从刚性事务到柔性事务的演进
  • 基于Python豆瓣电影数据可视化分析系统的设计与实现
  • DFS算法篇:理解递归,熟悉递归,成为递归
  • 【NLP 25、模型训练方式】
  • 用 Python 实现 DeepSeek R1 本地化部署
  • 中药细粒度图像分类
  • Spring Cloud Gateway中断言路由和过滤器的使用
  • 深入解析 iOS 视频录制(一):录制管理核心MWRecordingController 类的设计与实现
  • C++编程,#include <iostream>详解,以及using namespace std;作用
  • compose multiplatform写一个简单的阅读器
  • Ubuntu 22.04.5 LTS 安装企业微信,(2025-02-17安装可行)
  • 最新Apache Hudi 1.0.1源码编译详细教程以及常见问题处理
  • 【PCIe 总线及设备入门学习专栏 1.1 -- PCI 设备访问方法】
  • 用deepseek学大模型08-卷积神经网络(CNN)
  • DeepSeek + Vue实战开发
  • ESP32 ESP-IDF TFT-LCD(ST7735 128x160) LVGL基本配置和使用
  • Blackbox.AI:高效智能的生产力工具新选择
  • Linux中线程创建,线程退出,线程接合
  • 微信小程序image组件mode属性详解