首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一文教你如何快速使用Java Redis客户端

Redis快速入门,分两个客户端:Jedis和SpringDataRedis

使用Jdedis

1、引入依赖

redis.clients

jedis

3.7.0

org.junit.jupiter

junit-jupiter

5.7.0

test

2、创建测试类:

import org.junit.jupiter.api.AfterEach;

import org.junit.jupiter.api.BeforeEach;

import org.junit.jupiter.api.Test;

import redis.clients.jedis.Jedis;

import java.util.HashMap;

import java.util.Map;

/**

* @author 凯哥Java

*/

public class JedisTest {

private Jedis jedis;

@BeforeEach

public void initJedis(){

jedis = new Jedis("192.168.50.135",6379);

}

@Test

public void testString(){

String result = jedis.set("name","kaige");

System.out.println("set Result"+result);

String nameValue = jedis.get("name");

System.out.println("v:"+nameValue);

}

@Test

public void hashTest(){

Map value = new HashMap();

value.put("id","1");

value.put("name","hset1");

value.put("age","23");

Long result = jedis.hset("persion_1",value);

System.out.println("set Result"+result);

String age = jedis.hget("persion_1","age");

System.out.println("age:"+age);

}

@AfterEach

void tearDown() {

if (jedis != null) {

jedis.close();

}

}

}

说明:

如果生产环境就这么使用,会出问题的。jedis是线程不安全的,而且创建、销毁也是很消耗的。所以使用连接池方式:

创建连接池:

import redis.clients.jedis.Jedis;

import redis.clients.jedis.JedisPool;

import redis.clients.jedis.JedisPoolConfig;

/**

* @author 凯哥Java

* @description jedis连接池

*/

public class JedisFactory {

private static final JedisPool jedisPool;

static {

JedisPoolConfig poolConfig = new JedisPoolConfig();

//最大连接数

poolConfig.setMaxTotal(8);

//最大空闲连接

poolConfig.setMaxIdle(8);

//等待市场

poolConfig.setMaxWaitMillis(1000);

//最小空闲连接

poolConfig.setMinIdle(0);

jedisPool = new JedisPool(poolConfig,"192.168.50.135",6379);

}

public static Jedis getJedis(){

return jedisPool.getResource();

}

}

使用:

二:springDataRedis

springData介绍:

springDataRedis中提供了RedisTemplate工具类,其中封装了各种对Redis的操作。并且将不同数据类型的操作API封装到了不同类型中:

spring 默认使用的是lettuce客户端的。如果要使用jedis的话,需要自己引入相关依赖。

使用springdataRedis步骤:

1:引入依赖

dependency>

<groupId

<artifactId

dependency>

dependency>

<groupId

<artifactId

dependency>

2:配置Redis

application.yaml文件:

spring:

redis:

host: 192.168.50.135

port: 6379

lettuce:

pool:

max-active: 8

max-idle: 8

min-idle: 0

max-wait: 100ms

3:写测试类:

需要注意:在测试类上,一定要写入@RunWith(SpringRunner.class)这个注解。如果不写,会报redisTemplate空指针异常。

执行完成之后,我们到Redis库中查看:

为什么存入进去的数据,是乱码的呢?而且,有一个name,是我们自己set的,乱码的这个是我们通过RedisTemplate插入的,我们来看看RedisTemplate源码

RedisTemplate需要设置序列化:

我们跟set源码,会发现,set是使用了value的序列化:

跟着源码,我们知道,默认使用的是jdk自带的序列化工具。

为了解决两个name(一个是正常的name,一个是乱码的name)问题,乱码的缺点:

1:可读性差

2:内存占用较大

我们可以自定义RedisTemplate的序列化方式,代码如下:

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.data.redis.connection.RedisConnectionFactory;

import org.springframework.data.redis.core.RedisTemplate;

import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;

import org.springframework.data.redis.serializer.RedisSerializer;

/**

* @author 凯哥Java

*/

@Configuration

public class RedisConfig {

@Bean

public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory){

// 创建RedisTemplate对象

RedisTemplate 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;

}

}

配置好自定义的之后,再次执行,就可以了。

通过自定义序列化之后,我们在Redis中存入一个user对象:

存入值,我们发现在Redis库中,对象中多了类全路径。

这样有个缺点:增加了额外的内存开销的。那么这个时候怎么办呢?

我们可以规定,在使用String类型的时候,存入对象的是,需要先将对象序列化,然后获取后,在将对象反序列即可。

本系列教程其他文章

Redis实战9-全局唯一ID

【图文教程】Redis主从集群安装

【图文教程】Centos单击安装Redis

大家好,我是凯哥Java(kaigejava),乐于分享技术文章,欢迎大家关注“凯哥Java”,及时了解更多。让我们一起学Java。也欢迎大家有事没事就来和凯哥聊聊~~~

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20230131A00VIF00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券