在传统的 Java Web 项目中,使用数据库进行存储数据,但是有一些致命的弊端,这些弊端主要来自于性能方面。由于数据库持久化数据主要是面向磁盘,而磁盘的读/写比较慢,在一般管理系统中,由于不存在高并发,因此往往没有瞬间需要读/写大量数据的要求,这个时候使用数据库进行读/写时没有太大的问题的,但是在互联网中,往往存在大数据量的需求,比如,需要在极短的时间内完成成千上万次的读/写操作,这个时候往往不是数据库能够承受的,极其容易造成数据库系统瘫痪,导致服务宕机的严重生产问题。
为了克服这些问题,Java Web 项目往往就引入了 NoSQL 技术,NoSQL 工具也是一种简易的数据库,它主要是一种基于内存的数据库,并提供了一定的持久化功能。比如Redis和MongoDB。
Redis 的性能十分优越,可以支持每秒十几万次的读/写操作,其性能远超数据库,并且支持集群、分布式、主从同步等配置,原则上可以无限扩展,同时还支持一定的事务能力。
Redis 性能优越主要来自于3个方面:
- 基于ANSI C 语言编写,接近于汇编语言的机器语言,运行十分快速
- 基于内存的读/写。
- 数据库结构只有6种数据类型,数据结构比较简单,因此规则较少,而数据库则是范式,完整性、规范性需要考虑的规则比较多,处理业务会比较复杂。\
NoSQL为什么不能代替数据库:
- NoSQL 的数据主要存储在内存中,而数据库主要是磁盘。
- NoSQL 数据库结构比较简单,虽然能处理很多的问题,但是其功能毕竟有限,不如数据库的SQL语句强大,支持更为复杂的计算
- NoSQL 并不完全安全稳定,由于它基于内存,一旦停电或者机器故障数据就很容易丢失,其持久化能力也是有限的,而基于磁盘的数据库则不胡出现这样的问题
- NoSQL 其数据完整性、事务能力、安全性、可靠性以及可扩展性都远不及数据库。
Redis 在 Java Web 中的应用
一般而言 Redis 在 Java Web 应用中存在两个主要的场景:一个是缓存常用的数据,另一个是在需要高速读/写的场合使用它快速读写。
1.缓存
在对数据库的读/写操作中,读操作远超写操作,一般是9:1到7:3的比例,所以需要读的可能性比写的可能性多得多。
当发送SQL去数据进行读取时,数据库就会去磁盘把对应的数据索引回来,而索引磁盘是一个相对缓慢的过程。如果把数据直接放在运行在内存中的Redis服务器上,那么就不需要去读/写磁盘了,而是直接读取内存,显然速度会快得多,而且会极大减轻数据库的压力。
而使用内存进行存储数据开销也是比较大的,应该考虑在Redis中存储哪些数据,需要从3个方面进行考虑:
- 业务数据常用与否以及命中率大小。如果命中率很低,就没有必要写入缓存。
- 该业务数据是读操作多,还是写操作多,如果写操作多,频繁需要写入数据库,也没有必要使用缓存
- 如果要存储几百兆字节的文件,会给缓存带来很大的压力,没有必要。
(1)读操作流程
- 当第一次读取数据的时候,读取Redis的数据就会失败,此时会触发程序读取数据库,把数据读取出来,并且写入Redis
- 当第二次以及以后读取数据时,就直接读取Redis,读到数据后就结束了流程,这样速度就大大提高了。
(2)写操作流程
如果业务数据写操作次数远远大于读操作次数,那么没有必要使用 Redis。
2.高速读/写场合
高速读/写场合例如:秒杀商品、抢红包、抢票等。这类场合在一瞬间成千上万的请求就会达到服务器,如果使用的数据库,很容易造成数据库瘫痪。
解决办法是异步写入数据库,即在高速读/写的场合单单使用 Redis 去应对,把这些需要高速读/写的数据缓存到 Redis 中,而在满足一定的条件下,触发这些缓存的数据写入数据库中。
当一个请求到达服务器,只是把业务数据先在 Redis 读/写,而没有进行任何对数据库的操作。
由于一般缓存不能持久化,或者所持久化的数据不太规范,因此需要把这些业务数据存入数据库,所以在一个请求操作完 Redis 的读/写后,会去判断该高速读/写业务是否结束,这个判断的条件往往就是秒杀商品剩余个数为0,抢红包金额为0,如果不成立,则不会操作数据库;如果成立,则触发事件将 Redis 缓存的数据以批量的形式一次性写入数据库,从而完成持久化操作。
当然现实中这种需要高速响应的系统会更加复杂,要考虑高并发下的数据安全和一致性,有效请求和无效请求、事务一致性等诸多问题。
相关推荐
"第5单元 Redis概述与安装2"涵盖了Redis的发展历程、特点以及安装与使用的基本知识。Redis作为键值存储数据库,允许用户通过键(key)来设置和获取值(value)。这种数据结构简单,使得Redis在处理高并发读写需求时表现...
Redis 概述 Redis 是一个高性能的键值存储数据库,支持多种数据类型,包括字符串、散列、列表、集合、有序集合等。Redis 的应用场景非常广泛,包括缓存、任务列表、网站访问统计数据、过期处理、应用排行榜、分布式...
Redis概述** Redis作为一个内存数据库,其主要特点是数据持久化、支持多种数据结构(如字符串、哈希、列表、集合、有序集合)以及发布/订阅功能。由于Redis操作基于内存,因此它的读写速度非常快,这使得它成为高...
1. **Redis概述** - Redis(Remote Dictionary Server)是一种开源的、基于内存的数据结构存储系统,支持多种数据类型,如字符串、哈希、列表、集合、有序集合。 - Redis提供持久化功能,可以将内存中的数据定期...
【Redis概述】 Redis是一个高性能的键值对(key-value)数据库,它以内存中的数据结构存储数据,并且能够将数据持久化到磁盘。Redis以其快速的查询速度著称,官方测试表明其QPS(每秒查询次数)可以达到100,000+。...
Redis概述** Redis,全称Remote Dictionary Server,是一款开源的、基于键值对的数据存储系统。它以内存为主,可持久化到磁盘,支持多种数据结构如字符串、哈希、列表、集合和有序集合等。Redis因其高性能、低延迟...
一、Redis概述: 1. 数据类型:Redis支持多种数据类型,包括字符串(Strings)、哈希(Hashes)、列表(Lists)、集合(Sets)和有序集合(Sorted Sets)。这些数据结构为存储和处理不同类型的数据提供了灵活性。 2....
**Redis 概述** Redis 是一个高性能的键值存储系统,它被广泛应用于数据库、缓存和消息中间件等场景。作为一个开源项目,Redis 支持多种数据结构,如字符串、哈希、列表、集合、有序集合等,这使得它在处理复杂的...
Redis 概述 Redis 是一个开源的、基于内存的数据存储系统,可以用作数据库、缓存和消息队列等。Redis 的特点是高性能、高扩展性和高可靠性。它支持多种数据类型,包括字符串、列表、集合、有序集合等,并且提供了...
**Redis 概述** Redis(Remote Dictionary Server)是一款开源、高性能、无模式的键值对存储系统,由意大利开发者 Salvatore Sanfilippo 创建。它的设计目标是提供高速的数据读写和高可用性,广泛应用于缓存、消息...
Redis概述部分会详细介绍Redis的设计哲学、功能特性以及适用场景。Redis以键值对的形式存储数据,支持多种数据结构如字符串、哈希、列表、集合和有序集合,这使得它在处理各种复杂数据操作时表现出色。此外,Redis还...
#### 一、Redis概述 Redis是一个开源的、高性能的键值存储系统。它提供了一种灵活的方式来进行数据管理和存储,适用于多种应用场景,如缓存、消息队列等。与传统的键值存储系统Memcached相比,Redis支持更多的数据...
2.Redis概述安装 3.常用五大数据类型 4.Redis配置文件介绍 5.Redis的发布和订阅 6.Redis新数据类型 7.Redis_Jedis_测试 8.Redis_Jedis_实例 9.Redis与Spring Boot整合 10.Redis_事务_锁机制_秒杀 11.Redis_事务_秒杀...
一、Spring Data Redis概述 Spring Data Redis是Spring Framework的一个模块,它提供了与Redis交互的高级抽象。通过Spring Data Redis,开发者可以轻松地集成Redis,实现数据的持久化、缓存等功能。它支持Jedis和...
一、Redis概述 Redis是当前最流行的NoSQL数据库之一,它是一个开源的、基于内存的数据存储系统,可以用作数据库、消息队列、缓存等。Redis的主要特点是高性能、低延迟、支持事务、支持持久化和支持多种数据结构等。...
一、Redis概述 Redis,全称Remote Dictionary Server,由意大利开发者Antonio Salura创建,以其高性能、丰富的数据结构支持和易于使用而备受青睐。在4.0.0版本中,Redis提供了许多新特性和改进,以增强其功能和稳定...
**Redis概述** Redis(Remote Dictionary Server)是一种开源的、基于内存的数据结构存储系统,它可以用作数据库、缓存和消息中间件。Redis支持多种数据结构,如字符串、哈希、列表、集合、有序集合等,这使得它在...
一、Redis 概述 Redis 是一个开源的、基于内存的数据结构存储系统,它支持多种数据结构,例如 Strings、Hashes、Lists、Sets 等。Redis 的主要特点是高性能、低延迟、支持事务、支持主从复制等。 二、Redis 集群...
1. Redis 概述与安装: Redis 安装简单,可以通过源码编译或使用包管理器安装。启动Redis有前台和后台两种方式,后台启动更常见。Redis 可通过`redis-cli`命令行工具进行交互,提供一系列命令用于操作数据库。 2. ...
#### 一、Redis 概述与应用场景 ##### 1.1 NoSQL 数据库简介 - **定义**: NoSQL(Not Only SQL)泛指非关系型数据库,它们通常不使用传统的表格关系来存储数据。 - **特性**: NoSQL 数据库的设计目的是解决传统关系...