本篇文章是整理笔者在学习Redis时的入门篇,将探讨如下几点:mysql
关系型数据库是按关系模型建立的数据库,关系模型指"一对多,多对一,多对多",最终数据会持久化到磁盘上,其表明有MySQL,Oracle等redis
1. 二维表格对多维数据支持差sql
能够多表关联解决多维数据问题,但又会致使其可读性差,特别是视图,十几张表关联这种,还有查询速度变慢,SQL优化时间成本上升等问题
2. 高并发下读写性能低数据库
并发高的状况(上万次/s请求)易出现死锁,读写性能降低严重,关系型数据库能勉强应付高并发下的读操做,但硬盘IO很难支持高并发下写操做
3. 支撑容量有限缓存
社交类软件如:微博、微信、Facebook天天会产生海量数据,以上软件都拥有上亿的用户数量,其产生的数据天天不低于数十亿计,若使用关系型数据库在这里面进行查询...
4. 支撑容量有限安全
对数据库升级一般须要停机维护和数据迁移
非关系型数据库严格来讲并非数据库,而是许多数据结构存储方法的集合,好比Redis就是包含了String,Hash,List,Set,ZSet五种数据格式,每一个数据格式又提供了一套API用于CRUD
其表明有:Redis,HBase,MongoDB微信
一般实际项目开发中,为保证数据安全性、一致性、扩展性、高效性,都是关系型数据库与NoSQL数据库一块儿使用的网络
一般海量数据的持久化仍是用关系型数据库进行存储,再将热点数据存储在Redis中数据结构
Redis是非关系型数据库中的键值存储数据库,支持操做五种数据类型字符串string,哈希hash,列表list,集合set,有序集合zset,可用于数据库,缓存,消息代理多线程
(Redis的安装,及每种数据类型的使用与应用场景,会在以后的《应用篇》中进行详细的讲解)
1. 缓存与数据库双写一致性问题
2. 缓存雪崩、击穿问题
这两个问题一般在高并发项目中才会遇到,中小型传统软件企业并不常见 缓存雪崩:缓存同一时间大面积失效,新的请求直接访问到数据库,致使链接异常 缓存击穿:一般是黑客恶意请求缓存中不存在的数据,全部请求直接访问数据库,致使链接异常
3. 缓存并发竞争问题
(以上问题的解决方案将涉及到:过时策略,内存淘汰机制,主从,哨兵,集群,分布式锁等知识,将在以后的《进阶篇》中进行讲解)
笔者是使用的Redis 5.0.8进行学习和实践,对于初学者建议选择一个较新的稳定版本
目前Redis 6已经正式发布了:引入了多线程 IO 特性对性能提高至少是一倍以上,感兴趣的小伙伴能够自行探索
如有不足,敬请指正虚心若愚,求知若渴