Java EE互联网轻量级框架整合开发— —SSM框架(Spring MVC+Spring+MyBatis)和Redis实现
  • 推荐50
  • 收藏116
  • 浏览54.1K

Java EE互联网轻量级框架整合开发— —SSM框架(Spring MVC+Spring+MyBatis)和Redis实现

杨开振 , 周吉文 , 梁华辉 , 谭茂华 (作者) 

  • 书  号:978-7-121-31847-4
  • 出版日期:2017-07-11
  • 页  数:688
  • 开  本:16(185*260)
  • 出版状态:上市销售
  • 维护人:孙学瑛
纸质版 ¥119.00
随着移动互联网的兴起,以Java技术为后台的互联网技术占据了市场的主导地位,而在Java互联网后台开发中,SSM框架(Spring+Spring MVC+MyBatis)成为了主要架构,本书以此为焦点从入门到实际工作要求讲述了SSM框架的技术应用;与此同时,为了提高系统性能,NoSQL(尤其是Redis)在互联网系统中已经广泛使用,为了适应这个变化,本书通过Spring讲解了有关Redis的技术应用,这样更加贴近实际学习和工作的需要。
本书主要分为6个部分,第1部分对Java互联网的框架和主要涉及的模式做初步简介;第2部分讲述MyBatis技术;第3部分讲述Spring基础(包括IoC、AOP和数据库应用),重点讲解Spring数据库事务应用,以满足互联网企业的应用要求;第4部分,讲述Spring MVC框架;第5部分,通过Spring技术的应用,讲解Redis技术;第6部分,讲解SSM+Redis实践应用,通过互联网高并发如抢票、抢红包等场景,使用全注解的方式讲解SSM框架的整合,以及高并发与锁的应用和系统性能优化。
本书结合企业的实际需求,从原理到实践全面讲解SSM+Redis技术应用,无论你是Java程序员、SSM应用和研究人员,还是Redis应用人员、互联网开发人员,都可以从本书中收获知识。
详述MyBatis和Spring MVC,深入Spring数据库事务机制
通过Spring介绍Redis,以抢红包介绍高并发与锁
前言
随着移动互联网的兴起以及手机和平板电脑的普及,Java开发方向发生了很大变化,渐渐从管理系统走向了互联网系统。互联网系统的要求是大数据、高并发、高响应,而非管理系统的少数据、低并发和缓慢响应。为顺应技术发展趋势,2016年春季笔者写了一本关于MyBatis的著作《深入浅出MyBatis技术原理与实战》,作为国内第一本关于MyBatis技术的著作,该书受到了业内的广泛肯定。与此同时,电子工业出版社编辑汪达文给了我一个很好的建议,她建议写一本Java合集,这更贴近开发工作的实际需求。在移动互联网兴起的时代,Spring+Spring MVC+MyBatis(SSM)的Java组合已经成为时代的主流,伴随着NoSQL(缓存)的广泛应用,Redis成了主要的NoSQL工具,这些都是当今移动互联网最为流行的技术,于是笔者打算竭尽所能写一本SSM+Redis的合集,这就是本书创作的缘起。
移动互联网的新要求
? 高并发:举个例子,大公司企业ERP应用,有1万名员工使用,同时在线的用户可能只有数百人,而操作一个业务的同一个数据的可能只有几个人,其系统一般不会存在高并发的压力,使用传统程序和数据库完全可以应付。在互联网中一件热门的商品,比如新版小米手机,可能刚一上市就有成千上万的请求到达服务器,要求瞬间执行数以万计的数据操作,对性能要求高,操作不当容易造成网站瘫痪,引发网站的生存危机。
? 高响应:企业管理系统可以缓慢处理一些业务,而在高并发的互联网系统中,却不可以,按照互联网的要求一般以5秒为上限,超过5秒后响应,用户体验不好,从而影响用户忠诚度,而这些往往需要在高并发和大数据量的场景下实现。
? 数据一致性:由于高并发,多个线程对同一数据同时访问,需要保证数据的一致性,比如电商网站的金额、商品库存不能出错,还要保证其性能不能太差,这是在管理系统中不会出现的场景。
? 技术复杂化:在互联网中流行许多新技术,比如常见的NoSQL(Redis、MongoDB),又如MQ、RPC框架、ZooKeeper、大数据、分布式等技术。
为什么选择SSM框架+Redis的开发模式
首先,Struts2框架和Spring结合,多年来改变不了臃肿的老毛病,更为严重的是近年来多次出现的漏洞问题,使得其名声和使用率大降。这个时候Spring MVC框架成了新一代MVC框架的主流。它原生于Spring框架,可以无缝对接Spring的核心技术。与Struts不同,它的流程模块化,没有那么多臃肿的类,所以互联网应用的框架大部分使用的是Spring MVC。
其次,目前企业的Java应用中,Spring框架是必须的,Spring的核心是IoC(控制反转),它是一个大容器,方便组装和管理各类系统内外部资源,同时支持AOP(面向切面编程),这是对面向对象的补充,目前广泛用于日志和数据库事务控制,减少了大量的重复代码,使得程序更为清晰。因为Spring可以使模块解耦,控制对象之间的协作,所以Spring框架是目前Java最为流行的框架,几乎没有之一。
最后,对于Hibernate而言,笔者感慨最多,在需要存储过程或者复杂SQL时,它的映射关系几乎完全用不上,所有的问题都需要自己敲代码处理。作为全映射的框架,它的致命缺点是没有办法完全掌控数据库的SQL,而优化SQL是高并发、高响应系统的必然要求,这是互联网系统的普遍特性,所以Hibernate在互联网系统中被排除了。而另一个持久层框架MyBatis,它需要编写SQL、提供映射规则,不过它加入了动态SQL、自动映射、接口编程等功能使得它简单易用,同时支持SQL优化、动态绑定,并满足高并发和高响应的要求,所以它成为最流行的Java互联网持久框架。
NoSQL的成功在于,首先它是基于内存的,也就是数据放在内存中,而不是像数据库那样把数据放在磁盘上,而内存的读取速度是磁盘读取速度的几十倍到上百倍,所以NoSQL工具的速度远比数据库读取速度要快得多,满足了高响应的要求。即使NoSQL将数据放在磁盘中,它也是一种半结构化的数据格式,读取到解析的复杂度远比数据库要简单,这是因为数据库存储的是经过结构化、多范式等有复杂规则的数据,还原为内存结构的速度较慢。NoSQL在很大程度上满足了高并发、快速读/写和响应的要求,所以它也是Java互联网系统的利器。于是两种NoSQL的工具Redis和MongoDB流行起来,尤其是Redis已经成为了主要的NoSQL工具,本书会详细介绍它的常用方法。
基于以上原因,Spring+Spring MVC +MyBatis已经成了Java互联网时代的主流框架,而Redis缓存已经成了主流的NoSQL技术,笔者愿意将自己所掌握的知识分享给大家,为目前奋斗在SSM和Redis战线上的同行们奉献一本有价值的参考书,给一些准备进入这个行业的新手一定的帮助和指导。
本书的特点
全书具备五大特点。
? 实用性:全书内容来自于笔者多年互联网实践开发工作,理论结合实际应用。
? 理论性:突出基础理念,结合设计模式阐述框架的实现原理和应用理念,让读者知其然也知其所以然。
? 与时俱进:介绍最新框架技术,与当前互联网企业保持同步,比如全注解搭建SSM框架和Redis的应用,使得读者能够把最新技术应用到实际的工作中去。
? 突出热点和重点:着重介绍MyBatis实践应用,Spring数据库及事务应用,使用Spring介绍Redis实践应用、高并发和锁等互联网热门技术的热点和重点。
? 性能要求突出:这是移动互联网的要求,因为互联网面对大数据和高并发,体现互联网企业真实需要。
本书的内容安排
本书基于一线企业的实际应用要求,介绍了Java互联网最流行的框架技术,内容全面,以实际应用为导向,取舍明确,尤其对于技术的重点、难点解释得深入浅出,案例丰富,具体来说本书在体例上分为六大部分。
第1部分,首先讲解基础,让读者对SSM框架里的每一门技术的主要作用有所了解。然后介绍SSM框架的主要设计模式,它们有助于从底层深入理解框架。
第2部分,讲解MyBatis的基础应用,包括其主要组成、配置、映射器、动态SQL,并且深入MyBatis的底层运行原理和插件,详细讨论它们的高级应用。
第3部分,讲解Spring IoC和Spring AOP。掌握Spring如何通过IoC管理资源,然后通过设计模式讨论AOP的实现原理及其使用方法、实践。讨论Spring对数据库的支持,如何整合MyBatis,并且着重讨论了Spring数据库事务的相关内容,包括数据库隔离级别和传播行为的应用。
第4部分,讲解Spring MVC主要的流程、HandlerMapping的应用、控制器Controller、处理适配器(HandlerAdapter)、视图和视图解析器,然后讨论传递参数、注解、数据校验、消息转换和国际化等应用。
第5部分,掌握NoSQL的优势和应用方法,掌握Redis的常用数据类型和主要命令,以及一些基本的特性(比如事务)和用法,并教会你在Java和Spring环境中使用它。
第6部分,SSM框架+Redis的实战,通过全注解的方式搭建SSM框架,讲解Redis应用,并展现了互联网的核心问题——高并发和锁的问题。介绍了通过悲观锁、乐观锁和Redis Lua语言方案来解决高并发和锁的问题。
和读者的约定
为了方便论述,我们进行以下约定。
? import语句一般不出现在代码中,主要是为了缩减篇幅,可以使用IDE自动导入,除非是笔者认为有必要的场景、一些重要的实例它才会出现在代码中。
? 本书的例子大部分使用附录A中的数据模型,附录A中有基本的论述和对应的SQL语句。
? 对于普通的POJO,笔者大部分都会以“/**setter and getter**/”代替POJO的setter和getter方法,类似这样:

