NoSQL

若杀死进程应使用pkill

数据设计模式:分布式、非关系型、不提供ACID

特性:简单数据模型、源数据和应用数据分离、弱一致性

优势:

避免不必要的复杂性

高吞吐量,

高 水平扩展能力和低端硬件集群

不使用对象-关系映射

缺点:

不支持ACID

功能过于简单

没有统一的数据查询模型

特点:

处理差大量的数据

运行再便宜的pc服务器集群上

击碎了性能瓶颈

使用场景:

1、对数据并发读写

2、对海量数据的高效率存储与访问

3、对数据的高可扩展性和高可用性(分布式)

NOSQL的数据存储模型

键值模型

数据模型:key-value存储

查找速度快

缺点:数据无结构,通常被当做字符串或二进制数据

应用场景:内容缓存

实例:redis、Dynmo

列式模型

数据模型:数据按列存储,将一列数据存在一起

优点:查找迅速,可扩展性强、易于实现分布式

缺点:功能相对于SQL有限

应用场景:分布式文件系统或分布式存储

实例:Bigtables、Cassandra、HBase、Hypertable

文档模型

数据模型:与键值模型相似,value指向结构化数据;

优点:数据格式不严格,无需定义事先定义结构

缺点:查新性能不高,缺乏统一查询语法

应用场景:web应用,

实例:MongoDB、CouchDB

图式模型

数据模型:图结构模型

优点:利用图结构相关算法提高性能,并是特殊场景应用需求

缺点:难以实现分布式、功能有限

应用场景:社交网站、推荐系统、关系图谱

实例:Neo4J

NoSQL

特性

1、基于文档数据库系统(JSON、BSON半结构化数据/)

2、保证其性能

C++研发

支持各种索引

不支持事务,

操作是在内存中进行(延迟写操作)

3、支持扩展性

支持复制

4、支持基于文档的查询

5、支持使用数据的分组集合操作

6、支持网格文件系统(GridFS)

7、支持地理位置空间索引

8、支持动态查询,查询的性能剖析

9、基于复制进行故障转移,通过选举协议选举。自动故障转移

适用场景

1、web网站

2、缓存

3、海量存储

4、高可扩展性

5、应用程序编程环境中

数据库模型

面向collection(集合)的数据库

使用数据库:但数据库无需创建

每一个文档相当于一个mysql的行,多个文档组合起来相当于一个集合,相当于mysql的集合

集合无需事先定义

基于C/S架构:服务器端mongod,客户端mongo

Redis介绍

服务端默认连接端口号为6379

是一个key-value存储系统,它支持存储的value类型很多。包括string(字符串)、list(链表)、set(集合)、zset(有序集合)。

支持各种不同方式的排序

为保证效率,数据都是缓存在内存中,他也可以周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件。

适用场合:目前全球最大的redis用户时新浪微博

应用程序直接访问redis

应用程序直接访问redis,只有当redis访问你失败时才访问mysql。(redis集群与mysql集群数据同步)

redis数据库提供纵多种灵活的数据结构和数据操作,为不同的数据构建不同的库

安装

下载安装包:http://redis.io/download

wget http://download.redis.io/releases/redis-3.2.3.tar.gz

tar xzf redis-3.2.3.tar.gz

cd redis-3.2.3

make MALLOC=libc  && cd src &&  make install

mv redis-benchmark  redis-check-aof  redis-check-rdb redis-cli mkreleasehdr.sh redis-sentinel  redis-server  redis-trib.rb   /usr/sbin/

,不存在则插入。

setex  键  数字  值     //设置key对应的值为string类型的value,并指定此键值对应的有效期(默认为秒)

mset  键  值  键  值 ......  //批量设置多个key的值,成功返回ok,失败返回0

msetnx  键  值  键  值 ......  //批量设置多个key的值,成功返回ok,失败返回0.不会覆盖已经存在的键值对!

get     键       //获取值

getset   键  值  //替换key的值,并返回key的旧值

mget    键   键   键 ..... //批量获取多个key的值,若对应key不存在则对应返回nil

incr   键 //对key的值做加加操作,并返回新的值

incrby   键  数值   //同incr类似,加指定值,key不存在会添加key,并认为原来的value是0

decr   键 //对key的值做减减操作,并返回新的值

decrby  键  数值   //同incr类似,减指定值,key不存在会添加key,并认为原来的value是0

append  键   添加的新值  //给指定key的字符串追加value,返回新字符串的长度

命令(hashes类型)

Redish hash 是一个syringe类型的field和value的映射表。他的添加、删除操作都是0(1)(平均)。

hash特别适合于存储对象。相较于将对象的每一个字段存成单个string类型。

将一个对象存储在hash类型中会占用更少的内存,并且可以更方便的存取整个对象。

hset  键  hash表字段    对应的值    //设置一个hash表,若key不存在则先创建

hsetnx  键   hash表字段   值     //设置一个hash表,若key不存在则先创建,若存在返回0。

hmset   键  hash表字段   值  hash表字段   值   //同时设置hash的多个表与值

