在昨天复习存储系统和数据库的基础上,为了解决高并发情况下在短时间内完成大量读写操作的要求,redis技术逐步发展起来,成为数据库相关知识中不可或缺的重要板块.
老师在介绍Redis时提到了以下两点原因:
1.需要存储的数据,由原先的单表二维,逐步演化到分库分表,复杂性大幅提升
2.单机数据库向集群化的发展趋势,主要是因为处理数据量的快速增加和大量读写的操作压力
Redis的基本原理可以简单概括:
1.坚持数据从内存中读写
2.数据被保存到硬盘上防止重启导致数据丢失 其中增量数据保存AOF文件 全量数据为RDB文件
3.使用单线程处理所有操作命令
Redis是现在最受欢迎的NoSQL数据库之一,Redis作为一个使用ANSIC编写的开源、包含多种数据结构、支持网络、基于内存、可选持久性的键值对存储数据库,其具备如下特性: 1.基于内存运行,性能高效
2.支持分布式,理论上可以无限扩展·key-value存储系统
3.开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API
相比于其他的数据库类型,Redis具备的独特优点是:
1.C/S通讯模型。
2.单进程单线程模型。
3.丰富的数据类型·
4.操作具有原子性
5.持久化
6.高并发读写
7.支持lua脚本
在后面的案例介绍中,老师通过连续签到,计数,排行榜等实际应用让我们对Redis在开发中的实际作用更加明晰,不过使用Redis也要注意一些问题,否则可能会导致很严重的后果
1.击穿
概念:在Redis获取某一key时,由于key不存在,而必须向DB发起一次请求的行为,称为“Redis击穿”。
引发击穿的原因:
1)第一次访问
2)恶意访问不存在的key·Key过期
合理的规避方案:
1)服务器启动时,提前写入
2)规范key的命名,通过中间件拦截
3)对某些高频访问的Key,设置合理的TTL或永不过期
2.雪崩
概念:Redis缓存层由于某种原因宕机后,所有的请求会涌向存诸层,短时间司内的高并发请求可能会导致存储层挂机,称之为"Redis雪崩”。
合理的规避方案:
1)使用Redis集群
2)限流
对Redis的学习,我之前在java web 开发中只是停留在跟着文章下载应用解决问题的阶段,算是"知其然不知其所以然",Redis作为一种NOSQL类型的数据库,在大规模集群管理和快速读写等方面具有突出的性能,帮助我们开发过程更加顺利.