public class Role {
private Long id;
private String roleName;
private String note;
/**setter and getter**/
}

读者可以用IDE生成这些属性的setter和getter方法,这样做主要是为了节省篇幅,突出重点,也有利于读者的阅读。当然在一些特别重要的和使用广泛的场景,比如MyBatis入门、SSM框架整合等场景才会给出全量代码,以便读者进行编码学习。
? 在默认情况下,笔者使用互联网最常用的MySQL数据库,当使用其他数据库时,笔者会事先加以说明。
? 本书采用MyBatis的版本是3.4.1,Spring的版本是4.3.2,Redis的版本是3.2.4,在实践的过程中读者需要注意版本之间的差异。
本书的目标读者
阅读本书,读者要掌握以下知识:Java编程基础、Java EE基础(JSP、Servlet等)及数据库基础知识(本书以互联网数据库MySQL为主)。本书以互联网企业最广泛使用的技术框架为中心讲解Java EE技术,从入门讲解到实践,适合有志于从事Java EE开发的各类人员阅读,通过学习本书能够有效提高技术能力,并且将知识点应用到实际的企业工作当中去。本书也可以作为大中专院校计算机专业的教材,帮助在校学生学习企业实际应用,当然你也可以把本书当作一本工作手册进行查阅。
致谢
本书的成功出版,要感谢电子工业出版社的编辑们,没有他们的辛苦付出,绝对没有本书的成功出版,尤其是编辑汪达文,她启发我创作本书,并且在写作过程中给了我很多的建议和帮助,她为此付出了很多时间和精力。
在撰写本书的过程中,得到了我的师兄周吉文的大力支持,他统稿了全书,也帮助我编写了部分章节的内容;同时还得到梁华辉和谭茂华两位好友的协助,他们以过硬的技术为我排除了不少错误,同时也给了我很多很好的建议,并撰写了一些很好的实例;还要感谢我的姐姐杨坚,她撰写了部分内容,并对书中那些晦涩难懂的句子进行了润色,在此对他们的辛苦付出表示最诚挚的感谢。
互联网技术博大精深,涉及的技术门类特别多,甚至跨行业也特别频繁,技术更新较快。撰写本书时笔者也遇到了一些困难,涉及的知识十分广泛,对技术要求也更高,出错的概率也大大增加,正如没有完美的程序一样,也没有完美的书,一切都需要一个完善的过程,所以尊敬的读者,如果对本书有任何意见或建议,欢迎发送邮件(ykzhen2013@163.com),或者在博客(http://blog.csdn.net/ykzhen2015)上留言,以便于本书的修订。

杨开振
2017年6月

目录

目录
第1部分 入门和技术基础
第1章 认识SSM框架和Redis 2
1.1 Spring框架 2
1.1.1 Spring IoC简介 2
1.1.2 Spring AOP 4
1.2 MyBatis简介 6
1.2.1 Hibernate简介 7
1.2.2 MyBatis 8
1.2.3 Hibernate和MyBatis的区别 11
1.3 Spring MVC简介 11
1.4 最流行的NoSQL——Redis 12
1.5 SSM+Redis结构框图及概述 13
第2章 Java设计模式 15
2.1 Java反射技术 15
2.1.1 通过反射构建对象 15
2.1.2 反射方法 17
2.1.3 实例 18
2.2 动态代理模式和责任链模式 19
2.2.1 JDK动态代理 20
2.2.2 CGLIB动态代理 22
2.2.3 拦截器 24
2.2.4 责任链模式 28
2.3 观察者(Observer)模式 30
2.3.1 概述 31
2.3.2 实例 32
2.4 工厂模式和抽象工厂模式 35
2.4.1 普通工厂(Simple Factory)模式 35
2.4.2 抽象工厂(Abstract Factory)模式 36
2.5 建造者(Builder)模式 38
2.5.1 概述 38
2.5.2 Builder模式实例 39
2.6 总结 41
第2部分 互联网持久框架——MyBatis
第3章 认识MyBatis核心组件 44
3.1 持久层的概念和MyBatis的特点 44
3.2 准备MyBatis环境 45
3.3 MyBatis的核心组件 46
3.4 SqlSessionFactory(工厂接口) 47
3.4.1 使用XML构建SqlSessionFactory 48
3.4.2 使用代码创建SqlSessionFactory 50
3.5 SqlSession 50
3.6 映射器 51
3.6.1 用XML实现映射器 52
3.6.2 注解实现映射器 53
3.6.3 SqlSession发送SQL 54
3.6.4 用Mapper接口发送SQL 55
3.6.5 对比两种发送SQL方式 55
3.7 生命周期 55
3.7.1 SqlSessionFactoryBuilder 56
3.7.2 SqlSessionFactory 56
3.7.3 SqlSession 56
3.7.4 Mapper 56
3.8 实例 57
第4章 MyBatis配置 63
4.1 概述 63
4.2 properties属性 64
4.2.1 property子元素 64
4.2.2 使用properties文件 65
4.2.3 使用程序传递方式传递参数 66
4.2.4 总结 66
4.3 settings设置 66
4.4 typeAliases别名 69
4.4.1 系统定义别名 69
4.4.2 自定义别名 72
4.5 typeHandler类型转换器 72
4.5.1 系统定义的typeHandler 73
4.5.2 自定义typeHandler 78
4.5.3 枚举typeHandler 81
4.5.4 文件操作 86
4.6 ObjectFactory(对象工厂) 87
4.7 插件 89
4.8 environments(运行环境) 89
4.8.1 transactionManager(事务管理器) 90
4.8.2 environment数据源环境 92
4.9 databaseIdProvider数据库厂商标识 95
4.9.1 使用系统默认的databaseIdProvider 95
4.9.2 不使用系统规则 98
4.10 引入映射器的方法 99
第5章 映射器 102
5.1 概述 102
5.2 select元素——查询语句 103
5.2.1 简单的select元素的应用 104
5.2.2 自动映射和驼峰映射 105
5.2.3 传递多个参数 106
5.2.4 使用resultMap映射结果集 109
5.2.5 分页参数RowBounds 110
5.3 insert元素——插入语句 112
5.3.1 概述 112
5.3.2 简单的insert语句的应用 113
5.3.3 主键回填 113
5.3.4 自定义主键 114
5.4 update元素和delete元素 114
5.5 sql元素 115
5.6 参数 116
5.6.1 概述 116
5.6.2 存储过程参数支持 117
5.6.3 特殊字符串的替换和处理(#和$) 117
5.7 resultMap元素 118
5.7.1 resultMap元素的构成 118
5.7.2 使用map存储结果集 119
5.7.3 使用POJO存储结果集 119
5.8 级联 120
5.8.1 MyBatis中的级联 121
5.8.2 建立POJO 124
5.8.3 配置映射文件 127
5.8.4 N+1问题 133
5.8.5 延迟加载 133
5.8.6 另一种级联 137
5.8.7 多对多级联 140
5.9 缓存 143
5.9.1 一级缓存和二级缓存 144
5.9.2 缓存配置项、自定义和引用 147
5.10 存储过程 149
5.10.1 IN和OUT参数存储过程 150
5.10.2 游标的使用 152
第6章 动态SQL 155
6.1 概述 155
6.2 if元素 156
6.3 choose、when、otherwise元素 156
6.4 trim、where、set元素 157
6.5 foreach元素 159
6.6 用test的属性判断字符串 159
6.7 bind元素 160
第7章 MyBatis的解析和运行原理 162
7.1 构建SqlSessionFactory过程 163
7.1.1 构建Configuration 165
7.1.2 构建映射器的内部组成 165
7.1.3 构建SqlSessionFactory 167
7.2 SqlSession运行过程 168
7.2.1 映射器(Mapper)的动态代理 168
7.2.2 SqlSession下的四大对象 172
7.2.3 SqlSession运行总结 179
第8章 插件 181
8.1 插件接口 181
8.2 插件的初始化 182
8.3 插件的代理和反射设计 183
8.4 常用的工具类——MetaObject 186
8.5 插件开发过程和实例 187
8.5.1 确定需要拦截的签名 187
8.5.2 实现拦截方法 189
8.5.3 配置和运行 191
8.5.4 插件实例——分页插件 192
8.6 总结 205
第3部分 Spring基础
第9章 Spring IoC的概念 208
9.1 Spring的概述 208
9.2 Spring IoC概述 210
9.2.1 主动创建对象 211
9.2.2 被动创建对象 213
9.2.3 Spring IoC阐述 214
9.3 Spring IoC容器 215
9.3.1 Spring IoC容器的设计 215
9.3.2 Spring IoC容器的初始化和依赖注入 218
9.3.3 Spring Bean的生命周期 219
9.4 小结 223
第10章 装配Spring Bean 224
10.1 依赖注入的3种方式 224
10.1.1 构造器注入 224
10.1.2 使用setter注入 225
10.1.3 接口注入 226
10.2 装配Bean概述 227
10.3 通过XML配置装配Bean 228
10.3.1 装配简易值 228
10.3.2 装配集合 229
10.3.3 命名空间装配 233
10.4 通过注解装配Bean 235
10.4.1 使用@Component装配Bean 236
10.4.2 自动装配——@Autowired 239
10.4.3 自动装配的歧义性(@Primary和@Qualifier) 241
10.4.4 装载带有参数的构造方法类 244
10.4.5 使用@Bean装配Bean 245
10.4.6 注解自定义Bean的初始化和销毁方法 245
10.5 装配的混合使用 246
10.6 使用Profile 249
10.6.1 使用注解@Profile配置 249
10.6.2 使用XML定义Profile 250
10.6.3 启动Profile 252
10.7 加载属性(properties)文件 254
10.7.1 使用注解方式加载属性文件 254
10.7.2 使用XML方式加载属性文件 257
10.8 条件化装配Bean 258
10.9 Bean的作用域 259
10.10 使用Spring表达式(Spring EL) 261
10.10.1 Spring EL相关的类 261
10.10.2 Bean的属性和方法 264
10.10.3 使用类的静态常量和方法 265
10.10.4 Spring EL运算 265
第11章 面向切面编程 267
11.1 一个简单的约定游戏 267
11.1.1 约定规则 267
11.1.2 读者的代码 269
11.1.3 笔者的代码 271
11.2 Spring AOP的基本概念 274
11.2.1 AOP的概念和使用原因 274
11.2.2 面向切面编程的术语 278
11.2.3 Spring对AOP的支持 280
11.3 使用@AspectJ注解开发Spring AOP 280
11.3.1 选择切点 281
11.3.2 创建切面 281
11.3.3 连接点 283
11.3.4 测试AOP 285
11.3.5 环绕通知 287
11.3.6 织入 289
11.3.7 给通知传递参数 289
11.3.8 引入 290
11.4 使用XML配置开发Spring AOP 293
11.4.1 前置通知、后置通知、返回通知和异常通知 294
11.4.2 环绕通知 296
11.4.3 给通知传递参数 297
11.4.4 引入 298
11.5 经典Spring AOP应用程序 299
11.6 多个切面 301
11.7 小结 306

第12章 Spring和数据库编程 307
12.1 传统的JDBC代码的弊端 307
12.2 配置数据库资源 309
12.2.1 使用简单数据库配置 309
12.2.2 使用第三方数据库连接池 310
12.2.3 使用JNDI数据库连接池 310
12.3 JDBC代码失控的解决方案——jdbcTemplate 311
12.3.1 jdbcTemplate的增、删、查、改 312
12.3.2 执行多条SQL 314
12.3.3 jdbcTemplate的源码分析 315
12.4 MyBatis-Spring项目 317
12.4.1 配置SqlSessionFactoryBean 318
12.4.2 SqlSessionTemplate组件 322
12.4.3 配置MapperFactoryBean 324
12.4.4 配置MapperScannerConfigurer 324
12.4.5 测试Spring+MyBatis 327
第13章 深入Spring数据库事务管理 330
13.1 Spring数据库事务管理器的设计 331
13.1.1 配置事务管理器 333
13.1.2 用Java配置方式实现Spring数据库事务 334
13.2 编程式事务 336
13.3 声明式事务 337
13.3.1 Transactional的配置项 337
13.3.2 使用XML进行配置事务管理器 339
13.3.3 事务定义器 340
13.3.4 声明式事务的约定流程 341
13.4 数据库的相关知识 343
13.4.1 数据库事务ACID特性 343
13.4.2 丢失更新 343
13.4.3 隔离级别 344
13.5 选择隔离级别和传播行为 347
13.5.1 选择隔离级别 347
13.5.2 传播行为 348
13.6 在Spring+MyBatis组合中使用事务 350
13.7 @Transactional的自调用失效问题 358
13.8 典型错误用法的剖析 363
13.8.1 错误使用Service 363
13.8.2 过长时间占用事务 364
13.8.3 错误捕捉异常 366
第4部分 Spring MVC框架
第14章 Spring MVC的初始化和流程 370
14.1 MVC设计概述 370
14.1.1 Spring MVC的架构 372
14.1.2 Spring MVC组件与流程 372
14.1.3 Spring MVC入门的实例 374
14.2 Spring MVC初始化 378
14.2.1 初始化Spring IoC上下文 378
14.2.2 初始化映射请求上下文 379
14.2.3 使用注解配置方式初始化 386
14.3 Spring MVC开发流程详解 389
14.3.1 配置@RequestMapping 390
14.3.2 控制器的开发 391
14.3.3 视图渲染 396
14.4 小结 398
第15章 深入Spring MVC组件开发 399
15.1 控制器接收各类请求参数 399
15.1.1 接收普通请求参数 401
15.1.2 使用@RequestParam注解获取参数 402
15.1.3 使用URL传递参数 403
15.1.4 传递JSON参数 404
15.1.5 接收列表数据和表单序列化 406
15.2 重定向 409
15.3 保存并获取属性参数 412
15.3.1 注解@RequestAttribute 412
15.3.2 注解@SessionAttribute和注解@SessionAttributes 414
15.3.3 注解@CookieValue和注解@RequestHeader 417
15.4 拦截器 417
15.4.1 拦截器的定义 418
15.4.2 拦截器的执行流程 419
15.4.3 开发拦截器 419
15.4.4 多个拦截器执行的顺序 421
15.5 验证表单 424
15.5.1 使用JSR 303注解验证输入内容 425
15.5.2 使用验证器 429
15.6 数据模型 432
15.7 视图和视图解析器 434
15.7.1 视图 434
15.7.2 视图解析器 436
15.7.3 实例:Excel视图的使用 438
15.8 上传文件 441
15.8.1 MultipartResolver概述 442
15.8.2 提交上传文件表单 446
第16章 Spring MVC高级应用 449
16.1 Spring MVC的数据转换和格式化 449
16.1.1 HttpMessageConverter和JSON消息转换器 451
16.1.2 一对一转换器(Converter) 455
16.1.3 数组和集合转换器GenericConverter 458
16.1.4 使用格式化器(Formatter) 463
16.2 为控制器添加通知 466
16.3 处理异常 470
16.4 国际化 471
16.4.1 概述 471
16.4.2 MessageSource接口 473
16.4.3 CookieLocaleResolver和SessionLocaleResolver 475
16.4.4 国际化拦截器(LocaleChangeInterceptor) 477
16.4.5 开发国际化 477
第5部分 Redis应用
第17章 Redis概述 480
17.1 Redis在Java Web中的应用 481
17.1.1 缓存 481
17.1.2 高速读/写场合 482
17.2 Redis基本安装和使用 483
17.2.1 在Windows下安装Redis 483
17.2.2 在Linux下安装Redis 485
17.3 Redis的Java API 486
17.3.1 在Java程序中使用Redis 487
17.3.2 在Spring中使用Redis 488
17.4 简介Redis的6种数据类型 494
17.5 Redis和数据库的异同 495
第18章 Redis数据结构常用命令 496
18.1 Redis数据结构——字符串 497
18.2 Redis数据结构——哈希 502
18.3 Redis数据结构——链表(linked-list) 506
18.4 Redis数据结构——集合 513
18.5 Redis数据结构——有序集合 516
18.5.1 Redis基础命令 516
18.5.2 spring-data-redis对有序集合的封装 518
18.5.3 使用Spring操作有序集合 520
18.6 基数——HyperLogLog 522
18.7 小结 524
第19章 Redis的一些常用技术 525
19.1 Redis的基础事务 526
19.2 探索Redis事务回滚 528
19.3 使用watch命令监控事务 529
19.4 流水线(pipelined) 532
19.5 发布订阅 534
19.6 超时命令 538
19.7 使用Lua语言 540
19.7.1 执行输入Lua程序代码 541
19.7.2 执行Lua文件 544
19.8 小结 547
第20章 Redis配置 548
20.1 Redis基础配置文件 548
20.2 Redis备份(持久化) 549
20.3 Redis内存回收策略 552
20.4 复制 553
20.4.1 主从同步基础概念 553
20.4.2 Redis主从同步配置 554
20.4.3 Redis主从同步的过程 555
20.5 哨兵(Sentinel)模式 556
20.5.1 哨兵模式概述 557
20.5.2 搭建哨兵模式 558
20.5.3 在Java中使用哨兵模式 559
20.5.4 哨兵模式的其他配置项 563
第21章 Spring缓存机制和Redis的结合 565
21.1 Redis和数据库的结合 565
21.1.1 Redis和数据库读操作 566
21.1.2 Redis和数据库写操作 567
21.2 使用Spring缓存机制整合Redis 568
21.2.1 准备测试环境 568
21.2.2 Spring的缓存管理器 573
21.2.3 缓存注解简介 575
21.2.4 注解@Cacheable和@CachePut 576
21.2.5 注解@CacheEvict 580
21.2.6 不适用缓存的方法 581
21.2.7 自调用失效问题 582
21.3 RedisTemplate的实例 582
第6部分 SSM框架+Redis实践应用
第22章 高并发业务 586
22.1 互联系统应用架构基础分析 586
22.2 高并发系统的分析和设计 588
22.2.1 有效请求和无效请求 588
22.2.2 系统设计 590
22.2.3 数据库设计 591
22.2.4 动静分离技术 593
22.2.5 锁和高并发 594
22.3 搭建抢红包开发环境和超发现象 595
22.3.1 搭建Service层和DAO层 595
22.3.2 使用全注解搭建SSM开发环境 602
22.3.3 开发控制器和超发现象测试 609
22.4 悲观锁 611
22.5 乐观锁 614
22.5.1 CAS原理概述 614
22.5.2 ABA问题 615
22.5.3 乐观锁实现抢红包业务 616
22.5.4 乐观锁重入机制 618
22.6 使用Redis实现抢红包 621
22.6.1 使用注解方式配置Redis 621
22.6.2 数据存储设计 622
22.6.3 使用Redis实现抢红包 627
22.7 各类方式的优缺点 631
附录A 数据库表模型 633
附录B DispatcherServlet流程源码分析 637
附录C JSTL常用标签 648
附录D spring data redis项目分析 660

本书勘误

印次
  • 页码:70  •  行数:1  •  印次: 1  •  修订印次: 3

    如果需要使用对应类型的数组型,要看其是否能支持数

    佳翌 提交于 2017/8/2 23:07:34
    汪达文 确认于 2017/8/17 10:38:47
  • 页码:82  •  行数:6  •  印次: 1  •  修订印次: 3

    public SexEnum getSexById(int id)


    这段代码在源代码资源里没错但是书上印刷有错,少了static
    public static SexEnum getSexById(int id)

    佳翌 提交于 2017/8/4 6:26:36
    汪达文 确认于 2017/8/17 10:47:11
  • 页码:105  •  行数:18  •  印次: 1  •  修订印次: 3

    settting元素中有两个可以配置的选项


    在settings元素中有两个可以配置的选项

    佳翌 提交于 2017/8/4 22:15:35
    汪达文 确认于 2017/8/17 10:20:51
  • 页码:150  •  行数:5  •  印次: 1  •  修订印次: 3

    文中提到这里使用的是Oracle数据库,但是第5行又说在MySQL的命令行输入存储过程

    佳翌 提交于 2017/8/5 22:55:48
    汪达文 确认于 2017/8/17 10:48:02
  • 页码:166  •  行数:6  •  印次: 1  •  修订印次: 3

    包括许多我们配置的SQL,SQL的id,缓存信息,resultMap,parameterType,resultType,resultMap,languageDriver等重要配置内容
    resultMap重复了

    佳翌 提交于 2017/8/6 10:08:55
    汪达文 确认于 2017/8/17 10:18:33

读者评论

  • 视频链接怎么只有一个视频?

    yunfypumin发表于 2024/9/26 18:53:57
  • 视频下载链接已失效

    hihello发表于 2023/7/30 18:23:24
  • idea打开代码后乱码大家怎样解决啊,设置一通还是不管用啊

    suisuiex发表于 2022/8/24 15:59:40
  • ssm下载老断网啊

    胡杨发表于 2021/5/7 15:46:18
  • 吐槽一下,项目源码字符编码不是UTF-8就算了,竟然还不统一,同一个包下面的字符编码乱七八糟,这实在让人困扰…

    doudou发表于 2021/4/14 10:15:30
    • 兄弟,有没有解决?

      收刀入鞘发表于 2023/2/5 15:36:42

相关图书

Python一行流:像专家一样写代码

Christian Mayer (作者) 苏丹 (译者)

本书专注于从初学迈向进阶的Python编码技术:如何像专家一样写出优雅、准确、简洁高效的Python 单行代码;阅读任意一行Python 代码时,如何系统性地对...

¥89.00

剑指Offer(专项强化版):数据结构与算法名企面试题精讲

何海涛 (作者)

本书全面、系统地总结了在准备程序员面试过程中必备的数据结构与算法。本书首先详细讨论整数、数组、链表、字符串、哈希表、栈、队列、二叉树、堆和前缀树等常用的数据结构...

¥89.00

C++服务器开发精髓

张远龙 (作者)

本书从操作系统原理角度讲解进行C++服务器开发所需掌握的技术栈。全书总计9章,第1~2章讲解C++ 11/14/17新标准中的常用特性、新增类库,以及C++开发...

 

PHP编程(第4版)

Rasmus Lerdorf(拉斯马斯·勒多夫), Kevin Tatroe(凯文·塔特罗), Peter MacIntyre(彼得·麦金太尔) (作者) 卢涛 (译者)

PHP是一种被广泛使用的Web编程语言,它简单易用,而且与时俱进,不断进化,提升性能。本书基于PHP 7.4,深入介绍 PHP编程技术,涵盖了 PHP 所有基本...

¥109.00

深入理解Spring Cloud与实战

方剑 (作者)

本书共分10章,主要介绍Spring Cloud各个核心组件的设计原理,以及目前流行的Spring Cloud Alibaba和 Netflix组件,并且剖析S...

¥106.00

基于Kotlin的Spring Boot微服务实战

袁康 (作者)

本书介绍了Kotlin在Spring Boot微服务开发中的实践,并使用Kotlin作为开发语言,介绍了函数式编程思想、Kotlin的语法、Kotlin在常用中...

¥69.30