各位小伙伴们大家好,欢迎来到这个小扎扎的Redis 6专栏,在这个系列专栏中我对B站尚硅谷的Redis教程进行一个总结,鉴于 看到就是学到、学到就是赚到 精神,这波依然是血赚 ┗|`O′|┛
💡Redis知识点速览
- 🍖 NoSQL数据库引入
- 🥩 为什么要学NoSQL
- 🥩 web时代发展的问题及解决方案
- 🍖 初识NoSQL数据库
- 🥩 NoSQL数据库简介
- 🥩 初识Redis
🍖 NoSQL数据库引入
🥩 为什么要学NoSQL
回顾之前的java后端学习历程,我们可以发现以往学习的技术可以被大致分为以下两种类型:其一,解决功能性问题:Java、Jsp、RDBMS、Tomcat、HTML、Linux、JDBC、SVN,通过这几门技术的学习就可以实现基础的业务逻辑编写;其二,解决扩展性问题:Struts、Spring、SpringMVC、Hibernate、Mybatis,以上几种框架或者说是技术可以增加我们程序的可扩展性,在对功能进行更改的时候就会简化操作
当然,你可能会疑惑这些技术是不是就已经完全足够我们使用了,为什么还要学习Redis呢?那是因为,程序最终的功能是面向用户,但是用户群体肯定不止几个人而是一个很大的概念,当你的程序投入使用的时候也就代表着它要面临性能所带来的诸多问题。而以下技术就是用来解决性能问题:NoSQL、Java线程、Hadoop、Nginx、MQ、ElasticSearch
🥩 web时代发展的问题及解决方案
如何解决CPU及内存压力?
解决web 2.0 时代存在的CPU及内存压力问题,方案就是将原本的一台服务器采用分布式的方式部署在许多台服务器上,分布式部署需要在所有服务器之前使用负载均衡技术平均分配发送过来的所有请求,一般这个技术就是Nginx。但是分布式服务器就会存在一个关于session对象的问题,那就是如果同一个用户发送两次请求但是却被分配给了两个不同的服务器,那么这个时候如何正确读取到该用户的session对象就显得异常重要 上图就画出了分布式服务器的组件图,并给出了session存储的四个方案,其中NoSQL数据库存储session对象就是很好的一个解决方案,因为NoSQL中的数据都存储在内存中,数据读取速度很快且无需经过IO操作
如何解决IO压力?
我们可以对数据库和表中的数据进行水平切分、垂直切分、读写分离等操作,在破坏一定的业务逻辑的基础上提高数据的IO性能;或者将频繁查询的数据拿出来放到缓存数据库中,由此减少IO的读操作提高查询速度;再或者将一些特殊的数据拿出来进行文档数据库或者列式数据库等的存储。通过这些方式来减少IO的压力
🍖 初识NoSQL数据库
🥩 NoSQL数据库简介
NoSQL(Not Only SQL)意思是“不仅仅是SQL”,这一概念被用来泛指非关系型数据库(相对于关系型数据库的严格标准而言的一种概念)。NoSQL并不依赖业务逻辑方式进行存储,不遵循SQL标准,不支持ACID,且远超于SQL的性能
NoSQL数据库大致上可分为四种,而我们要学的Redis就是其中一种典型的键值对数据库
NoSQL数据库的适用场景
- 对数据高并发的读写
- 海量数据的读写
- 对数据高可扩展性的
NoSQL数据库不适用的场景
- 需要事务支持
- 基于sql的结构化查询存储,处理复杂的关系,需要即席查询(用户根据自己的需求灵活选择查询条件,系统能够根据用户的选择生成相应的统计报表)
- 用不着sql的和用了sql也不行的情况,请考虑用NoSql
🥩 初识Redis
Redis是一个开源的key-value存储系统,它和Memcached数据库类似,同样支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。
在此基础上,Redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中,区别的是Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
在初步认识过Redis之后,下一步就是要学习Redis的下载安装和使用了