继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Redis青铜修炼手册(一) --- NoSQL&&Redis介绍

虎哥丶
关注TA
已关注
手记 23
粉丝 320
获赞 2128

再说Redis之前,想先说一下NoSQL。在最早的单机时代,随着数据的增加一台机器可能放不下了。同时索引占用的内存空间也会越来越大。对请求的读写操作影响很大。于是就在数据库之前增加了一层保护层 — 缓存。另外由于关系型数据库MySQL、Oracle等在某些场景下读写效率较差,灵活性较低,I/O瓶颈限制。使得NoSQL应用的越来越广泛。

NoSQL

NoSQL, Not Only SQL,也就是我们所说的非关系型数据库。常用的有Redis、Memcached、MongoDB等。

NoSQL数据库具有强大的读写性能,主要原因还是因为它的无关系性,数据结构相对简单。比如MySQL这样的关系型数据库我们需要实现建立好表结构,如果需要增加字段还需要通过alert table来进行新增。但是非关系型数据库就没有这么麻烦。我们可以随时自定义数据格式。

常用数据库区别如下(来源自网络)

数据库名称 类型 数据存储类型 查询类型 附加功能
Redis 使用内存存储的非关系数据库 字符串、列表、集合、散列表、有序集合 每种数据类型专属的命令,以及批量操作和不完全的事务支持 发布与订阅,主从复制,持久化,脚本
memcached 使用内存存储的键值缓存 键值之间的映射 创建、读取、删除、更新等命令 多线程服务器,用于提升性能
MySQL 关系数据库 每个数据库可以包含多个表,每个表可以包含多个行;可以处理多个表的视图;支持空间和第三方扩展 SELECT、INSERT、UPDATE、DELETE、函数、存储过程 支持ACID性质(需要使用InnoDB),主从复制,主主复制
MongoDB 使用硬盘存储(on-disk)的非关系文档存储 每个数据库可以包含多个表,每个表可以包含多个无schema的BSON文档 创建、读取、更新、删除、条件查询等命令 支持map-reduce操作,主从复制,分片,空间索引

数据库比较

关系型数据库
  • 结构化查询语言(SQL语句)

  • 严格的一致性

  • 基础事物

非关系型数据库
  • 没有特定的查询语言

  • 有K-V存储,列存储,文档存储,图形数据库

  • 最终一致性

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

  • 高性能,高可用和伸缩性

  • CAP原则,指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性)

NoSQL四大分类

  • KV键值对,如Redis。用于内容缓存,主要用于处理大数据的高访问负载,也用于一些日志系统等.

  • 列存储数据库,如HBase。分布式的文件系统。

  • 文档性数据库,如MongoDB。主要用于WEB应用。也是k-v结构的。

  • 图形数据库,如Neo4J。主要用于社交网络,推荐系统等.

Redis

Redis:Remote Dictionary Server (远程字典服务器)。

是一个用C语言编写的,开源的,高性能的(K/V)分布式内存数据库。

特点:
  • 支持数据的持久化

  • 支持丰富的数据类型,String、List、Hash、Set、Zset

  • 支持数据备份,即master-slave

  • 单线程且支持事物

应用场景:
  • 由于可以持久化,因此可以用来存储数据。

  • 消息队列系统

  • 社交关系(如,共同关注的人,粉丝列表等)

  • 排行榜、热点新闻列表

  • 秒杀系统

为什么那么快:
  • Redis是纯内存操作,需要的时候需要我们手动持久化到硬盘中

  • Redis是单线程,从而避开了多线程中上下文频繁切换的操作。

  • Redis数据结构简单、对数据的操作也比较简单

  • 使用底层模型不同,它们之间底层实现方式以及与客户端之间通信的应用协议不一样,Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求

  • 使用多路I/O复用模型,非阻塞I/O

I/O 多路复用技术是为了解决进程或线程阻塞到某个 I/O 系统调用而出现的技术,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪,就是这个文件描述符进行读写操作之前),能够通知程序进行相应的读写操作

Redis的数据类型

Redis支持丰富的数据类型

String

字符串是最基本的一个数据类型,String是二进制安全的,也就是说String可以包含任何数据,因此我们可以存放序列化之后的对象或者是图片内容。

一条redis数据可以存放最大的字符串为512M。

Hash

我们可以把他理解为Java中的map,Python中的dict。是一个键值对的集合。适合于存储对象

List

是一个字符串的集合,默认按照插入顺序排序,我们也可以通过不同的命令将数据插入到集合的头部或者尾部

Set

用于存放无序不重复的集合,集合中最大的成员数为 232 - 1 (4294967295,每个集合可存储40多亿个成员)。

Zset

即 sorted set ,有序不重复集合。每个元素都会有一个对应的double类型的分数(score),通过这个分数进行排序。元素不允许重复,但是分数可以。

下一篇,将系统的列举这五种数据类型的常用命令,和用法。


欢迎关注公众号"程序员共成长", 公众号内回复【获取资源】领取程序员专属礼包!!!

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP