SpringBoot如何实现redis缓存菜单列表

因为系统的菜单列表是不轻易改变的,所以不需要在每次请求的时候都去查询数据库,所以,在第一次根据用户id请求到菜单列表的时候,可以把菜单列表的数据缓存在redis里,在第二次请求菜单列表的时候,可以直接在redis缓存里面获取数据,从而减少对数据库的操作,提升性能!首先,我们要下载redis到本地,然后在cmd终端打开redis的src目录,然后运行redis-server即可开启redis本地服务(mac),开启了redis服务后,就要在项目中配置相关的redis的代码了,首先在pom.xml中导入我们需要的包:

<
!-- spring data redis依赖-->

<
dependency>

<
groupId>
org.springframework.boot<
/groupId>

<
artifactId>
spring-boot-starter-data-redis<
/artifactId>

<
version>
2.5.1<
/version>

<
/dependency>

<
!-- commons-pool2对象池依赖-->

<
dependency>

<
groupId>
org.apache.commons<
/groupId>

<
artifactId>
commons-pool2<
/artifactId>

<
version>
2.9.0<
/version>

<
/dependency>

然后在config文件下创建ReidsConfig配置类文件:

/**
* redis配置类
*/
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<
String,Object>
redisTemplate(RedisConnectionFactory redisConnectionFactory){
RedisTemplate<
String,Object>
redisTemplate=new RedisTemplate<
>
();

//String类型key序列器
redisTemplate.setKeySerializer(new StringRedisSerializer());

//String类型value序列器
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());

//Hash类型key序列器
redisTemplate.setHashKeySerializer(new StringRedisSerializer());

//Hash类型value序列器
redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());

redisTemplate.setConnectionFactory(redisConnectionFactory);

return redisTemplate;

}
}

SpringBoot实现Redis缓存菜单列表,提高系统性能

这个配置文件主要是对String类型和hash类型的key和value做序列化操作;接下来就是使用redis了,在我们需要引入redis的根据用户id获取菜单列表接口的实现类中,判断下,如果菜单已经缓存在了redis中,则从redis中获取数据返回,否则去查询数据库获取数据:

/**
* <
p>

* 菜单表 服务实现类
* <
/p>

*
* @author hhk
* @since 2022-01-04
*/
@Service
public class MenuServiceImpl extends ServiceImpl<
MenuMapper, Menu>
implements IMenuService {

@Autowired
private MenuMapper menuMapper;

@Autowired
private RedisTemplate<
String,Object>
redisTemplate;

/**
* 根据用户id查询菜单列表
* @return
*/
@Override
public List<
Menu>
getMenuByAdminId() {
//getMenuByAdminId需要传用户id,这时候,要从security全局上下文中获取用户id,SecurityContextHolder.getContext().getAuthentication().getPrincipal()获取当前用户对象
Admin principal = (Admin) SecurityContextHolder.getContext().getAuthentication().getPrincipal();

//获取到用户id
Integer id = principal.getId();

ValueOperations<
String, Object>
valueOperations = redisTemplate.opsForValue();

List<
Menu>
menus=((List<
Menu>
) valueOperations.get("
menu_"
+ id));
//获取redis缓存中的菜单列表
if(CollectionUtils.isEmpty(menus)){//如果是空,则从数据库中获取
menus= menuMapper.getMenuByAdminId(id);

//将数据设置到redis中
valueOperations.set("
menu_"
+id,menus);

}
return menus;

}
}

概述:Redis是一款高性能内存数据库,可用于缓存数据、消息队列等应用场景。SpringBoot提供了对Redis的支持,可以很方便地将数据存入Redis中进行缓存。在现代Web应用中,菜单列表在页面中扮演着非常重要的角色。缓存菜单列表可以有效提高系统性能,本文介绍如何使用SpringBoot实现Redis缓存菜单列表。
一、菜单列表的生成和查询
在一般的Web应用中,菜单列表通常是从数据库中查询的。我们可以通过ORM框架(如MyBatis)来实现菜单列表的生成和查询。在生成菜单列表时,我们需要对菜单列表进行格式化,例如将菜单按照层级关系组织,以便后续显示。同时,在查询菜单时,我们需要考虑缓存的有效性,避免频繁地从数据库中查询菜单列表数据,造成不必要的开销。
二、使用Redis实现菜单列表数据缓存
Redis是一款高性能内存数据库,可用于缓存数据、消息队列等应用场景。在SpringBoot应用中,我们可以很方便地通过RedisTemplate来进行Redis的操作。我们可以将查询到的菜单列表数据存入Redis中进行缓存,并在查询时优先从Redis缓存中获取数据,提高系统的性能和响应速度。同时,我们可以设置缓存的时效,保证缓存的有效性和及时性。如果Redis缓存失效,我们可以及时从数据库中查询最新的菜单列表数据并存入Redis中。
三、菜单列表数据的更新和删除
在应用中,菜单列表数据可能会发生变化,例如增加、删除、修改菜单项等操作。我们需要实现菜单列表数据的更新和删除,以保证缓存数据的一致性和有效性。在更新或删除菜单列表数据时,我们需要同时更新Redis中的缓存数据。如果Redis中缓存的数据失效,则需要重新从数据库中查询数据并重新存入Redis中。
结论:
本文介绍了如何使用SpringBoot实现Redis缓存菜单列表,以提高系统的性能和响应速度。菜单列表在一般的Web应用中扮演着非常重要的角色,缓存菜单列表可以有效提高系统性能。在实现Redis缓存菜单列表时,我们需要注意缓存的有效性和时效性,及时更新和删除缓存数据,保证缓存数据的一致性和有效性。