SpringBoot-Redis操作填坑(目前只用到操作String和List)
1.电脑上下载Redis,并运行,这里不多描述
记得用Redis之前,实体类都要先实现 Serializable接口!!
2.这里推荐使用单元测试进行具体功能的实现测试(不要一开始就在controller或者service进行测试,那样报错不容易找出来)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
3.在单元测试类中写如下代码
①默认引入上面的包后,会自动创建一个test包,并创建一个根据项目名生成的测试类里面用来写测试用例,所有的test都需要写在该类下才能运行.
②并且引入上面的包后,SpringBoot会默认生成RedisTemplate<K,V>这个类可以直接使用
RedisTemplate中定义了5种数据结构操作
redisTemplate.opsForValue(); //操作字符串
redisTemplate.opsForHash(); //操作hash
redisTemplate.opsForList(); //操作list
redisTemplate.opsForSet(); //操作set
redisTemplate.opsForZSet(); //操作有序set
4.下面是操作List
@RunWith(SpringRunner.class)
@SpringBootTest
public class CampuscommunityApplicationTests {
@Autowired
TabService tabService;
@Resource(name="redisTemplate")
RedisTemplate<String,List> listRedisTemplate;
@Test
public void testList(){
List<Tab> tabList = (List<Tab>)listRedisTemplate.opsForList().rightPop("tabList");
if (null==tabList) {
//如果Redis没有找到这个对应的tabList这个键名,则从数据库查找,并将其放入Redis中,以便下次使用
tabList = tabService.getTabsByParentId(0);
listRedisTemplate.opsForList().rightPush("tabList",tabList);
System.out.println("从数据库查询得到tabList");
} else {
System.out.println("从Redis查询得到tabList");
}
System.out.println(tabList.toString());
}
}
注意这里因为我们用的是 RedisTemplate<String,List>
而RedisTemplate默认是RedisTemplate<String,String>
如果我们想要用我们自定义的类型而不是默认的String类型,我们需要用@Resource注解通过name(name的值也是默认的直接复制我写的就可以)找到那个bean并将其注入
而操作String类型时,因为RedisTemplate默认就是String类型,所以直接AutoWired就可以找到,下面的操作String就是直接AutoWired.
5.操作String
@RunWith(SpringRunner.class)
@SpringBootTest
public class CampuscommunityApplicationTests {
@Autowired
UserService userService;
@Autowired
RedisTemplate<String,String> stringRedisTemplate;
@Test
public void testString(){
String userStr = stringRedisTemplate.opsForValue().get("userStr");
if (null==userStr) {
//如果Redis没有找到这个对应的userStr这个键名,则从数据库查找,并将其放入Redis中,以便下次使用
userStr = (userService.getUserById(1)).toString();
stringRedisTemplate.opsForValue().set("userStr",userStr);
System.out.println("从数据库查询得到userStr");
} else {
System.out.println("从Redis查询得到userStr");
}
System.out.println(userStr);
}
6.完整代码
@RunWith(SpringRunner.class)
@SpringBootTest
public class CampuscommunityApplicationTests {
@Autowired
TabService tabService;
@Autowired
UserService userService;
@Resource(name="redisTemplate")
RedisTemplate<String,List> listRedisTemplate;
@Autowired
RedisTemplate<String,String> stringRedisTemplate;
@Test
public void testList(){
List<Tab> tabList = (List<Tab>)listRedisTemplate.opsForList().rightPop("tabList");
if (null==tabList) {
//如果Redis没有找到这个对应的tabList这个键名,则从数据库查找,并将其放入Redis中,以便下次使用
tabList = tabService.getTabsByParentId(0);
listRedisTemplate.opsForList().rightPush("tabList",tabList);
System.out.println("从数据库查询得到tabList");
} else {
System.out.println("从Redis查询得到tabList");
}
System.out.println(tabList.toString());
}
@Test
public void testString(){
String userStr = stringRedisTemplate.opsForValue().get("userStr");
if (null==userStr) {
//如果Redis没有找到这个对应的user这个键名,则从数据库查找,并将其放入Redis中,以便下次使用
userStr = (userService.getUserById(1)).toString();
stringRedisTemplate.opsForValue().set("userStr",userStr);
System.out.println("从数据库查询得到userStr");
} else {
System.out.println("从Redis查询得到userStr");
}
System.out.println(userStr);
}
}