这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天
上一章简单记录了redis的一些基础操作,这一章主要记录如何用java语言操作redis,即Redis的JAVA客户端。
一.Jedis
1.开始使用
a.引入依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.7.0</version>
</dependency>
b.建立连接
private Jedis jedis;
@BeforeEach//单例测试的语法
void setUp(){
//建立连接
jedis = new Jedis("ip",port);
//设置密码
jedis.auth("password");
//选择库
jedis.select(0);
}
c.释放资源
@AfterEach
void tearDown(){
//释放资源
if (jedis != null) {
jedis.close();
}
}
2.Jedis连接池
Jedis本身线程不安全,且频繁地创建和销毁连接会有性能损耗,因此推荐使用Jedis连接池。
private static final JedisPool jedisPool;
static {
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
//最大连接
jedisPoolConfig.setMaxTotal(8);
//最大空闲连接
jedisPoolConfig.setMaxIdle(8);
//最小空闲连接
jedisPoolConfig.setMinIdle(0);
//设置最长等待时间,ms,默认-1(无限制等待)
jedisPoolConfig.setMaxWaitMillis(200);
jedisPool = new JedisPool(jedisPoolConfig,"127.0.0.1",6379,1000,"123456");
}
//获取Jedis对象
public static Jedis getJedis(){
return jedisPool.getResource();
}
}
二.SpringDataRedis
1.开始使用
a.环境依赖
<!-- Redis依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- 连接池依赖 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
b.配置文件
spring:
redis:
host: 127.0.0.1
port: 6379
password: root
lettuce:
pool:
max-active: 8 #最大连接数
max-idle: 8 #最大空闲连接
min-idle: 0 #最小空闲连接
max-wait: 100 #连接等待时间
c.注入RedisTemplate
@Autowired
private RedisTemplate redisTemplate;
2.有关序列化
存进去的key和value被当做java对象,默认采用jdk序列化的方式转化成redis可以识别的内容
a.引入Jackson依赖
<!-- Jackson -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.13.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.13.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.4</version>
</dependency>
b.config配置
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory connectionFactory){
//创建RedisTemplate对象
RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();
//设置连接工厂
redisTemplate.setConnectionFactory(connectionFactory);
//创建JSON序列化工具
Jackson2JsonRedisSerializer jsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
//设置key的序列化
redisTemplate.setKeySerializer(RedisSerializer.string());
redisTemplate.setHashKeySerializer(RedisSerializer.string());
//设置Value的序列化
redisTemplate.setValueSerializer(jsonRedisSerializer);
redisTemplate.setHashKeySerializer(jsonRedisSerializer);
//返回
return redisTemplate;
}
}
两个方案
- 方案一:如上,自定义RedisTemplate,但是会有多余的空间保存序列化的类
- 方案二:
- 使用StringRedisRTemplate
- 写入时手动把对象序列化成JSON
- 读出时手动把读取到的JSON反序列化成对象