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. 6.2 DataFrame

    一.DataFrame概述 在Spark SQL中,DataFrame就是它的数据抽象,对DataFrame进行转换操作. DataFrame的推出,让Spark具备了处理大规模结构化数据的能力,不仅 ...

  2. Ubuntu 图形界面和终端切换

    场景 在使用Ubuntu时,不小心按下了 ctrl+alt+f3,突然进入终端,好慌 解决 Ubuntu保留了纯命令行模式,按下 ctrl+alt+f2-6 可以进入纯命令行界面 之后按下 ctrl+ ...

  3. pycharm 设置django server

  4. python 读写.tar.gz文件 -- UnicodeDecodeError

    在用pip install 安装库的时候,偶尔会出现编码错误(如:UnicodeDecodeError: 'gbk' codec can't decode byte),对此我们可先将包下载下来(一般为 ...

  5. 检索式chatbot:

    小夕从7月份开始收到第一场面试邀请,到9月初基本结束了校招(面够了面够了T_T),深深的意识到今年的对话系统/chatbot方向是真的超级火呀.从微软主打情感计算的小冰,到百度主打智能家庭(与车联网? ...

  6. 剑指Offer-3.从尾到头打印链表(C++/Java)

    题目: 输入一个链表,按链表从尾到头的顺序返回一个ArrayList. 分析: 很简单的一道题,其实也就是从尾到头打印链表,题目要求返回ArrayList,其实也就是一个数组. 可以将链表中的元素全部 ...

  7. Python paramiko 报错 paramiko.ssh_exception.SSHException: not a valid RSA private key file

    报错的原因是选择的文件不是一个有效的 RSA 密钥文件 现在通过 ssh-keygen 默认生成的密钥文件是新的格式,并非 RSA 格式.打开文件可以看到是以 -----BEGIN OPENSSH P ...

  8. 如何运用C语言求(判断)素数。

    int i,n; scanf("%d",&n); i=2;   //这一步是亮点!! while(i<n) { if(n%i==0) break; i++; } if ...

  9. IronPython

    当时做FitnesseTest的时候,写了很多和硬件交互的代码,但是后来发现每次都通过启动进程的方式运行python脚本,很费时间. 既然要运行python脚本,在.net平台下可以用IronPyth ...

  10. c# 多线程 双色球

    学习记录.仅供参考. 知识点: 多线程 Lock 环境: Visual Studio 2017 public partial class Form1 : Form { private static r ...