Redis深度剖析系列【二次重构】

一. Redis整体介绍

1. NOSQL介绍

1.什么是NOSQL

 NoSQL(NoSQL = Not Only SQL),意即“不仅仅是SQL”,是一项全新的数据库理念,泛指非关系型的数据库。

 随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。

2. NOSQL和关系型数据库比较

优点:

 1)成本:nosql数据库简单易部署,基本都是开源软件,不需要像使用oracle那样花费大量成本购买使用,相比关系型数据库价格便宜。

 2)查询速度:nosql数据库将数据存储于缓存之中,关系型数据库将数据存储在硬盘中,自然查询速度远不及nosql数据库。

 3)存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,所以可以存储基础类型以及对象或者是集合等各种格式,而数据库则只支持基础类型。

 4)扩展性:关系型数据库有类似join这样的多表查询机制的限制导致扩展很艰难。

缺点:

 1)维护的工具和资料有限,因为nosql是属于新的技术,不能和关系型数据库10几年的技术同日而语。

 2)不提供对sql的支持,如果不支持sql这样的工业标准,将产生一定用户的学习和使用成本。

 3)不提供关系型数据库对事务的处理。

3. 非关系型数据库的优势

 1)性能NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高。

 2)可扩展性同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。

4. 关系型数据库的优势

 1)复杂查询可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询。

 2)事务支持使得对于安全性能很高的数据访问要求得以实现。对于这两类数据库,对方的优势就是自己的弱势,反之亦然。

5. 总结

 关系型数据库与NoSQL数据库并非对立而是互补的关系,即通常情况下使用关系型数据库,在适合使用NoSQL的时候使用NoSQL数据库,让NoSQL数据库对关系型数据库的不足进行弥补。一般会将数据存储在关系型数据库中,在nosql数据库中备份存储关系型数据库的数据

6.主流的NOSQL产品

(1). 键值(Key-Value)存储数据库

 相关产品: Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB

 典型应用: 内容缓存,主要用于处理大量数据的高访问负载。

 数据模型: 一系列键值对

 优势: 快速查询

 劣势: 存储的数据缺少结构化

(2). 列存储数据库

 相关产品:Cassandra, HBase, Riak

 典型应用:分布式的文件系统

 数据模型:以列簇式存储,将同一列数据存在一起

 优势:查找速度快,可扩展性强,更容易进行分布式扩展

 劣势:功能相对局限

(3). 文档型数据库

 相关产品:CouchDB、MongoDB

 典型应用:Web应用(与Key-Value类似,Value是结构化的)

 数据模型: 一系列键值对

 优势:数据结构要求不严格

 劣势: 查询性能不高,而且缺乏统一的查询语法

(4). 图形(Graph)数据库

 相关数据库:Neo4J、InfoGrid、Infinite Graph

 典型应用:社交网络

 数据模型:图结构

 优势:利用图结构相关算法。

 劣势:需要对整个图做计算才能得出结果,不容易做分布式的集群方案
View Code

2. 什么是Redis

  Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication)LUA脚本(Lua scripting), LRU驱动事件(LRU eviction)事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)

  Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方提供测试数据,50个并发执行100000个请求,读的速度是110000次/s,写的速度是81000次/s。(这是旧测试结果,现在redis6.0多线程机制速度更快)

3. Redis版本变迁

 参考:https://blog.csdn.net/qq_34206560/article/details/90902924

    https://help.aliyun.com/document_detail/164235.html?spm=a2c4g.11186623.6.611.23f0adb4rcoSCR

4. redis核心功能

(1). 数据类型

(2). pub/sub-发布订阅

(3). PipeLine-管道

(4). 事务

(5). Lua

(6). 数据持久化

(7). 缓存淘汰策略

(8). 分布式锁

(9). 主从→哨兵→cluster

(10). 布隆过滤器

5. 热门知识点

(1). redis为什么这么快?

(2). 什么是缓存雪崩、击穿、穿透?

(3). 如何解决双写一致性?

(4). redis和memcached比较?

(5). 主从数据同步机制的原理?

