Redis数据库详解

NoSQL

若杀死进程应使用pkill

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

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

优势:

  避免不必要的复杂性

  高吞吐量,

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

  不使用对象-关系映射

缺点:

   不支持ACID

   功能过于简单

   没有统一的数据查询模型

 

特点:

处理差大量的数据

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

击碎了性能瓶颈

 

使用场景:

1、对数据并发读写

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

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

NOSQL的数据存储模型

   键值模型

        数据模型:key-value存储

        查找速度快

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

        应用场景:内容缓存

        实例:redis、Dynmo

   列式模型

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

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

        缺点:功能相对于SQL有限

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

        实例:Bigtables、CassandraHBaseHypertable

   文档模型

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

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

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

        应用场景:web应用,

        实例:MongoDB、CouchDB

   图式模型

        数据模型:图结构模型

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

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

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

        实例:Neo4J

 

NoSQL

特性

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

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/

启动多端口:   redis-server --port 6380 &

关闭redis:使用pkill    redis-server

命令(Strings类型)

string是最简单的类型,string类型是二进制安全的,redisstring可以包含任何数据。

 

redis-cli        //登录客户端

set   键   值     //设置key对应的值为string类型的value,若键存在,那么对应的值会覆盖原有的值。

setnx   键   值     //设置key对应的值为string类型的value,若键存在则返回0,不存在则插入。

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,并认为原来的value0

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

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

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

 

命令(hashes类型)

Redish hash 是一个syringe类型的fieldvalue的映射表。他的添加、删除操作都是01(平均)

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  键  //返回指定hashfield数量

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

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

 

命令(lists类型)

list是一个链表结构,主要功能是pushpop、获取一个范围的所有值等,操作中的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   键  索引(数字)  //返回名称为keylistindex位置的元素

 

命令(sets类型)

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

    例子:

        set1 (1,2)  set223

        取set1与2的并集:123

        取set1与2的交集:2

        取set1与2的差集:13

sadd   键  值(元素)   //向名称为keyset中添加元素

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

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   //删除所有数据库中的所有的键

posted @ 2019-08-02 17:38  え稚始گ  阅读(205)  评论(0编辑  收藏  举报