redis简单学习

Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。

Redis 与其他 key - value 缓存产品有以下三个特点:

  • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

  • Redis支持数据的备份,即master-slave模式的数据备份。
NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL"。

关系型数据库遵循ACID规则

1、A (Atomicity) 原子性   2、C (Consistency) 一致性 3、I (Isolation) 独立性· 4、D (Durability) 持久性


分布式系统(distributed system)由多台计算机和通信的软件组件通过计算机网络连接(本地网络或广域网)组成。

分布式系统是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。

因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。

分布式系统可以应用在不同的平台上如:Pc、工作站、局域网和广域网上等。


NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。

NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。


RDBMS vs NoSQL

RDBMS 
- 高度组织化结构化数据 
- 结构化查询语言(SQL) (SQL) 
- 数据和关系都存储在单独的表中。 
- 数据操纵语言,数据定义语言 
- 严格的一致性
- 基础事务

NoSQL 
- 代表着不仅仅是SQL
- 没有声明性查询语言
- 没有预定义的模式
-键 - 值对存储,列存储,文档存储,图形数据库
- 最终一致性,而非ACID属性
- 非结构化和不可预知的数据
- CAP定理 
- 高性能,高可用性和可伸缩性

nosql优点:

  • - 高可扩展性
  • - 分布式计算
  • - 低成本
  • - 架构的灵活性,半结构化数据
  • - 没有复杂的关系

NoSQL 数据库分类

类型 部分代表

特点
列存储

Hbase

Cassandra

Hypertable

顾名思义,是按列存储数据的。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的IO优势。

文档存储

MongoDB

CouchDB

文档存储一般用类似json的格式存储,存储的内容是文档型的。这样也就有有机会对某些字段建立索引,实现关系数据库的某些功能。

key-value存储

Tokyo Cabinet / Tyrant

Berkeley DB

MemcacheDB

Redis

可以通过key快速查询到其value。一般来说,存储不管value的格式,照单全收。(Redis包含了其他功能)

图存储

Neo4J

FlockDB

图形关系的最佳存储。使用传统关系数据库来解决的话性能低下,而且设计使用不方便。

对象存储

db4o

Versant

通过类似面向对象语言的语法操作数据库,通过对象的方式存取数据。

xml数据库

Berkeley DB XML

BaseX

高效的存储XML数据,并支持XML的内部查询语法,比如XQuery,Xpath。


redis 基本上都是用散列技术利用键值对方式存储,






感觉redis更像是一种jar带来的方法。通过Jedis包,利用这些方法,把数据存到内存中,在内存中进行读取。
Redis 是一个内存中的数据结构存储系统,它可以用作数据库,缓存和消息中间件。说白了主要就是用来缓存数据。
Redis是单线程的,但是,处理速度非常的快。可以用redis做为一个消息队列,个人觉得它属于轻量级的,
Redis在缓存的定义上是真正意义上的内存式缓存。
redis通过算法,将常用的数据类型,放在内存里,将不常用的进行持久化,移出内存空间。这个机制,非常类型JAVA的VM,了解新生代,
Redis将内存的保存地址进行哈希排序,标记产生哈希槽。 
使用哈希槽的好处就在于可以方便的添加或移除节点。
当需要增加节点时,只需要把其他节点的某些哈希槽挪到新节点就可以了;
当需要移除节点时,只需要把移除节点上的哈希槽挪到其他节点就行了。
集群、主备防灾说的通俗点就是 对 哈希槽 的监管权的拥有。如果主有问题,就快速死掉,把哈希槽的拥有权给备机监管。

那我们为什么要用它?
    既然 REDIS 是一种缓存管理工具。它当然可以取代现有一些 CACHE 的工具。
那我们到底怎么使用它能够给我们带来巨大的收益呢?
我们会在什么样的场景下使用它? 看下这个逻辑金字塔模型,能够稍稍的解释一些使用

这3个分层的金字塔三角形,从底层开始说,第3层 游客,就是说客户随意逛逛,粘合度不高的,不会最终交易。第2层就是有自己喜好的,对这边有感兴趣的点。可以下单,但不一定会买。第一层金字塔顶层,就是 忠实客户会购买喜欢的产品。
可以看出整个流量数据是 第一层往后越少。
而实际应用中,如果所有的信息读写都是来自数据库的话,I/O的所有负担都压在了数据库上,而真正业务是要实现快速交易。流量一旦上来,发现查询也查不了,交易也交易不了,都堵塞了。所以并不是所有的操作都需要去访问数据库,这种海量数据下非常容易击穿数据库。导致生产事故。

在这样大数据量的频繁查询下,这个场景下,REDIS就派上了用场。

Redis 缓存客户信息,用 session id 或者有 access_token 做为 key expire  时间为 30 分钟。
而网站信息缓存 信息,产品说明等。这样   就把大部分的流量拦截了下来,数据库的 I/O 解放了出来,
客户最先登录后,就把页面显示的信息,个人信息都缓存好了。无论怎么刷新,
退出登录都不会访问到数据库了。   数据库可以专心的等待交易的进行。
当然缓存的信息都是不常改变的,如产品说明,列表等等这些,另外的像客户信息如购买了产品后,
记得更新缓存,因为产品列表,个人信息发生了变化。
在分布式环境里,nginx作为负载均衡,轮询服务器, redis 做为  分布式会话 缓存工具   尤其常见。
再加上一些静态页面的处理,动静态分离,数据库读写分离,Java虚拟机的优化,TOMCAT容器的优化
等等,大数据量下的优化措施能把以前的拖拉机变成豪华飞机。


猜你喜欢

转载自blog.csdn.net/qq_21325705/article/details/79205539