Redis:
是nosql , key-value ,可持久化,分布式,内存,缓存的非关系型数据库
有人问你什么是Redis你就上面这句话,详细解释分为四部分解释:
1.nosql , key-value ,非关系型数据库
nosql:not only structured query language(不仅仅是支持结构化的查询语言)
这里就要谈到两个概念:
结构化数据和非结构化数据
一类相同特点的数据集合叫结构化数据,例如创建的student表
海量的数据指的都是非结构化数据,例如:大数据
------这两类数据化结构对应的数据存储也分为两类------
关系型数据库(oracle,mysql)和非关系型数据库(MangoDB,Redis)
关系型数据库存储的都是结构化数据
非关系型数据库存储的可以是结构化数据也可以是非结构化数据
------非关系型数据库存储非结构化数据是以key-value形式------
2.可持久化,内存
内存存储数据的缺点:
1.存的量少(解决方法:采用分布式和海量集群)
2.容易丢失,如果缓存中的数据由于内存断电丢失,会造成缓存的击穿和雪崩
一旦出现雪崩,整个系统将会进入瘫痪状态,所以需要一个能支持持久化能力的缓存技术
(雪崩/缓存击穿的概念:
Redis在之前占领市场时使用一种性能非常高的分布式缓存技术:memoryCache
但是这种技术不支持内存数据的持久化,容易出现由于系统故障造成的缓存雪崩
例如:海量数据的请求访问,双十一,如果数据的访问由于缓存的未命中,也就是这么多数据请求你缓存中没有或者由于内存数据丢失等原因,那么这些请求会涌入数据库,数据库承受不住这么多的请求就会导致集群宕机,海量的请求并不会消失,造成数据库宕机-重启-系统不可用
所以需要持久化的能力,保证内存数据丢失的时候,集群大部分节点的数据依然可以命中
memoryCache和Redis对比:
性能:差不多
可持久化:Redis支持memoryCache不支持
缓存的数据结构:Redis非常丰富(String,list,set,zset),memoryCache只支持String
)
所以如果Redis支持内存数据进行写入磁盘的操作,那么宕机时数据就能恢复,具有容灾能力.
3.缓存
Redis使用缓存功能解决系统性能问题
在SSM框架中,我们可以在数据库,持久层,业务层,控制层中都可以加缓存
数据库缓存:利用key-value结构记录缓存内容,同一个sql语句是一个key值,下次相同的执行(查询)语句,就使用缓存中的,不用再去封装resultSet集合,减少了数据磁盘的IO
持久层缓存:减少了连接数据库的次数,减少resultSet封装成对象的过程
控制层和业务层缓存:减少数据的传递次数
我们使用Redis在业务层引入Redis代码实现数据的读写
4.分布式结构
多节点的Redis集群搭建(数据分片)
(个人学习总结,转载注明出处,如有错误请及时指出,谢谢!)