hget   键  hash表字段    //获取hash表中的值

hmget    //获取全部指定的hash field

hexists    键  表字段   //测试指定表字段是否存在,存在返回1.

hlen  键  //返回指定hash的field数量

hdel   键  表字段  //删除指定的表字段中的值

hkeys  键   //返回hash的所有表字段

命令(lists类型)

list是一个链表结构,主要功能是push、pop、获取一个范围的所有值等,操作中的key理解为链表的名字。

Redis的list类型其实就是一个每个子元素都是一个string类型的双向链表。

我们可以通过push、pop操作从链表的头部或者尾部添加删除元素,这样list既可以作为栈,又可以作为队列。

lpush   键   值  //在key对应的list的头部添加字符串元素

rpush   键   值  //在key对应的list的尾部添加字符串元素

linsert   键  before  旧值   新插入的值    //在key对应的list的特定位置前或者后插入字符串

lrange   键  0 -1  //取值,从头开始取,从尾到头为正方向

lset    键   下标 值  //设置list中指定下标的元素值,用于替换,下标:第一个单词下标为0,依次往下数。

lrem   键   N个   值   //从某个键中删除N个与其他值相同的值(N<0从尾部删除,N=0全部删除)

ltrim   键   下标   下标  //保留从下标到下标内的内容,未保留的值将全部删除

lpop   键   //从表的头部删除元素,并返回删除的元素

rpop   键   //从表的尾部删除元素,并返回删除的元素

rpoplpush  键   键 //把第一个键中的尾部的一个值弹出,给到第二个键中,并且是从头部压入。

lindex   键  索引(数字)  //返回名称为key的list中index位置的元素

命令(sets类型)

set是集合,它是string类型的无序集合,set是通过hash  table实现的,添加、删除和查找的复杂度都说0(1)。对集合我们可以取并集、交集、差集。通过这些操作我们可以实现sns中的好友推荐和blog的tag功能。

例子:

set1 (1,2)  set2(2,3)

取set1与2的并集:1,2,3

取set1与2的交集:2

取set1与2的差集:1,3

sadd   键  值(元素)   //向名称为key的set中添加元素

srem   键   值  //删除名称为key的set中的元素

spop  键  //随机弹出并删除集合中的一个元素

srandmember   键/集合    //随机返回键或者集合中的一个元素,但不会删除这个元素

sdiff  键  键   //返回两个数组中的差集,以第一个键中的元素为标准

sdiffstore  存储键    键    键  //返回两个键中元素的差集并且保存到一个键中

sinter   键  键   //返回所有给定键的交集

sinterstore  存储键    键    键  //返回两个键中元素的交集并且保存到一个键中

sunion  键  键  //返回所有给定key的并集

sunionstore  存储键   键  键  //返回所有给定key的并集,并且保存到一个键中

smove   键(移除)   键(添加)  要剪切的元素   //从第一个集合中移除一个元素,并移动到第二个对应的集合中

smembers    //查看添加的集合

scard   键/集合    //查看集合中元素的个数

命令(sorted  sets类型)

是set的一个升级版本,他是在set的基础上增加了一个顺序属性,这个 属性在添加、修改元素的时候可以指定,每次指定后,zset会自动重新按新的值调整顺序。

可以理解为两列的mysql表,一列存储value(值),一列存储顺序。

操作中key(键)理解为zset的名字。

zadd  键   顺序(数字)  值  //向键中的元素添加顺序,用于排序,若元素存在,则更新其顺序。

zrem   键   值  //删除集合中的元素

zrank   键   值//返回名称为键中元素的排名,(按score从小到大排序),即下标。排完序然后找索引值

zrevrank  键   值//返回名称为键中元素的排名,(按score从大到小排序),即下标。排完序然后找索引值

zrangebyscore  键  数字 数字  withscores  // 先升序排序,返回score给定范围内的数字。数字 数字:这两个数字为范围

zcount  键   数字 数字   //返回集合中给定score在给定范围的数量

zcard   键     //返回集合中所有元素的个数

zremrangebyrank   键   数字  数字  //删除集合中排名在给定范围中的元素(按索引来删除)

zremrangebyscore   键   数字  数字  //删除集合中排名在给定范围中的元素(按顺序来删除)

zrange  键  0  -1   withscores //在集合中取元素。0与-1为索引,从第一个到最后一个(升序)。withscores为输出顺序号。

zrevrange  键  0  -1   withscores //在集合中取元素。0与-1为索引,从第一个到最后一个(降序)。withscores为输出顺序号。

键值相关命令

keys  *   //返回库中所有的键,模糊匹配,my*、m*y.........都可以。

exists  键  //确认一个键是否存在

del   键   //删除一个键

expire   键  数字(秒)   //对一个已存在的键设置过期时间

persist   键   //取消给键的过期时间

ttl   键  //获取这个键的有效时长,直至为-1,说明此值已经过期

randomkey  //随机返回键空间值得一个键

move   //将当前数据库中的键转移到其他数据库中

select  数字   //选择数据库,进入客户端时,默认进入0数据库,一共16个数据库。

