搜公众号
推荐 原创 视频 Java开发 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库
Lambda在线 > 小败笔的颠沛流离 > Redis 连载(一) : 入门介绍与面试必问

Redis 连载(一) : 入门介绍与面试必问

小败笔的颠沛流离 2019-02-09
举报
开篇介绍

面对现在用户数据的急剧上升,我们需要对这些用户数据进行挖掘,传统的关系型数据库已经不适合这些应用了.Nosql的发展可以很好的处理这些大的数据.

本次我们通过几个章节以最简单实用的方式来讲一下非关系型数据库以及其中火爆的Resid.

本期内容

1:NoSQL简介.

2:NoSQL的3V与3高.

3:NoSQL数据模型简介.

4:NoSQL DB四大分类.

5:分布式数据库CAP原理.

6:Redis简介,安装.

NoSQL简介
Q:
什么是NoSQL?
A:

Not Only Sql --> NoSQL (不仅仅是SQL)

非关系型数据库.随着web2.0网站的兴起,传统的关系型数据库已经无法面对web2.0,特别是大规模和高并发的SNS类型的web2.0纯动态网站了,暴露了许多难以克服的困难.而非关系型数据库则由于其本身的特点得到了迅速的发展.NoSQL 数据库的产生就是为了解决在规模数据集合多种数据种类带来的挑战,尤其是大数据应用难题.包括超大规模数据的存储.

面对每天用户大量的数据,有些数据的类型不需要固定的模式,无需多余的操作就可以进行横向扩展.

Q:
NoSQL能干什么?
A:
No 特点
1 易扩展
2 大数据量高性能
3 多样灵活的数据模型
4 传统RDBMS VS NOSQL

1:易扩展

NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型.

数据之间无关系,这样就非常容易扩展,也无形之间在架构的层面上带来了可扩展的能力.

2:大数据量高性能

NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀.这得益于他的无关系性,数据库的结构简单.

一般MySQL使用Query Cache,每次表的更新Cache就失效,是一种大粒度的Cache,在针对web2.0的交互频繁的应用,Cache性能不高,而NoSQL的Cache是记录级的.是一种细粒度的Cache,所以NoSQL在这个层面上来说就要性能高很多了.

3:多样灵活的数据模型

NoSQL无需事先为要存储的数据建立字段.随时可以存储自定义的数据格式,而在关系数据库里.增删字段是一件非常麻烦的事情.如果是非常大数据量的表.增加字段简单就是一个噩梦.

4:传统RDBMS VS NOSQL

RDBMS-->传统关系型数据库.

- 高度组织化结构化数据.

- 结构化查询语言(SQL).

- 数据和关系都存储在单独的表中.

- 数据操纵语言,数据定义语言.

- 严格的一致性.

- 基础事务

NoSQL

- 代表着不仅仅是 SQL

- 没有声明性查询语言

- 没有预订义的模式

- 键 值对存储,列存储,文档存储,图形数据库

- 最终一致性.而非ACID属性.

- 非结构化和不可预知的数据 

- CAP 定理

- 高性能,高可用,可伸缩性

NoSQL的3V与3高
Q:
大数据时代的3V:
A:

- 海量 Volume

- 多样 Variety

- 实时 Velocity

Q:
互联网需求的3高:
A:

- 高并发

- 高可扩

- 高性能

NoSQL数据模型简介
Q:
聚合模型:
A:
No 特点
1 KV键值对
2 BSon(类似于JSON)
3 列族(按列存储数据,最大特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或某几列的查询有非常大的IO优势)
4 图形
NoSQL DB四大分类
Q:
KV 键值(Redis)
A:
优势 查找速度快
缺点 数据无结构化,通常只被当作字符串或二进制数据
Q:
文档型数据库(MongoDB)bson格式比较多
A:
优势 数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构
缺点 查询性能不高,而且缺乏统一的查询语法.
Q:
列存储数据库(Cassandra,HBase)分布式文件系统
A:
优势 查找速度快,可扩展性强,更容易 进行分布式扩展
缺点 功能相对局限
Q:
图关系数据库(Neo4J,InfoGrid)他不是放图形的,放的是关系比如朋友圈社交网络,广告推荐系统,社交网络,推荐系统等,专注于构建关系图谱
A:
优势 利用图结构相关算法,比如最短路径寻址,N度关系查,
缺点 很多时候需要对整个图做计算才能得出需要的信息而且这种结

举例:

新浪 BerkeleyDB+redis
美团 redis+tair
阿里,百度 memcache+redis
分布式数据库CAP原理
Redis 连载(一) : 入门介绍与面试必问

传统关系型数据库-->ACID

Redis 连载(一) : 入门介绍与面试必问

Q:
Atomicity(原子性)
A:

指事务里的所有操作要么都做完,要么都不做.事务成功的条件是事务的所有操作都成功,只要有一个操作失败,整个事务就失败.需要回滚.

Q:
Consistency(一致性)
A:

指数据库要一直处于一致的状态,事务的运行不会改变数据库原本的一致性约束

Q:
Isolation(独立性)
A:

指事务之间不会互相影响,如果一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交.他所访问的数据就不受未提交事务的影响.(比如你正在查看你的银行账户,有人正在给你转钱,如果这个转钱的动作未提交,你查的时候是看不到这笔钱的)

Q:
Durability(持久性)
A:

指事务一旦提交,他所做的修改将会永久的保存在DB中

Redis 连载(一) : 入门介绍与面试必问

NoSQL非关系型数据库-->ACID

Redis 连载(一) : 入门介绍与面试必问

Q:
Consistency(一致性)
A:

数据保持一致

Q:
Availability(可用性)
A:

不能出错

Q:
Partition tolerance(分区容错性)
A:

ACID必须4个条件都满足,但是NoSQL只能三选二(上面表格中的三个特性满足两个)

CAP中的3进2

Q:
CAP核心理论:
A:

一个分布式系统不可能同时很好的满足一致性.可用性和分区容错性这三个需求,最多满足两个.

所以,根据该理论将NoSQL分成了三大类

Redis 连载(一) : 入门介绍与面试必问

Redis 连载(一) : 入门介绍与面试必问

Q:
数据库事务一致性需求
A:

很多web实时系统并不要求严格的数据库事务,对读一致性的要求很低,有些场合对写一致性要求并不高,允许实现最终一致性.

Q:
数据库的写实时性与读实时性需求
A:

对 ACID 来说,插入一条数据之后立刻查询,是肯定可以读出来这条数据的.但是对于很多 webAPP 来说,并不要求这么高的实时性.比方说发一条消息后.过几秒或十几秒后.订阅者才看到这条动态是完全可以接受的.

Q:
对复杂的SQL查询,特别是多表关联查询的需求
A:

任何大数据量的webAPP,都非常忌讳多个大表的关联查询,以及复杂的数据分析类型的报表查询,特别是SNS类型的网站,从需求以及产品设计角度,就避免了这种情况的产生,往往更多的只是表单的主键查询,以及表单的简单条件分页查询,SQL的功能被极大的弱化了.

什么是BASE

BASE是为了解决关系型数据库强一致性引起的问题而引起的可用性降低而提出的解决方案.

Redis 连载(一) : 入门介绍与面试必问

Q:
中心:
A:

通过让系统放松对某一时刻数据一致性的要求来换取 系统整体伸缩性和性能上改观,因为在大型系统往往由于地域分布和极高性能的要求.不可能采用分布式逗我来完成这些指标,要想获得这些指标,我们必须采用别的方式完成,于是BASE出现了.

Q:
分布式 VS 集群
A:

分布式:把一个系统不同模块的服务分别放在不同台服务器上,通过API进行通信和调用.对外提供服务和组内协作.

集群:在多台服务器上部署相同的服务模块.通过分页式调度软件进行统一的调度.

Redis入门

Redis:REmote DIctionary Server(远程字典服务器)

Redis 连载(一) : 入门介绍与面试必问

完全开源免费,用C语言编写,遵守BSD协议,是一个高性能的(Key/value)分布式内存数据库.基于内存运行.并支持持久化的NoSQL数据库.是当前最热门的 NoSQL数据库之一.也被人们称作:数据结构服务器

Redis 连载(一) : 入门介绍与面试必问

作用:

Redis 连载(一) : 入门介绍与面试必问

Q:
从哪里下载?
A:

http://redis.io

http://www.redis.cn

安装

以Ubuntu18系统为例:

Redis 连载(一) : 入门介绍与面试必问

安装Redis-Server 指令:

sudo apt install redis-server
Redis 连载(一) : 入门介绍与面试必问

安装Ubuntu网络辅助工具:

sudo apt install net-tools
Redis 连载(一) : 入门介绍与面试必问

安装完成通过命令检查Redis服务器状态

netstat -nlt|grep 6379
Redis 连载(一) : 入门介绍与面试必问

通过命令检查Redis服务器状态

sudo /etc/init.d/redis-server status

Redis 连载(一) : 入门介绍与面试必问

测试:

Redis 连载(一) : 入门介绍与面试必问

第一步:通过客户端指令登录到Redis:

redis-cli

redis-cli -p 6379

Redis 连载(一) : 入门介绍与面试必问

Redis 连载(一) : 入门介绍与面试必问

存入一个键值:

set redis-test helloword
Redis 连载(一) : 入门介绍与面试必问

获取存入的键值:

get resid-test

Redis 连载(一) : 入门介绍与面试必问

总结

到这,我们的理论知识与安装测试已经OK了,下期我们将从实际的Redis操作开始入手.以最简单实用的方式讲.有兴趣的同学欢迎持续关注.

干货推存:

SpringBoot 连载 

SpringCloud 连载

版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《Redis 连载(一) : 入门介绍与面试必问》的版权归原作者「小败笔的颠沛流离」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注小败笔的颠沛流离微信公众号

小败笔的颠沛流离微信公众号:javaxiaobaibi

小败笔的颠沛流离

手机扫描上方二维码即可关注小败笔的颠沛流离微信公众号

小败笔的颠沛流离最新文章

精品公众号随机推荐

举报