Redis数据库学习笔记(一)NoSQL和Redis

NoSQL简介

NoSQL(Not relational SQL),泛指非关系型的数据库,NoSQL即Not-Only SQL,它可以作为关系数据库的良好补充。

为什么会出现NoSQL?

因为关系数据库在超大规模和高并发的纯动态网站已经显得力不从心,暴露了很多问题。

  1. 对数据库高并发读写的需求
    web2.0网站要根据用户个性化信息来实时生成动态页面和提供动态信息,所以数据库并发的负载非常高,尤其是对应付上万次的SQL写数据请求,硬盘IO就已经无法承受了(从硬盘要读取到内存)。

  2. 对海量数据的高效率存储和访问的需求
    对于某些网站,每天用户产生海量的用户动态,对数据库来说在一张上亿条的记录表里进行SQL查询,效率显得极其低下乃至不可忍受。

  3. 对数据库的高扩展性和高可用性的需求
    当一应用系统的用户量和访问量与日俱增的时候,你的数据库无法通过添加硬件和服务节点的方式来扩展性能和负载能力。对于很多不间断的服务,对数据库的升级和扩展是非常痛苦的事。

所以NoSQL数据库的产生就是为了解决大数据,高并发带来的挑战

NoSQL数据库没有一个统一的架构,没有同一种标准

两种NoSQL数据库之间的不同,甚至远远超过两种关系型数据库的不同。可以说,各种NoSQL的产品各有所长,成功的NoSQL必然是用于某些场所或应用。比如最常见的Redis.

NoSQL和数据库之间的关系?

是共存的,完成的工作不一样。数据库的记录的是每一种关系的数据,而且这些数据、关系都记录在磁盘上。而NoSQL是没有关系的概念,没有多表查询,只能做最简单的数据存储。比如放一条记录,再取出来。是在内存中操作的,所以效率会很高。

NoSQL和数据库其实是相辅相成的

比如用户登录的网站,交易完成任务肯定都是到数据库中的,但是在这个过程中用户的每一个细微的操作,比如选择一个商品放弃了,这些临时数据都要放到NoSQL里面 ,因为这个量很大, 若是写到数据库里面,则消耗过大。所以这些临时数据都要写到NoSQL中,最终的成交再写进数据库。效率不仅仅高,而且灵活方便。

redis简介

redis是一个免费开源的NoSQL产品,是遵循BSD协议,是用C语言写的,而且实在内存中操作,效率会很高。
redis使用 ANSI C语言编写,是一个key-value 存储系统。它支持存储的value类型有很多,包括string(字符串),hash(哈希类型),list(列表),set(集合),和zset(有序集合)。
redis会周期性的把更新的数据写入磁盘或者把修改操作的文件写入追加的记录文件。(避免死机数据丢失)
redis是一个高性能的key-value的NoSQL产品,提供了java,C/C++,C#,PHP等开发接口,使用很方便。

BSD协议: 伯克利软件发行版本。给使用者很大的自由,自由的修改和时候用,修改之后也必须开源。比如linux操作系统的多个版本,Cenos等等。

redis优势

  1. 性能极高 - Redis能读的速度是110000次/s,写的速度是81000次/s 。
  2. 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
  3. 原子性 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
  4. 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

Redis的缺点

  1. 持久化。Redis直接将数据存储在内存中,要将数据保存到磁盘上,Redis可以使用两种方式实现持久化的过程。
    1. 定时快照:每隔一段时间将整个数据库写到磁盘上,代价非常高。
    2. 基于语句的追加:只追踪变化的数据,但是追加的log可能过大,回复速度慢。
  2. 耗内存。 内存占用过高

猜你喜欢

转载自blog.csdn.net/weixin_43939593/article/details/106366607