rename   键名   键新名    //重命名键

type  键   //返回键的类型

服务器相关命令

ping   //测试连接是否正常

select  数字(0-15)  //选择数据库,Redis数据库编号从0-15,我们可以选择任意一个数据库来进行数据存取。

dbsize    // 返回当前数据库中key的数目

info      //获取服务器的信息和统计

config   键  //实时传输与存储收到的请求

flushdb   //删除当前数据库中所有的key

flushall   //删除所有数据库中的所有的键

Redis数据库详解的更多相关文章

  1. redis配置详解

    ##redis配置详解 # Redis configuration file example. # # Note that in order to read the configuration fil ...

  2. Redis协议详解

    smark Beetle可靠.高性能的.Net Socket Tcp通讯组件 支持flash amf3,protobuf,Silverlight,windows phone Redis协议详解 由于前 ...

  3. Redis学习——详解Redis配置文件(三)

    一.Redis脚本简介 在我们介绍Redis的配置文件之前,我们先来说一下Redis安装完成后生成的几个可执行文件: redis-server .redis-cli .redis-benchmark ...

  4. Redis:默认配置文件redis.conf详解

    转: Redis:默认配置文件redis.conf详解 # Redis配置文件样例 # Note on units: when memory size is needed, it is possibl ...

  5. Redis配置文件redis.conf详解

    一.Redis配置文件redis.conf详解 # Note on units: when memory size is needed, it is possible to specifiy # it ...

  6. [转]使用python来操作redis用法详解

    转自:使用python来操作redis用法详解 class CommRedisBase(): def __init__(self): REDIS_CONF = {} connection_pool = ...

  7. linux离线部署redis及redis.conf详解

    一.离线部署redis 由于博主部署的虚拟机没有网络也没有gcc编译器,所以就寻找具备gcc编译器的编译环境把redis编译安装好,Copy Redis安装目录文件夹到目标虚拟机的目录下.copy时r ...

  8. 5种Redis数据结构详解

    本文主要和大家分享 5种Redis数据结构详解,希望文中的案例和代码,能帮助到大家. 转载链接:https://www.php.cn/php-weizijiaocheng-388126.html 2. ...

  9. python操作redis用法详解

    python操作redis用法详解 转载地址 1.redis连接 redis提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用 ...

随机推荐

  1. Rust,重温猜猜看

    其实,这个知识点蛮多的, 常看常新. use std::io; use std::cmp::Ordering; use rand::Rng; fn main() { println!("Gu ...

  2. 在Rust中,cargo使用国内镜像源

    一个编程语言依赖包管理的普通问题. cargo解决得比较优雅. 一,新建$HOME/.cargo/config文件 [source.crates-io] registry = "https: ...

  3. Es6编程风格

    let 取代 var let 和 const 之间优先使用 const 字符串 静态字符串一律使用单引号或反引号,不使用双引号 动态字符串使用反引号 `` 解构赋值 使用数组成员对变量赋值时,优先使用 ...

  4. luoguP4719 【模板】动态 DP

    题意 我理解的动态DP: 发现DP可以写成矩阵的形式,因此用数据结构维护矩阵乘积. 对于这道题,显然有DP: \(f_{x,0/1}\)表示\(x\)的子树中,x选/不选的最大点独立集. \(f_{x ...

  5. ASP.NET开发实战——(七)ASP.NET与数据库

    在之前的文章中介绍了使用ASP.NET MVC来开发一个博客系统,并且已将初具雏形,可以查看文章列表页面,也可以点击文章列表的其中一篇文章查看详情,这已经完成了最开始需求分析的读者的查看列表和查看文章 ...

  6. 【2019.8.9 慈溪模拟赛 T2】摘Galo(b)(树上背包)

    树上背包 这应该是一道树上背包裸题吧. 众所周知,树上背包的朴素\(DP\)是\(O(nm^2)\)的. 但对于这种体积全为\(1\)的树上背包,我们可以通过记\(Size\)优化转移时的循环上界,做 ...

  7. 日常笔记6C++标准模板库(STL)用法介绍实例

    一.vector常见用法详解 vector翻译为向量,但是这里翻译成变长数组的叫法更好理解. 如果typename是一个STL容器,定义的时候要记得在>>符号之间加上空格,因为在C++11 ...

  8. 小白专场-树的同构-python语言实现

    目录 一.题意理解 二.求解思路 更新.更全的<数据结构与算法>的更新网站,更有python.go.人工智能教学等着你:<https://www.cnblogs.com/nickch ...

  9. 线性结构之习题选讲-ReversingLinkedList

    目录 一.什么是抽象的链表 二.单链表的逆转 三.测试数据 3.1 边界测试 更新.更全的<数据结构与算法>的更新网站,更有python.go.人工智能教学等着你:https://www. ...

  10. Azure EA (2) 使用Postman访问国内Azure Billing API

    <Windows Azure Platform 系列文章目录> 本文介绍的是国内由世纪互联运维的Azure China 请读者先看一下之前的文档内容:Azure EA (1) 查看国内Az ...