精华内容
下载资源
问答
  • Java后端多级缓存写法
    2021-02-28 13:39:13

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

    1、前言

    在我们开发项目的过程中经常会遇到一些读多写少的接口,在这些接口中会有很大批量的查询操作,如果我们这些查询操作都需要查询数据库的话,会造成数据库承受不了,以及数据库的响应比较慢导致该接口无法在规定时间进行相应,所以我们要减少数据库的查询操作,使用多级缓存机制。

    2、写法

    //根据ID查询应用

    @Cacheable(value = "app", key = "#appId")

    public App getAppByAppId(Integer appId) {

    String redisKey = "app:" + appId;

    //查询Redis

    String jsonStr = redisTemplate.opsForValue().get(redisKey);

    if (jsonStr == null) {

    //查询数据库

    App app = appDao.selectByPrimaryKey(appId);

    String value = JSON.toJSONString(app);

    //写到Redis

    redisTemplate.opsForValue().set(redisKey, value,

    6 * 60 + new Random().nextInt(30), TimeUnit.SECONDS);

    return app;

    }

    return JSON.parseObject(jsonStr, new TypeReference() {

    });

    }

    在方法前面添加@Cacheable注解,将Ehcache通过注解形式绑定到该方法上,该方法返回的内容会直接保存到Ehcache中。如果该缓存,则不进入方法直接返回。

    进入方法中,查询Redis,如果Redis不存在,通过appDao的selectByPrimaryKey方法查询数据库,并通过redisTemplate.opsForValue().set()方法重新写到Redis中。通过JSON.parseObject()方法将json格式的内容转成App类,并返回。

    其中为了避免有缓存击穿问题,在redis的过期时间设置的时候,要加上一个随机数。

    更多相关内容
  • java后端缓存 And BaseMapper 缓存 @Slf4j @Component public class RetailerStatisticCacher { private LoadingCache<Pair<Long,String>, SettleStatisticDto> retailerStatisticCache; @...

    java后端缓存 And BaseMapper


    缓存

    @Slf4j
    @Component
    public class RetailerStatisticCacher {
    
        private LoadingCache<Pair<Long,String>, SettleStatisticDto> retailerStatisticCache;
    
        @RpcConsumer(check = "false")
        private SettleStatisticService settleStatisticService;
    
        @PostConstruct
        public void init(){
            retailerStatisticCache = CacheBuilder.newBuilder()
                    .expireAfterWrite(2, TimeUnit.MINUTES)
                    .maximumSize(5000)
                    .build(new CacheLoader<Pair<Long,String> , SettleStatisticDto>() {
                        @Override
                        public SettleStatisticDto load(Pair<Long,String> sort) throws Exception {
    
                                Response<SettleStatisticDto> retailerStatisticDto =
                                        settleStatisticService.retailerStatistic(sort.first,sort.second);
                                if (!retailerStatisticDto.isSuccess()){
                                    throw new ServiceException(retailerStatisticDto.getError());
                                }
                                return retailerStatisticDto.getResult();
                        }
                    });
        }
        /**
         * 根据 查找对应的信息
         */
        public SettleStatisticDto findStatisticStatistic(Long retailerId, String settleMonth) {
            return RespHelper.or500(settleStatisticService.retailerStatistic(retailerId,settleMonth));
    //        Pair<Long, String> packageIdAndAddressIdPair = Pair.of(retailerId, settleMonth);
    //        return retailerStatisticCache.getUnchecked(packageIdAndAddressIdPair);
        }
    
        /**
         * 缓存全部失效
         */
        public void invalidateAll() {
            this.retailerStatisticCache.invalidateAll();
        }
    

    手动查询

    @Mapper
    public interface HisenseO2oSettleNewRetailMapper extends BaseMapper<HisenseO2oSettleNewRetail> {
    
    }
    
    private HisenseO2oSettleNewRetailMapper hisenseO2oSettleNewRetailMapper;
    
    @Autowired
        public SettleStatisticServiceImpl(
                HisenseO2oSettleNewRetailMapper hisenseO2oSettleNewRetailMapper,
               ) {
            this.hisenseO2oSettleNewRetailMapper = hisenseO2oSettleNewRetailMapper;
        }
    
    
    
    public Response<SettleStatisticDto> retailerStatistic(Long retailerId, String settleMonth) {
                QueryWrapper<HisenseO2oSettleNewRetail> theMonthSaleCriteria = new QueryWrapper<HisenseO2oSettleNewRetail>()
                        .select("COALESCE(sum(total_fee),0) as total_fee")
                        .eq("shop_id", sellerId)
                        .eq("type",OrderSource.SHOP.getValue())
                        .in("fee_type",FeeType.PAYMENT_GOODS.getValue())
                        .ge("settle_month", settleMonth)
                        .lt("settle_status", RebateSettleStatus.ALREADY_SETTLE.value());
    
                HisenseO2oSettleNewRetail thisMonthSaleFee = hisenseO2oSettleNewRetailMapper.selectOne(theMonthSaleCriteria);
                .......
                .......
                .......
    
    展开全文
  • 后端请求缓存

    2017-03-01 10:27:02
    原创,高并发中用处非常大。JAVA版。其它版本原理类似。 实现原理: 通过缓存过滤器实现.do的url请求数据的缓存,这样同一url请求,可以不用访问数据库,直接从缓存中取数据。 ...后端请求后端缓存
  • 准确点来说,Java后端到底在做什么? 大家都知道 Java 是一门后端语言,后端指的就是服务端,服务端代码一般运行在服务器上,通常我们运行Java 程序的服务器都是 Linux 服务器。 这些服务器在互联网公司中一般放在...

    阅读本文大概需要 6 分钟。

    新手程序员通常会走入一个误区,就是认为学习了一门语言,就可以称为是某某语言工程师了。但事实上真的是这样吗?其实并非如此。

    今天我们就来聊一聊,Java 开发工程师到底开发的是什么东西。准确点来说,Java后端到底在做什么?

    大家都知道 Java 是一门后端语言,后端指的就是服务端,服务端代码一般运行在服务器上,通常我们运行Java 程序的服务器都是 Linux 服务器。

    这些服务器在互联网公司中一般放在一个叫做机房的地方里,于是像我们这类 Java 程序员的代码一般也运行在这些机房里的服务器中。

    Java 里有一个概念叫做虚拟机,你可以把它理解为一个安卓的模拟器,比如你在电脑上装了一个安卓模拟器,就可以通过它来运行安卓应用程序,比如装个 APP,手机游戏什么的。

    所以当你在电脑上安装了一个叫做 JDK 的东西时,电脑里就有了 JRE 也就是 Java 运行环境,有了这个运行环境,你就可以运行 Java 应用程序了。

    知道 Java 程序如何运行在计算机上之后,我们再来讲一讲平时学的一些 Java 基础知识,它们到底有什么用?

    其实平时这一些 Java 基础语法都仅仅是你写代码的一些基础知识,就相当于英语中的 26 个字母,常见的有基本类型变量、for 循环、if else 等等基本语法,掌握了这些基础知识之后,你就可以上手写一些很简单的代码了。

    除此之外,Java 还有一些比较特别的概念,比如面向对象的特性,其中有类、接口等概念。为什么 Java 要引入这些东西呢,其实就是想让使用者更好地进行设计、抽象和编程。

    对于新手来说,你不需要理解得特别的深刻,因为这些东西只有你在你真正写代码之后才能逐步去理解。

    说完基本知识之后,我想你也会好奇,Java里经常提到的一些集合类是干嘛的呢,因为在现实生活中有很多场景,需要用到集合类,比如说一个用户名列表,你要怎么存呢?

    你会用一个 List 来做对不对,所以集合类的作用就是让你在编程中更好的存储数据。

    事实上,集合类的概念最早是来源于数据结构的,因为计算机里有很多特殊的数据存储结构,比如文件树,比如链表和数组等结构,因此计算机理论把这些存储数据的模型抽象成一些常见的结构,统称为数据结构。

    那么,Java 中的并发编程又是做什么的呢,Java 中的多线程是为了更好地利用电脑中的CPU核心,通过并发编程,就可以提高程序并发的效率。

    但是并发编程的背后需要操作系统的支持,以及计算机硬件的支持,所以,如果你要完全地理解多线程,绝不仅仅是理解 Java 里的 Thread 或者是线程池就足够了,你还需要去理解操作系统,以及计算机组成原理。

    和并发编程类似,Java 里也有网络编程的概念,Java 里的网络编程和其他语言大同小异,其实也是基于 TCP/IP 协议实现的一套 API,通过网络编程,你就可以在程序中把你想传输的数据传输到网络的另一端,有了网络编程和并发编程之后,Java 程序员的能量已经很大了

    讲完这几点之后接下来再谈谈,我们通常说的 Java 后端技术到底是什么,就拿支付宝来举例吧,曾经的支付宝用户数并不多,一台服务器,一个数据库就可以支持所有的业务了。

    当支付宝的用户越来越多的时候,一台服务器无法同时满足海量用户的需求,于是开始出现了多台服务器,多台服务器组成了一个集群,用户可以通过负载均衡的方式访问这些服务器,每个用户可能会访问到不同的机器上,这样子就达到了分流的效果,服务器的压力就会减小。

    由于数据库需要保证数据的可靠性,万一某一台数据库挂了,并且没有备份的话,那么这个数据就无法访问了,这在大型系统中是不允许出现的,于是乎,就有了数据库的主从部署。

    但事实上,随着业务发展,数据库的压力也越来越大,主备部署并不能解决数据库访问性能的问题,于是乎我们需要进行分库分表,在数据库主备的基础上,我们会把一个数据量很大的表拆成多个表,并且把数据库请求分流到不同的数据上,比如说100个分库,100个分表,就相当于把一个数据表划分成10000个数据表。

    此时又出现一个问题,如果一个数据库有多个备库,并且当主库挂掉的时候需要进行主从切换时,主备数据库之间的数据就可能发生不一致,而这也是分布式理论研究的问题之一,因为比较复杂,我们这里就略过不讲。

    刚才说到了分布式技术,其实负载均衡、分库分表都是分布式技术的一种实现,如果你不想做分库分表,那还有什么办法能够减轻数据库访问的压力呢?于是缓存就出现了,缓存可以让服务器先把请求打到缓存上,由于缓存的数据一般在内存中,所以访问速度会非常快,这些请求无需经过数据库。

    随着业务发展,缓存的单点压力也会比较大,于是乎分布式缓存就出现了,通常来说,缓存难以保证数据的可靠性,因为它们的数据可能会丢失,同时缓存只能存储一部分的数据,并不能解决所有问题。

    所以当某些业务的请求量非常大的时候,光靠缓存也解决不了问题,此时我们还可以通过消息队列来帮我们解决大流量并发请求的问题。

    我们可以通过消息队列来存储一部分的请求消息,然后根据我们服务器处理请求的能力,把消息再逐步取出来,接着去把这些消息逐渐地进行处理,这样就可以很好的解决高并发的问题。当然,前提是消息队列要保证消息存储的可靠性,这也是大部分消息队列都会保证的能力。

     

    一口气讲了这么多,算是把 Java 后端的大概面貌介绍清楚了,除此之外还有很多东西没讲到,真要讲完的话一晚上也说不完。

    总体来说,Java 后端技术,说难不难说简单也不简单,我尽量把这些内容都讲的比较通俗易懂,事实上每项技术的背后都有特别多复杂的实现原理,当然,在你理解了 Java 后端技术的整体概念以后,相信对于你之后的学习会更有帮助。

    如果有哪里说错了,偷偷留言告诉我

     小伙伴们有兴趣想了解更多相关学习资料请点赞收藏+评论转发+关注我之后私信我,注意回复【000】即可获取更多免费资料!

     

    展开全文
  • Java后端实战项目推荐-尚医通

    千次阅读 2021-12-23 10:50:37
    3.1后端技术 Lombok Nginx:负载均衡 Redis:内存缓存 Mysql:关系型数据库 RabbitMQ:消息中间件 MyBatis-Plus:持久层框架 Swagger2:Api接口文档工具 HTTPClient: Http协议客户端 MongoDB:面向文档的NoSQL...

    嗨,大家好,我是代码界的小白,如果喜欢我的文章,可以给个关注、点赞和手操哦,加油!

    很多准备找工作的同学都有一个困扰,简历单薄,没有好的项目,担心简历被刷,今天开始后续会给大家推荐一些比较好的开源项目。

    虽然大家都知道github或者gitee上都有很多优秀的开源项目,但大多数没有视频教学,对于初学者或者小白来说是很难上手,总不能直接下载下来配置一下环境跑一下就算学习了吧,这显然是不能拿来参加面试的。【当然如果你有基础,建议到github找点开源的项目做做。】

    1.项目介绍

    该项目是真实存在的项目,本人在学习的过程中看到有网友说该项目就是北京市的预约挂号统一平台,于是就去网上搜了一下,结果还真是。网址:https://www.114yygh.com/

    总的来说,这个项目还是有一定的意义的,是一个不错的项目。但是项目里也有一些不足的地方,毕竟是免费的白嫖的,对初学者来说还是很好的选择。

    2.项目学习地址

    这里给大家推荐第一个有视频教学的项目,也是尚硅谷今天新推出的项目,在线医院预约挂号系统,尚硅谷的官方b站有教学视频,有文档,还是比较适合学习的。

    这里给大家贴出b站链接:https://www.bilibili.com/video/BV1V5411K7rT?spm_id_from=333.999.0.0

    这个项目我自己本人也是做过的,并且从头到尾跟着敲了一下后端模块的代码,前端的代码小部分是跟着敲的。这里也贴出我本人做完的本项目,已经放在了gitee上,欢迎大家下载学习。gitee地址:https://gitee.com/code-to-xiaobai/yygh_parent

    3.从此项目中我们可以学到什么?

    3.1后端技术

    • Lombok
    • Nginx:负载均衡
    • Redis:内存缓存
    • Mysql:关系型数据库
    • RabbitMQ:消息中间件
    • MyBatis-Plus:持久层框架
    • Swagger2:Api接口文档工具
    • HTTPClient: Http协议客户端
    • MongoDB:面向文档的NoSQL数据库
    • SpringBoot:简化新Spring应用的初始搭建以及开发过程
    • SpringCloud:基于Spring Boot实现的云原生应用开发工具,SpringCloud使用的技术:(SpringCloudGateway、Spring Cloud Alibaba Nacos、Spring Cloud Alibaba Sentinel、SpringCloud Task和SpringCloudFeign等)

    3.2前端技术

    • NPM:包管理器
    • Babel:转码器
    • Webpack:打包工具
    • Vue.js:web 界面的渐进式框架
    • Node.js: JavaScript 运行环境
    • Axios:Axios 是一个基于 promise 的 HTTP 库

    3.3其他技术

    • Docker:容器技术
    • Git:代码管理工具

    4.简历中如何写?

    这里先给大家一个两年工作经验的人写的,该描述来自网络。

    项目名称:名医汇预约挂号平台

    开发环境:IDEA+JDK1.8+ MySQL5.7

    技术选型:Sping+SpringBoot+SpringCloud+mysql+MybatisPlus+Redis+MongoDB +RabbitMQ+Vue+elementUI

    项目描述:名医汇预约挂号平台是近年来开展的一项便民就医服务,旨在缓解看病难、挂号难的就医难题,让患者能够随时随地轻松挂号!采用SpringCloud微服务架构和前后端分离技术,后台管理系统分为医院设置,数据字典,用户管理,订单管理,统计管理5个模块,前台用户系统分为:医院详情,用户登录,就诊人管理,预约挂号,就医提醒模块。

    责任描述

    1. 参与后台需求分析,功能实现的讨论;
    2. 医院设置模块,医院设置与医院列表的增删改查。
    3. 数据字典模块,对数据字典树形显示,excel导入,导出接口开发。
    4. 前台用户登录功能,手机验证码,微信扫描登录接口开发。
    5. 前台用户实名认证与就诊人管理的增删改查。
    6. 订单管理模块订单列表,详情的查看。

    技术描述

    1. 基于MyBatisPlus实现数据的增删改查;
    2. 通过redis配置类与Cacheable注解实现数据字典中数据的缓存,提高查询效率;
    3. 通过EasyExcel实现数据字典的导入导出;
    4. 基于SpringCloud中Feign组件实现远程调用,gateway配置网关;
    5. 基于MongDB实现在医院基本信息,科室信息,排班信息的存储,结合Springboot对数据进行查看功能的编码;
    6. 主要第三方API:阿里云短信,微信授权,阿里云OSS云存储;
    7. 使用swagger2进行接口测试。

    总体感觉还行,就是有些长了,可以挑几个项目中自己熟悉的模块写上去.

    这里提供一份其他网友的写法,仅供参加。

    5.总结

    这个商易通的项目整体还算可以,技术栈也是比较新比较全面的,主要以SpringBoot+SpringCloud+MySQL+Redis为基础,同时用到了前端的框架Vue,以及docker等。

    说几个该项目没有考虑到的点,虽然以微服务为基础,但里面貌似没有提到分布式锁、分布式事务,其次就是关于消息队列的使用也是不多,还有就是MongoDB在这个里面似乎是可有可无的。【个人看法】

    再次说明,毕竟是免费的白嫖的,还有讲解视频,总的还是很不错的,适合学习,学完这个后,有一定的基础后,可以考虑自己去找一些开源的比较成熟的项目来自己看看了。

    更多Java实战项目Java面试八股,可以关注我的个人公众号:代码界的小白

    展开全文
  • 后端技术 技术 说明 官网 SpringBoot 容器+MVC框架 https://spring.io/projects/spring-boot SpringSecurity 认证和授权框架 https://spring.io/projects/spring-security MyBatis ORM框架 ...
  • Java 后端国际化设计方案

    千次阅读 2021-01-27 15:47:31
    Java 后端国际化设计方案设计需求 设计需求 国际化配置集中到数据库中进行管理,包含前端部分国际化 最好可动态添加国际化的语种 好用易用 高效
  • Servlet技术是Java后端的重要技术之一,作为Java Web开发的核心组件,Servlet承担了Web MVC结构中的核心作用(功能导航)。传统的Model2结构(Servlet+JavaBean+JSP)虽然在目前已经很少使用了,但是Web开发的基本...
  • Java后端知识体系

    2021-06-06 09:38:06
    Java后端知识体系 1. Java 语言<Java核心技术> 1. 基础语法 2. 面向对象 3. 常用API 4. 异常处理 5. 集合 6. IO 7. 多线程 8. 网络编程 9. 泛型 10. 反射 11. 注解 2.JVM <深入理解Java虚拟机> 1. 类...
  • Java后端实际开发规范

    2021-12-21 12:11:06
    本文主要介绍Java后端在实际开发当中的一些规范,主要介绍如下几点规范 当然,那些命名规范,注释规范等,我这里就不在一一阐述了,因为那是最基本的规范 规范1:数据库—表的设计要有增量字段 比如user 用户表 ...
  • JAVA后端开发工程师个人简历模板

    千次阅读 2020-12-20 06:55:13
    求职目标:JAVA后端开发工程师姓名:张XX年龄:XX岁住址:广东省广州市电话:135XXXXXXXX邮箱:gy021@500d.me教育背景2010.10-2014.07 五百丁大学 软件工程(本科)主修课程:VB、C++、C#、JAVA程序设计、网页设计制作...
  • Java后端真实面试题大全(有详细答案)--常见/真题

    千次阅读 多人点赞 2021-11-09 00:06:42
    本文展示Java后端面试题,有详细答案。本文题目都是我近几年面试中遇到的真实题目,包含初级、中级、高级的题目。 本文题目来自于我大中小公司的几十场面试被问到的问题,涵盖了大中小公司的题目。 本文按类别划分...
  • 1.cookie将用户信息存到客户端浏览器当中,session将用户信息存到服务器中(如果采用Redis缓存技术效率更高) 2.cookie只能存ASCII码字符串,而session能存任何数据类型,所以,类型较为复杂的时候使用session。 ...
  • JAVA后端开发浅谈

    千次阅读 多人点赞 2020-02-28 16:00:40
    后端来讲,目前市场上的电子商务软件基本上可以分为两个阵营,即php阵营和Java阵营。两个阵营的开发基本上都是各自围绕着各自的开发语言(php/Java),选取最为兼容合适的框架结构和数据库,然后进行服务器端的...
  • Java后端防止频繁请求、重复提交

    千次阅读 2022-04-10 15:29:21
    Java后端防止频繁请求、重复提交 在客户端网络慢或者服务器响应慢时,用户有时是会频繁刷新页面或重复提交表单的,这样是会给服务器造成不小的负担的,同时在添加数据时有可能造成不必要的麻烦。所以我们在后端也有...
  • arc-Phabricator:代码版本管理程序 redis:用于缓存数据。 mysql:项目数据存储。 kafka:消息管理程序。(还不太熟悉) mongoDB:存储一些额外信息。 环境的配置(重点) 拿java来举例:你需要配置JavaHome,告诉...
  • 最全Java后端技术栈

    千次阅读 2021-05-24 12:17:14
    最近很多伙伴留言,说我只发了2021Java后端的路线,没有发都需要学习哪些技术。为此,我特地总结了一份Java后端开发需要的技术栈 技术 构建工具 Maven:http://maven.apache.org/ Gradle:https://gradle.org/ ...
  • Java后端常见面试题总结

    千次阅读 多人点赞 2020-07-19 11:42:00
    * FileName: Java后端面试总结 * Author: Marlon * Email: gatesma@foxmail.com * Date: 2020/2/18 * Description: */ 文章目录面试总结(一)Java基础1. wait和sleep的区别2. synchronized底层原理 是可重入...
  • 友盟消息推送Java后端

    2019-01-23 17:50:58
    友盟消息推送Java后端,简单集成于springboot,推送次数限制用redis缓存
  • 本篇文章主要介绍了Java中LocalCache本地缓存实现代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • Java后端学习路线图,你真的只需要这一张!

    万次阅读 多人点赞 2018-10-10 17:19:14
    所谓不求最好,但求最全,学习Java后端的同学完全可以参考这张图进行学习路线安排。 当然,有一些知识点是可选的,并不是说上面有的你都要会啦。我在复习秋招的过程中就是基于此图进行复习的,感觉效果还是不错的。...
  • Java后端实现验证码

    2020-12-01 20:20:45
    // 网站存在缓存 不让浏览器缓存 resp.setDateHeader("expires", -1); resp.setHeader("cache-Control", "no-cache"); resp.setHeader("Pragma", "no-cache"); // 把图片写给浏览器 boolean write = ImageIO.write...
  • 3.4 外置缓存 对于高并发的架构,外置缓存不可或缺,其中最最最常见的就是 Redis。 之所以大家都采用 Redis 做外置缓存,原因有三点: Redis 本身性能非常好。 Redis 有很多数据结构去适配不同的业务缓存需求。 ...
  • 【2021Java后端面试题整理】Java基础

    千次阅读 2021-03-30 19:34:42
    Java基础 1. 面向对象和面向过程的区别 面向对象的设计思想是将需要解决的问题分解成一个个对象,这一个个对象可以用来描述在完成这件事中扮演的具体角色和行为。 面向过程的设计思想是将需要解决的问题拆分成一个个...
  • java 后端允许跨域

    2020-08-30 03:05:28
    import java.io.IOException; /** * @author LiaoShengQiu */ @Component public class CorsFilter implements Filter { @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain ...
  • 小白自学Java后端学习计划(附带学习视频)

    千次阅读 多人点赞 2020-03-08 09:15:05
    注意:对于Java基础,其中集合和io是初学Java后端的时候最常用的,特别是集合。对于多线程、并发、反射和网络编程,初学后端的时候基本用不到,因为你初学的时候不会涉及到这么深的技术,当然不代表不需要会,如果你...
  • 前言 SQL 语句执行慢的原因是面试中... oDB、Cassandra、设计模式、负载均衡、数据库、一致性算法、JAVA算法、数据结构、加密算法、分布式缓存、Hadoop、Spark、Storm、YARN、机器学习、云计算,用来查漏补缺最好不过。
  • Java后端面试总结

    千次阅读 2020-12-20 12:56:49
    缓存击穿、缓存穿透、缓存雪崩 缓存击穿: 定义:大量并发请求在缓存服务器中未命中,转去数据库了,给数据库带来了访问压力 原因:缓存服务器,key过期了 解决方案: 1.根据业务场景,尝试设置热点数据永不过期。 2...
  • java后端使用 redis

    2022-03-30 15:45:45
    java使用redis

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 105,247
精华内容 42,098
关键字:

java 后端缓存

java 订阅