Java 整合
大约 3 分钟
Java 整合
Jedis
GitHub - redis/jedis: Redis Java client designed for performance and ease of use.
依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>4.2.0</version>
</dependency>
测试类中测试
public class JedisTest {
private Jedis jedis;
//创建连接
@BeforeEach
void setUp() {
jedis = new Jedis("192.168.10.108", 6379);
jedis.auth("1234");
}
@Test
void testString() {
jedis.set("name","李一玓");
System.out.println(jedis.get("name"));
}
@Test
public void testHash(){
jedis.hset("user:1","name","liyuanhao");
System.out.println(jedis.hget("user:1","name"));
}
//关闭资源
@AfterEach
void tearDown() {
if (jedis != null) {
jedis.close();
}
}
}
jedis的连接池
public class JedisConnectionFactory {
public static final JedisPool jedisPool;
static {
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxTotal(8);
jedisPoolConfig.setMaxIdle(8);
jedisPoolConfig.setMinIdle(0);
jedisPool = new JedisPool(jedisPoolConfig,"192.168.10.108",6379,1000,"1234");
}
public static Jedis getJedis(){
return jedisPool.getResource();
}
}
public class JedisTest {
private Jedis jedis;
@BeforeEach
void setUp() {
//jedis = new Jedis("192.168.10.108", 6379);
//this.jedis.auth("1234");
jedis = JedisConnectionFactory.getJedis();
}
@Test
public void testList(){
jedis.lpush("helloList","hao are you");
System.out.println(jedis.lrange("helloList",0,2));
}
@AfterEach
void tearDown() {
if (jedis != null) {
jedis.close();
}
}
}
SpringDataRedis
SpringData是Spring中数据操作的模块,包含对各种数据库的集成,其中对Redis的集成模块就叫做SpringDataRedis,官网地址:<https://spring.io/projects/spring-data-redis>
- 提供了对不同Redis客户端的整合(Lettuce和Jedis)
- 提供了RedisTemplate统一API来操作Redis
- 支持Redis的发布订阅模型
- 支持Redis哨兵和Redis集群
- 支持基于Lettuce的响应式编程
- 支持基于JDK.JSON.字符串.Spring对象的数据序列化及反序列化
- 支持基于Redis的JDKCollection实现
SpringDataRedis中提供了RedisTemplate工具类,其中封装了各种对Redis的操作。并且将不同数据类型的操作API封装到了不同的类型中:

SpringBoot整合
依赖
<!--redis依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--Jackson依赖-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--test-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
application.yml
spring:
redis:
host: 192.168.10.108
port: 6379
password: 1234
lettuce: #默认是lettuce的连接池
pool:
max-active: 8 #最大连接
max-idle: 8 #最大空闲连接
min-idle: 0 #最小空闲连接
max-wait: 100ms #连接等待时间
序列号
jdk序列化,可读性差,内存占用大,key可能对应不上
@SpringBootTest public class RedisTest { @Autowired private RedisTemplate redisTemplate; @Test public void test() { redisTemplate.opsForValue().set("name","111111"); Object name = redisTemplate.opsForValue().get("name"); System.out.println(name); } }自定义序列化--json:占内存
{ //通过@class反序列化 "@class": "com.botuer.springdataredistest.pojo.User", "name": "李某某", "age": 12 }//创建配置类 @Configuration public class RedisConfig { @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory){ // 创建RedisTemplate对象 RedisTemplate<String, Object> template = new RedisTemplate<>(); // 设置连接工厂 template.setConnectionFactory(connectionFactory); // 创建JSON序列化工具 GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer(); // 设置Key的序列化 template.setKeySerializer(RedisSerializer.string()); template.setHashKeySerializer(RedisSerializer.string()); // 设置Value的序列化 template.setValueSerializer(jsonRedisSerializer); template.setHashValueSerializer(jsonRedisSerializer); // 返回 return template; } }@SpringBootTest public class RedisTest { @Autowired private RedisTemplate<String, Object> redisTemplate; @Test public void test() { User user = new User("李某某", 12); redisTemplate.opsForValue().set("user",user); Object user1 = redisTemplate.opsForValue().get("user"); System.out.println(user1); } }StringRedisTemplate + 手动序列化
- jackson是SpringBoot自带的json序列化工具,ObjectMapper类
- writeValueAsString(实体对象)
- readValue(jsonStr,实体类)
- fastjson需要导入依赖(alibaba的fastjson)
- JSON.toJSONString(实体对象);
- JSON.parseObject(jsonStr, 实体类);
@SpringBootTest class RedisStringTests { @Autowired private StringRedisTemplate stringRedisTemplate; private static final ObjectMapper mapper = new ObjectMapper(); @Test void testSaveUser() throws JsonProcessingException { // 创建对象 User user = new User("虎哥", 21); // 手动序列化 String json = mapper.writeValueAsString(user); // 写入数据 stringRedisTemplate.opsForValue().set("user:200", json); // 获取数据 String jsonUser = stringRedisTemplate.opsForValue().get("user:200"); // 手动反序列化 User user1 = mapper.readValue(jsonUser, User.class); System.out.println("user1 = " + user1); } }- jackson是SpringBoot自带的json序列化工具,ObjectMapper类
