传统Web项目:
可能存在性能问题。数据库持久化数据主要是面向磁盘,磁盘的读/写比较慢,在一般管理系统没有问题。
互联网项目:
高并发,存在瞬间读/写大量数据的要求,如商品抢购、秒杀,一瞬间成千上万的请求,需在极短的时间内完成成千上万的读、写操作,易造成数据库系统瘫痪,导致服务宕机的严重生产问题。
应用场景: 一、缓存常用的数据; 二、需要高速读、写的场合
Redis技术:
基于内存的数据库,并提供一定的持久化功能。
性能优越:支持每秒十几万次的读、写操作;
支持集群、分布式、主从同步等配置,原则上可以无限扩展;
支持一定的事务能力,在高并发访问下保证数据安全和一致性特别有用;
性能优越来至于3个方面:
1、基于ANSI C语言编写,接近于汇编语言的机器语言,运行快速;
2、基于内存的读、写,自然比数据库磁盘读写快得多
3、只有6种数据类型,数据结构简单,规则较少,而数据库则是范式、完整性、规范性考虑的规则多,处理业务会比较复杂。
应用:
一、缓存
对数据库的读、写操作,一般是9:1~7:3,读操作远远多于写操作。
内存相对磁盘要贵的多。存储信息,需从3个方面考虑
- 业务数据常用吗?命中率如何?如果命中率很低,就没有必要写入缓存
- 该业务数据是读操作多,还是写操作多,如果写操作多,需要频繁写入数据库,也没有必要使用缓存
- 业务数据大小如何?如果要存储几百兆字节的文件 ,会给缓存带来很大的压力,有没有必要?
二、高速读、写场合
商品秒杀、抢红包、淘宝、京东的双十一活动,瞬间成千上万的请求到达服务器。
考虑异步写入数据库,高速读、写场合中单单使用Redis去应对,把这些需要高速读、写的数据,缓存到Redis,而在满足一定的条件下,触发这些缓存的数据写入数据库中。(秒杀商品为0,抢红包金额为0,触发事件将Redis缓存的数据以批量的形式一次性写入数据库,从而完成持久化工作)