0

0

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

PHPz

PHPz

发布时间:2023-05-26 09:43:00

|

1920人浏览过

|

来源于亿速云

转载

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



  org.springframework.boot
  spring-boot-starter-data-redis
  2.5.1



  org.apache.commons
  commons-pool2
  2.9.0

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

/**
 * redis配置类
 */
@Configuration
public class RedisConfig {
    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
        RedisTemplate 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;
    }
}

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

MedPeer
MedPeer

AI驱动的一站式科研服务平台

下载
/**
 * 

* 菜单表 服务实现类 *

* * @author hhk * @since 2022-01-04 */ @Service public class MenuServiceImpl extends ServiceImpl implements IMenuService { @Autowired private MenuMapper menuMapper; @Autowired private RedisTemplate redisTemplate; /** * 根据用户id查询菜单列表 * @return */ @Override public List getMenuByAdminId() { //getMenuByAdminId需要传用户id,这时候,要从security全局上下文中获取用户id,SecurityContextHolder.getContext().getAuthentication().getPrincipal()获取当前用户对象 Admin principal = (Admin) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); //获取到用户id Integer id = principal.getId(); ValueOperations valueOperations = redisTemplate.opsForValue(); List menus=((List) valueOperations.get("menu_" + id));//获取redis缓存中的菜单列表 if(CollectionUtils.isEmpty(menus)){//如果是空,则从数据库中获取 menus= menuMapper.getMenuByAdminId(id); //将数据设置到redis中 valueOperations.set("menu_"+id,menus); } return menus; } }

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

313

2023.08.02

pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1852

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

2080

2024.08.01

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

925

2024.11.28

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

995

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

53

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

243

2025.12.29

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

957

2023.11.02

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

150

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
进程与SOCKET
进程与SOCKET

共6课时 | 0.3万人学习

Redis+MySQL数据库面试教程
Redis+MySQL数据库面试教程

共72课时 | 6.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号