NOSQL和Redis五大数据结构入门

从今天开始学习非关系型数据库即NOSQL(Not Only SQL),而Redis则是著名的NOSQL数据库之一,今天来学习NOSQL的五大数据结构并对五大数据结构进行总结,在这之前,先了解了解非关系型数据库NOSQL。

关于NOSQL

什么是NOSQL

NoSQL(NoSQL = Not Only SQL ),意即”不仅仅是SQL”。在现代的计算系统上每天网络上都会产生庞大的数据量。这些数据有很大一部分是由关系数据库管理系统(RDBMS)来处理。 1970年 E.F.Codd’s提出的关系模型的论文 “A relational model of data for large shared data banks”,这使得数据建模和应用程序编程更加简单。
通过应用实践证明,关系模型是非常适合于客户服务器编程,远远超出预期的利益,今天它是结构化数据存储在网络和商务应用的主导技术。
NoSQL 是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。

为什么使用NoSQL

今天我们可以通过第三方平台(如:Google,Facebook等)可以很容易的访问和抓取数据。用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加。我们如果要对这些用户数据进行挖掘,那SQL数据库已经不适合这些应用了, 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简介

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。

Redis是一款速度非常快的非关系型数据库,它可以存储键(key)与5中不同类型的值(value)之间的映射(mapping)。可以将存储在内存的键值对数据持久化到硬盘,可以使用复制特性来扩展读性能,还可以使用客户端分片来扩展写性能。

Redis的数据结构

Redis可以储存键与5中不同数据结构类型的映射,这五种数据结构分别为STRING(字符串)、LIST(列表)、SET(集合)、HASH(散列)、ZSET(有序集合)。一部分Redis命令对于这5中数据结构都是通用的,如DEL、TYPE等,在入门过后,会慢慢学习Redis的数据结构深入命令与使用。

数据类型 结构存储的值 结构的读写能力
STRING 可以是字符串、整数或者浮点数 对整个字符串或者字符串的其中一部分执行操作;对整数和浮点数进行自增或者自减操作
LIST 一个链表,链表上的每个节点都包含了一给个字符串 从链表的两端推入或者弹出元素;根据偏移量对链表进行修剪;读取单个或者多个元素;根据值查找或者移除元素
SET 包含字符串的无序收集器,并且被包含的每个字符串都是独一无二,各不相同的 添加、获取、移除单个元素,检查一个元素是否存在于集合中;计算集合的并交叉;从集合里面随机获取元素
HASH 包含键值对的无序散列表 添加、获取、移除单个键值对;获取所有键值对
ZSET 字符串成员与浮点数分值之间的有序映射,元素的排列顺序由分值的大小决定 添加、获取、删除单个元素;根据分值范围或者成员来获取元素

Redis中的字符串命令

  • GET 获取存储在给定键中的值
  • SET 设置存储在给定键中的值
  • DEL 删除存储在给定键中的值 (这个命令可用于所有类型)

Redis中的列表命令

  • RPUSH 将给定值推入列表的右端
  • LRANGE 获取列表在给定范围的所有z值
  • LINDEX 获取列表在给定位置上的单个元素
  • LPOP 从列表的左端弹出一个值,并返回被弹出的值

Redis中的集合命令

  • SADD 将给顶元素添加到集合
  • SMEBERS 返回集合包含的所有元素
  • SISMEMBER 检查给定元素是否存在集合中
  • SREM 如果给定的元素存在于集合中,那么移除这个元素

Redis中的散列命令

  • HEST 在散列里面关联给定的键值对
  • HGET 获取给定散列键值对
  • HGETALL 获取散列包含的所有键值对
  • HDEL 如果给定键存在于散列里面,那么移除这个键

Redis中的有序集合命令

  • ZADD 将一个带有给定分值的成员添加到有序集合里面
  • ZRANGE 根据元素在有序排列中所处的位置,从有序集合里面获取多个位置
  • ZRANGEBYSCORE 获取有序集合在给定分值范围内的所有元素
  • ZREM 如果给定成员存在于有序集合,那么移除这个成员

总结

今天主要对非关系型数据库(NOSQL)进行初步认识,以及以键值对类型的Redis的初步认识以及Redis五大数据结构的入门,今后会继续对Java中Redis的操作Jedis、Redis的深入操作,持久化等更多知识进行学习和总结。(埋一个坑)