Jedis基本用法
- 引入依赖
<dependency>
<groupId>redis.clents</groupId>
<artifactId>jedis</artifactId>
<version>3.7.0</version>
</dependency>
- 建立连接
private Jedis jedis;
@BeforEach
void setUp() {
// 建立连接
jedis = new Jedis("服务器地址",端口号);
// 设置密码
jedis.auth("密码");
// 选择库
jedis.select(库);
}
- 使用redis
@Test
void testString() {
// 存入数据
jedis.set("name", "虎哥");
// 取出数据
String name = jedis.get("name");
Systen.out.println(name);
}
@Test
void testHash() {
// 存入数据
jedis.hset("user:1", "name","Jack");
jedis.hset("user:1", "age","21");
// 取出数据
Map<String, String> map = jedis.hgetAll("user:1");
Systen.out.println(map);
}
- 释放连接
@AfterEach
void tearDown() {
if(jedis != null) {
jedis.close();
}
}
Jedis连接池
- 创建连接池
public class JedisConnectionFactory {
private static final JedisPool jedispool;
static {
// 配置连接池
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(8);
poolConfig.setMaxIdle(8);
poolConfig.setMinIdle(0);
poolConfig.setMaxWaitMillis(1000);
// 创建连接池对象
jedisPool = new JedosPool(poolconfig, "服务器地址", 端口号, 延迟, "密码");
}
public static Jedis getJedis() {
return jedisPool.getResource();
}
}
- 建立连接
private Jedis jedis;
@BeforEach
void setUp() {
// 建立连接
jedis = JedisConnectionFactory.getJedis();
// 设置密码
jedis.auth("密码");
// 选择库
jedis.select(库);
}
使用和释放同上
SpringDataRedis
SpringData是Spring中数据操作模块,包括对各种数据库的集成,其中对Redis的集成模块就叫做SpringDataRidis。
- 提供了对不同Redis客户端的整合(Lettuce和Jedis)
- 提供了RedisTemplate统一API来操作Redis
- 支持Redis的发布订阅模型
- 支持Redis哨兵和Redis集群
- 支持基于Lettuce的响应式编程
- 支持基于JDK、JSON、字符串、Spring对象的数据序列化及反序列化
- 支持基于Redis的JDKCollection实现
redisTemplate工具类
| API | 返回值类型 | 说明 |
|---|---|---|
| redisTemplate.opsForValue() | ValueOperations | 操作String类型数据 |
| redisTemplate.opsForHash() | HashOperations | 操作Hash类型数据 |
| redisTemplate.opsForList() | ListOperations | 操作List类型数据 |
| redisTemplate.opsForSet() | SetOperations | 操作Set类型数据 |
| redisTemplate.opsForZSet() | ZSetOperations | 操作SortedSet类型数据 |
| redisTemplate | 通用命令 |
SpringDataRedis的使用
- 引入依赖
<!--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>
- 配置文件
spring:
redis:
host: 主机地址
port: 端口号
password: 密码
lettuce:
pool:
max-active: 8 # 最大连接
max-idle: 8 # 最大空闲连接
min-idel: 0 # 最小空闲连接
max-wait: 100 # 连接等待时间
- 使用(存在序列化问题)
@SpringBootTest
public class RedisTest {
@Autowired
private RedisTemplate redisTemplate;
@Test
void testString(){
// 插入一条string类型数据
redisTemplate.opsForValue().set("name","李四");
// 读取一条string类型数据
Object name = redisTemplate.opsForValue().get("name");
System.out.println("name = "+name);
}
}
- StringRedisTemplate的使用
@Autowired
private StringRedisTemplate stringRedisTemplate;
// JSON工具
private static final ObjectMapper mapper = new ObjectMapper();
@Test
void testStringTemplate() throws JsonProcessingException {
// 准备对象
User user =new User("虎哥", 18);
// 手动序列化
String json = mapper.writeValueAsString(user);
//写入一条数据到redis
stringRedisTemplate.opsForValue().set("user:200", json);
// 读取数据
String val = stringRedisTemplate.opsForValue().get("user:20");
// 反序列化
User userl = mapper.readValue(val,User.class);
System.out.println("user1 = "+ user1);
}