文章目录
- 一、Redis 常用数据类型
- 二、Redis 常用操作命令
- 1. 字符串命令
- 2. 哈希命令
- 3. 列表命令
- 4. 集合命令
- 5. 有序集合命令
- 6. 通用命令
- 三、在 Java 中操作 Redis
- 1. 导入 maven 坐标
- 2. 配置 Redis 数据源
- 3. 编写配置类
- 四、在代码中的具体使用
一、Redis 常用数据类型
Redis 存储的是键值对结构的数据,其中 key 是字符串类型,value 有5种常用的数据类型:字符串 string、哈希 hash、列表 list、集合 set 以及有序集合 sorted set / zset。
二、Redis 常用操作命令
1. 字符串命令
① 设置 key 的过期时间:短信验证码一分钟后自动过期;
② key 不存在时设置 key 的值:分布式锁。
2. 哈希命令
哈希特别适合存储对象!
3. 列表命令
取出跟存入的顺序一致!
4. 集合命令
5. 有序集合命令
Redis 有序集合是 string 类型元素的集合,且不允许有重复成员,每个元素都会关联一个 double 类型的分数,通过这个分数对集合进行排序!
6. 通用命令
三、在 Java 中操作 Redis
1. 导入 maven 坐标
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2. 配置 Redis 数据源
3. 编写配置类
import lombok.extern.slf4j.Slf4j;
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.StringRedisSerializer;
@Configuration
@Slf4j
public class RedisConfiguration {
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
log.info("开始创建redis模板对象...");
RedisTemplate redisTemplate = new RedisTemplate();
//设置redis的连接工厂对象
redisTemplate.setConnectionFactory(redisConnectionFactory);
//设置redis key的序列化器
redisTemplate.setKeySerializer(new StringRedisSerializer());
return redisTemplate;
}
}
四、在代码中的具体使用
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.connection.DataType;
import org.springframework.data.redis.core.*;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
@SpringBootTest
public class SpringDataRedisTest {
@Autowired
private RedisTemplate redisTemplate;
/**
* 通过valueOperations对象就可以操作字符串类型的数据
*/
@Test
public void testRedisTemplate1() {
ValueOperations valueOperations = redisTemplate.opsForValue();
//插入数据
valueOperations.set("name", "栈老师不回家");
//读取数据
String name = (String) valueOperations.get("name");
//设置数据一分钟后过期,自动被清理,这里与redis原命令不同
valueOperations.set("code", "1234", 1, TimeUnit.MINUTES);
//只有当key不存在时设置其value值,这里也与redis命令不同
valueOperations.setIfAbsent("lock", "1");
}
/**
* 操作哈希类型
*/
@Test
public void testRedisTemplate2() {
HashOperations hashOperations = redisTemplate.opsForHash();
//插入数据
hashOperations.put("001", "age", "20");
//读取数据
String age = (String) hashOperations.get("001", "age");
//获得所有的key
Set keys = hashOperations.keys("001");
//获得所有的value
List values = hashOperations.values("001");
//删除一条数据
// hashOperations.delete("001", "age");
}
/**
* 通用命令操作
*/
@Test
public void testRedisTemplate3() {
//查找所有的key
Set keys = redisTemplate.keys("*");
//检查给定key是否存在
Boolean name = redisTemplate.hasKey("name");
//返回key所存储值的数据类型
DataType type = redisTemplate.type("name");
//删除key
// redisTemplate.delete("name");
}
}