springboot中操作redis的步骤
环境搭建
1,在pom.xml文件中导入SpringbootDataReedis的maven坐标
xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2,配置redis数据源
在aoolication.yml文件中添加如下代码:
java
spring:
redis:
host: localhost
port: 6379
password: 123456
database: 10
解释说明:
database:指定使用Redis的哪个数据库,Redis服务启动后默认有16个数据库,编号分别是从0到15。
可以通过修改Redis配置文件来指定数据库的数量。
3,编写配置类,创建RedisTemplate对象、
java
@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;
}
}
解释说明:
当前配置类不是必须的,因为 Spring Boot 框架会自动装配 RedisTemplate 对象,但是默认的key序列化器为
JdkSerializationRedisSerializer,导致我们存到Redis中后的数据和原始数据有差别,故设置为
StringRedisSerializer序列化器。
4,通过
RedisTemplate对象操作Redis.可以在test下新建测试类
java
@SpringBootTest
public class SpringDataRedisTest {
@Autowired
private RedisTemplate redisTemplate;
@Test
public void testRedisTemplate(){
System.out.println(redisTemplate);
//string数据操作
ValueOperations valueOperations = redisTemplate.opsForValue();
//hash类型的数据操作
HashOperations hashOperations = redisTemplate.opsForHash();
//list类型的数据操作
ListOperations listOperations = redisTemplate.opsForList();
//set类型数据操作
SetOperations setOperations = redisTemplate.opsForSet();
//zset类型数据操作
ZSetOperations zSetOperations = redisTemplate.opsForZSet();
}
}
运行测试类:
说明RedisTemplate对象注入成功,并且通过该RedisTemplate对象获取操作5种数据类型相关对象。
上述环境搭建完毕后,接下来,我们就来具体对常见5种数据类型进行操作。
java
@Autowired
private RedisTemplate redisTemplate;
/*
* 测试String类型数据
* */
@Test
public void testString(){
//string类型的数据操作方法,对应的Redis操作命令为set和get
//set,get,setex,setnx
redisTemplate.opsForValue().set("test","123");
redisTemplate.opsForValue().get("test");
//setex方法 设置过期时间,单位为秒
redisTemplate.opsForValue().set("test","123",5, TimeUnit.SECONDS);
//setIfAbsent,只有在键不存在时才设置值,返回true表示成功设置了值,false表示没有设置
redisTemplate.opsForValue().setIfAbsent("test1","123");
redisTemplate.opsForValue().setIfAbsent("test1",2);
}
/**
* 操作哈希类型的数据
*/
@Test
public void testHash(){
//hset hget hdel hkeys hvals
HashOperations hashOperations = redisTemplate.opsForHash();
hashOperations.put("100","name","tom");
hashOperations.put("100","age","20");
String name = (String) hashOperations.get("100", "name");
System.out.println(name);
Set keys = hashOperations.keys("100");
System.out.println(keys);
List values = hashOperations.values("100");
System.out.println(values);
hashOperations.delete("100","age");
}
/**
* 操作列表类型的数据
*/
@Test
public void testList(){
//lpush lrange rpop llen
ListOperations listOperations = redisTemplate.opsForList();
//lpush命令向列表左侧插入元素,rpush命令向列表右侧插入元素
listOperations.leftPushAll("mylist","a","b","c");
listOperations.leftPush("mylist","d");
//lrange命令获取列表中指定区间的元素,0表示第一个元素,-1表示最后一个元素
List mylist = listOperations.range("mylist", 0, -1);
System.out.println(mylist);
//rpop命令从列表右侧弹出元素
listOperations.rightPop("mylist");
//llen命令获取列表的长度
Long size = listOperations.size("mylist");
System.out.println(size);
}
/**
* 操作集合类型的数据
*/
@Test
public void testSet(){
//sadd smembers scard sinter sunion srem
SetOperations setOperations = redisTemplate.opsForSet();
//sadd命令向集合中添加元素,smember命令获取集合中的所有元素
setOperations.add("set1","a","b","c","d");
setOperations.add("set2","a","b","x","y");
Set members = setOperations.members("set1");
System.out.println(members);
//scard命令获取集合中元素的数量
Long size = setOperations.size("set1");
System.out.println(size);
// sinter命令获取两个集合的交集,sunion命令获取两个集合的并集
Set intersect = setOperations.intersect("set1", "set2");
System.out.println(intersect);
// sunion命令获取两个集合的并集
Set union = setOperations.union("set1", "set2");
System.out.println(union);
// srem 命令从 集合中移除指定的元素。
setOperations.remove("set1","a","b");
}
/**
* 操作有序集合类型的数据
*/
@Test
public void testZset(){
//zadd zrange zincrby zrem
ZSetOperations zSetOperations = redisTemplate.opsForZSet();
//zadd 命令像有序集合中添加元素,
zSetOperations.add("zset1","a",10);
zSetOperations.add("zset1","b",12);
zSetOperations.add("zset1","c",9);
//zrange命令获取有序集合中指定区间的元素,0表示第一个元素,-1表示最后一个元素
zSetOperations.range("zset1",0,-1);
Set zset1 = zSetOperations.range("zset1", 0, -1);
System.out.println(zset1);
// zincrby命令为有序集合中的元素增加指定的分数值,并返回增加后的分数值
zSetOperations.incrementScore("zset1","c",10);
//zrem命令从有序集合中移除指定的元素
zSetOperations.remove("zset1","a","b");
}
/**
* 通用命令操作
*/
@Test
public void testCommon(){
//keys exists type del
//keys命令获取所有键,exists命令判断指定的键是否存在,type命令获取指定键的数据类型,del命令删除指定的键
Set keys = redisTemplate.keys("*");
System.out.println(keys);
Boolean name = redisTemplate.hasKey("name");
Boolean set1 = redisTemplate.hasKey("set1");
for (Object key : keys) {
DataType type = redisTemplate.type(key);
System.out.println(type.name());
}
redisTemplate.delete("mylist");
}
批注:测试之前启动redis,本地启动名命令:按Win + R键,输入cmd,然后按回车键。启动Redis服务器:输入以下命令来启动Redis服务器:redis-server。启动Redis客户端:在另一个命令提示符窗口中输入以下命令来启动Redis客户端:redis-cli
实在不行就去redis安装目录中找图片中的一项双击运行。