1.概述
在Java Web开发中,使用数据库来进行数据的存储。
高并发、大数据量
例如:商品抢购的场景、主页访问量瞬间较大的情况,单一使用数据库来保存数据的系统会因为面向磁盘读/写速度比较慢的问题而存在性能弊端,数据库容易宕机。
2.NoSQL技术 —— 基于内存的数据库,并且提供一定的持久化功能
- Redis 支持每秒10w的读写操作、集群、分布式、主从同步等配置、支持一定的事务能力(保证了高并发场景下数据的安全和一致性)
- MongoDB
3.Redis在Java Web中的应用场景
-
存储缓存用的数据
-
需要高速读/写的场合使用它快速读/写
- 读操作的次数远超写操作
- 限于成本的原因,一般只使用Redis存储一些常用的和主要的数据
-
需要考虑:
- 业务数据常用吗?命中率如何?
- 该业务是读操作多?还是写操作多?写操作多的没必要使用缓存
- 业务数据大小如何
“关于使用内存存储数据,我知道谷歌好像就是把所有互联网的数据都存储在内存条的,所以才会有如此高质量、高效的搜索,但它毕竟是谷歌……”
高并发:天猫双11、抢红包、抢演唱会门票等
如果使用数据库来进行处理,轻则造成用户体验极差用户量流失,重则数据库瘫痪,服务宕机。
- 当一个请求到达服务器时,只是把业务数据在 Redis 上进行读写,而没有对数据库进行任何的操作,这样就能大大提高读写的速度,从而满足高速响应的需求;
- 但是这些缓存的数据仍然需要持久化,也就是存入数据库之中,所以在一个请求操作完 Redis 的读/写之后,会去判断该高速读/写的业务是否结束,这个判断通常会在秒杀商品为0,红包金额为0时成立,如果不成立,则不会操作数据库;如果成立,则触发事件将 Redis 的缓存的数据以批量的形式一次性写入数据库,从而完成持久化的工作。
4.在Java中使用Redis
想要在Java中使用Redis缓存,需要添加相关的Jar包依赖,打开Maven仓库的网站,导入工程即可。
Redis 只能支持六种数据类型(string/hash/list/set/zset/hyperloglog)的操作。
5.在Spring中使用Redis
6.结论
-
MySQL性能测试:每秒1000以下,还和引擎相关
-
Redis:10w请求不在话下