MySQL语句查询数据库数据并添加到Redis缓存
自从工作到现在已经四个月有余了,一直想要分享一下近期的所思所想,记录一下自己的成长,但碍于时间问题,并没有实现。今天终于有时间啦,那我就分享一个最近在做的东西。
目录
需求
做法
问题与解决
需求
从MySQL数据库中多个关联的数据表中查询数据,并缓存到Redis中,并把数据传给前端展示。
做法
- 写sql查询语句:
做法1:一条查询语句将所有需要的字段查询出来,需要使用select查询多重嵌套,难度较大;
做法2:一条简单的查询语句将主表的所需字段查出来,再根据表中与其它表的关联字段使用对应表的DAO去查询其它表的数据。 - 缓存到Redis:
做法1:使用循环,然后将查询出来的数据一条条数据解析完成,并保存到Map中,使用RedisTemplate的opsForValue()的set方法缓存:
缺点:当数据量巨大时,缓存的操作需要很长时间。前端的网页是展示给人看到,对于查看网页的人来说,当等待时间超过2s以上相当影响用户体验。
优点:操作简单易懂,数据量较少时,并不影响用户体验。
做法2:将mysql查询得到的数据,整块存到缓存,再在前端解析数据:
缺点:数据量巨大时,一次性缓存的数据块过大,容易出现问题。
优点:数据只需一次缓存操作即可完成缓存,极大地降低时间复杂度,并且解析数据的操作和做法1是一样的,并不会增加解析数据难度。 - Controller类:
控制类的做法就不多赘述,根据前端需求做对应的接口配置。问题与解决
1.数据缓存和解析,存在性能问题,时间复杂度高:
解决方法:平时多敲代码,多和同事交流,多积累,有空时可以刷一刷leetcode题目。
2.数据解析时出现NullPointerException:
解决方法:过程中碰到空指针异常,经常在数据为空时,还使用某个函数或者方法。首先必须经过 " ! = null "的条件判断;再者碰到toString()的使用时,若不知道取得的数据是否为空时,可以使用" +" " "来转化成String类型,可以避免空指针异常。
3.总体缓存过期时间标识:
解决方法:碰到多个统一前缀的缓存数据,需要知道缓存的过期时间问题时,可以考虑增加一个缓存标识,用redisTemplate.opsForValue().set()增加一个缓存标识。
4.接口刷新频率限制:
解决方法:可以增加一个缓存标识,每次接收刷新请求时缓存一次刷新的时间,通过对比两次缓存的时间可以限制刷新频率。
MySQL语句查询数据库数据并添加到Redis缓存相关推荐
- vbs用mysql语句查询数据库_vbs脚本实现window环境下的mysql数据库的备份及删除早期备份...
On error resume next Dim oShell,admin,pass,user,db,path,name admin="root" pass="gsl&q ...
- mysql语句查询慢造成mysql卡死_MySQL数据库之一次MySQL慢查询导致的故障
本文主要向大家介绍了MySQL数据库之一次MySQL慢查询导致的故障 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 我们知道分析MySQL语句查询性能的方法除了使用EXPLAI ...
- mysql 最多查询数据库_mysql 查询全表某字段值最大的10条数据
展开全部 select * from 表 order by 要最大值的字段 desc limit 0,10 FILE: 在MySQL服务器上读写文件.62616964757a686964616fe59 ...
- Mysql 查询数据库数据量
Mysql查询数据库数据量 SELECTtable_name AS '表名',table_rows AS '记录数',TRUNCATE (data_length / 1024 / 1024, 2) A ...
- ajax连接mysql数据库查询数据_ajax动态查询数据库数据并显示在前台的方法
今天做了一个ajax动态查询数据库的小Demo,又重新学习了一下ajax的一些知识.在此和大家分享一下...... 啥都别说了,先上代码 Controller层 查询总用户数 @RequestMapp ...
- excel mysql 参数查询语句_如何用SQL语句查询Excel数据?
如何用SQL语句查询Excel数据? Q:如何用SQL语句查询Excel数据? A:下列语句可在SQL SERVER中查询Excel工作表中的数据. 2007和2010版本: SELECT*FROMO ...
- excel mysql 参数查询语句_如何用SQL语句查询Excel数据
Q:如何用SQL语句查询Excel数据? A:下列语句可在SQL SERVER中查询Excel工作表中的数据. 2007和2010版本: SELECT * FROM OpenDataSource( ' ...
- 一条SQL语句查询数据库中的所有表、存储过程、触发器
一条SQL语句查询数据库中的所有表.存储过程.触发器 (sysobjects表信息) 该条语句查询返回所有的用户表 select * from sysobjects where xtype='u' ...
- sqlite使用模糊查询数据库数据的三种方式
android应用开发中常常需要记录一下数据,而在查询的时候如何实现模糊查询呢?很少有文章来做这样的介绍,所以这里简单的介绍下三种sqlite的模糊查询方式,直接上代码把: package com.e ...
最新文章
- R语言-查看对象类型和长度
- 【POJ】1505 Copying Books
- 通话录音_iOS14,通话录音终于来了!
- 织梦自定义html文本,织梦自定义标签dede:sql根据自定义字段填的文章id获取相关文章...
- IDEA使用笔记(八)——自动生成 serialVersionUID 的设置
- wireshark抓包工具的使用及分析
- 兄弟3150cdn更换硒鼓_耗材知多点:一体式硒鼓及分离式硒鼓
- ios 添加条纹背景
- 魅族Flyme5系统内置原生铃声免费下载
- matlab2c使用c++实现matlab函数系列教程-floor函数
- 用c语言编写文本游戏,如何用C语言编写游戏.doc
- qpsk调制matlab仿真,QPSK调制解调仿真
- 过保金士顿SA400S37固态硬盘固件通病,不保存盘内数据如何救活?
- 联想服务器安装win10系统安装教程,联想win10企业版操作系统安装步骤详解
- fluent周期边界_在Fluent中采用TUI设置周期性边界的方法
- 华域php公司,华域智能DNS系统
- 宋丹丹晒年轻旧照 桃眼杏腮被赞美女
- 免费聚合文章dedeCMS采集脚本网页采集器
- 在工作中学习到了些什么?
- 时间类的12小时制输出
热门文章
- 【排序算法】图解直接插入排序(图解堪比Debug显示每次循环结果)
- 28岁程序员身家过亿退休,追寻诗和远方:去日本!
- Pandas 对DataFrame的缺失值NA值处理4种方法总结
- 只有两种直播:淘宝直播和其它直播
- linux speedtest-cli测速报错
- 如何找课题的综述文献
- nodejs+libreoffice 将word转成pdf
- 淘宝订单接口|订单插旗备注,淘宝开放平台最稳定的店铺订单接口
- MFC修改图标简单方法(包括exe图标,任务栏图标,应用程序运行左上角图标)
- java中j=j++和j=++j的理解