欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

NoSQL简介及Redis使用教程

程序员文章站 2023-11-15 19:06:58
nosql(nosql = not only sql ),意即"不仅仅是sql"。 nosql用于超大规模数据的存储。(例如谷歌或facebook每天为他们的用户收集万亿比特的数...

nosql(nosql = not only sql ),意即"不仅仅是sql"。

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

关系型遵循acid规则

1、a (atomicity) 原子性

2、c (consistency) 一致性

3、i (isolation) 独立性

4、d (durability) 持久性

为什么使用nosql ?

今天我们可以通过第三方平台(如:google,facebook等)可以很容易的访问和抓取数据。用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加。我们如果要对这些用户数据进行挖掘,那sql数据库已经不适合这些应用了, nosql数据库的发展也却能很好的处理这些大的数据

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 教程

原教程网址https://www.runoob.com/redis/redis-tutorial.html

remote dictionary server(redis) 是一个由salvatore sanfilippo写的key-value存储系统

redis是一个开源的使用ansi c语言编写、遵守bsd协议、支持网络、可基于内存亦可持久化的日志型、key-value数据库,并提供多种语言的api。

它通常被称为数据结构服务器,因为值(value)可以是 字符串(string), 哈希(map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。

redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

$redis-cli
redis 127.0.0.1:6379>
redis 127.0.0.1:6379> ping

以上实例中我们连接到本地的 redis 服务并执行 ping 命令,该命令用于检测 redis 服务是否启动。

redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。

127.0.0.1:6379>  hmset runoobkey name "redis tutorial" description "redis basic commands for caching" likes 20 visitors 23000
ok
127.0.0.1:6379>  hgetall runoobkey
1) "name"
2) "redis tutorial"
3) "description"
4) "redis basic commands for caching"
5) "likes"
6) "20"
7) "visitors"
8) "23000"

以上实例中,我们设置了 redis 的一些描述信息(name, description, likes, visitors) 到哈希表的 runoobkey 中。

redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)

redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

有序集合的成员是唯一的,但分数(score)却可以重复。

redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。

redis 客户端可以订阅任意数量的频道。

下表列出了 redis 连接的基本命令:

序号 命令及描述
1 auth password
验证密码是否正确
2 echo message
打印字符串
3 ping
查看服务是否运行
4 quit
关闭当前连接
5 select index
切换到指定的数据库