(6). redis常见的阻塞原因有哪些?

(7). hot key造成集群访问量倾斜如何解决?

(8). bagsave的原理是什么?

。。。。。等等

6. Redis客户端

(1) .Net的3个程序集

 a. StackExchange.Redis:免费.【推荐】 (目前最新版本:2.2.4),里面的每类方法基本上都有对应的异步方法。 (https://github.com/StackExchange/StackExchange.Redis)

 PS:该程序集一直饱受争议,旧版本timeout现象非常严重,在2.x版本后使用异步方法得到了改进。包括博客园2020.10月-11月的翻车时间,是因为使用了扩展程序集StackExchange.Redis.Extensions 】导致的。(吃瓜群众可以前去观看:https://www.cnblogs.com/cmt/p/14008145.html

 b. ServiceStack.Redis:收费(1小时3600次请求限制),但可以破解,自行百度。

 c. CSRedisCore: 免费,性能比StackExchange高。(https://github.com/2881099/csredis)   【目前强烈推荐】

 d. FreeRedis:免费,是CSRedisCore作者新维护的一个开源项目 (https://github.com/2881099/FreeRedis)

(2).可视化客户端程序:RedisDesktopManager

7. 各种地址

 官网:https://redis.io/ 

 官网-中文:http://www.redis.cn/

 Linux下载地址:https://download.redis.io/releases/

 Windows下载地址:https://github.com/MicrosoftArchive/redis/tags

 菜鸟教程:https://www.runoob.com/redis/redis-tutorial.html

 Redis命令大全和官方翻译:http://doc.redisfans.com/index.html   (推荐)

 

二. 系列章节

 

新版目录:

          第一节:Redis的安装(Linux、docker、win)和配置文件详解

          第二节:Redis数据类型、使用场景、常用指令剖析

          第三节:Redis缓存雪崩、击穿、穿透、双写一致性、并发竞争、热点key重建优化、BigKey的优化 等解决方案

          第四节:Redis数据持久化机制(备份恢复)、缓存淘汰策略、主从同步原理、常见规范与优化详解

          第五节:Redis架构演变之主从、Sentinel哨兵、Cluster(通信、分片、路由等机制)

          第六节:Redis Cluster搭建详解和集群运维(节点、槽位等)

          第八节: Redis事务、pub/sub、PipeLine-管道、benchmark性能测试详解

          第九节:Redis的Bloom Filter原理、实操、以及应用场景(缓存穿透、黑名单校验等)详解

          第十节:Redis 脚本、Lua语法学习、以及秒杀案例脚本分析

          第十一节:Redis6.0新特性、剖析线程模型(单线程和多线程)

          第十二节:Redis面试专题总结版(持续更新)

          第十三节:基于StackExchange.Redis程序集调用redis各个功能详解(可参考旧版目录的调用-不单独整理)

          第十四节:基于CSRedisCore程序集调用redis各个功能详解

          第十五节:Redis分布式锁剖析和几种客户端的实现

          第十六节:基于Canal实现MySQL到Redis缓存数据同步

          第x节:

          第x节:

          第x节:

          第x节:

 

旧版目录(内容仅供参考,不再维护):

          第一节: String类型和Hash类型的介绍和案例应用

          第二节: Set类型和SortedSet类型的介绍和案例应用

          第三节: List类型的介绍、生产者消费者模式、发布订阅模式

          第四节:Geo类型介绍以及Redis批量操作、事务、分布式锁

          第五节:Redis架构演变历程和cluster集群模式架构的搭建

          第六节:秒杀业务/超卖问题的几种解决思路

          第七节:

          第八节:

 

 

 

 

!

  • 作       者 : Yaopengfei(姚鹏飞)
  • 博客地址 : http://www.cnblogs.com/yaopengfei/
  • 声     明1 : 如有错误,欢迎讨论,请勿谩骂^_^。
  • 声     明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。
 

 

 

posted @ 2020-10-24 19:15  Yaopengfei  阅读(1575)  评论(3编辑  收藏  举报