美文网首页
2018-01-05

2018-01-05

作者: losspm | 来源:发表于2018-01-05 17:37 被阅读5次

    1.存储key value以及5种不同的数据结构之间的mapping(映射)
    2.redis不使用表格

    1. memcached只能保存字符串
    2. redis储存---------主储存(primary storage)
      |
      |
      |
      |-------二级储存(secondary storage)
      |
      |
      |
      |

    5.需要考虑的问题是,由于redis属于内存数据库,当服务器关闭的时候,数据也会丢失。那么数据该何去何从,但是redis提供了两种数据持久化的方式,都可以将数据以小而紧凑的格式写入硬盘中,分别为<<<1>>>时间点转储(point-in-time dump),其中可以通过在一定时间内到达一定数量的写入操作执行,当这一条件能够满足的时候,又可以通过两条转存到硬盘(dump-to-disk)两条命令的一条来执行;第二种<<<2>>>是将所有修改了数据库的命令都写入一个只追加(append-only)的文件里面,用户可以根据数据的重要程度,来设置不同步(sync),每秒同步一次或者每写入一个命令同步一次。

    6.Redis的数据结构
    ---String 可以是字符串,整数或者浮点数
    ---List 一个链表,链表上的每个节点都包含了一个字符串
    ---Set 包含字符串的无序收集器,并且被包含的字符串都是独一无二的
    ---Zset 字符串成员与浮点数分值之间的有序映射,元素的排列顺序由分值大小决定
    ---Hash 包含键值对的无序散列表
    其中Set和Zset是Redis特有的数据结构


    使用的Nodejs来与Redis进行交互
    首先要在nodejs相关项目下安装redis包,执行npm install redis --save
    在nodejs中启动server.js,server.js相关代码如下
    对于set的基本操作如下

    const redis = require('redis');
    
    const client = redis.createClient();
    
    client.on('erro', (err)=>{
        console.log('Error' + err)
    })
    //string key, string value
    client.set('hello', 'world', redis.print);
    client.get("hello", function(err, reply) {
        // reply is null when the key is missing 
        console.log(reply);
    });
    

    这仅仅是对redis中的set结构进行设置,此时在控制台返回的结果为Reply:OK以及world


    对于链表list,一个链表可以有序的保存多个字符串,其中包含的字符串可以重复出现,其中对于链表的操作LPUSH,RPUSH分别是从list的左边和右边推入元素,而LPOP以及RPOP是分别从list的左边以及右边弹出元素。LINDEX是获取给定位置的单个元素,LRANGE是返回列表给定范围内的所有元素

    client.rpush(['frameworks', 'angularjs', 'backbone'], function(err, reply) {
        console.log(reply); //prints 2
    });
    

    返回的是list的长度。所表达的信息是创建了一个叫frameworkslist,然后推入了两个元素,分别为angularbackbone,返回的是list的长度

    client.lrange('frameworks', 0, -1, function(err, reply) {
        console.log(reply); // ['angularjs', 'backbone']
    });
    

    Redis集合(set)

    Redis集合和Redis列表都可以保存多个字符串,不同点在于,Redis集合通过散列表来保证储存的字符串各不相同,而Redis列表中却可以储存相同的字符串,由于Redis集合使用了无序(unordered)的保存方式来保存元素,因此Redis集合不能像链表一样从两侧推入或者弹出元素。不过用户可以通过SADD或者SREM进行添加元素到集合中,或者从集合中删除某特定元素。SISMEMBER可以快速检查某个元素是否存在Redis集合里。或者使用SMEMBERS获取集合内包含的所有元素
    在Nodejs中使用如下

    client.sadd(['tags', 'angularjs', 'backbonejs', 'emberjs'], function(err, reply) {
        console.log(reply); // 3
    });
    

    返回set的长度为3,tags为Redis集合的名字。

    client.smembers('tags', function(err, reply) {
        console.log(reply);
    });
    

    此时会返回[ 'emberjs', 'backbonejs', 'angularjs' ],即集合tags里面的内容


    Redis散列(hash)

    Redis散列可以保存多个键值对之间的映射。和字符串一样,散列的值即可以是字符串,也可以是数字。并且用户可以对这些数值做自增自减操作。

    client.hmset('frameworks', {
        'javascript': 'AngularJS',
        'css': 'Bootstrap',
        'node': 'Express'
    });
    

    Redis的有序集合(zset)

    有序集合和散列一样,用来存储键值对;有序集合的键被称作成员(member),每个成员各不相同;有序集合的值被称为分值(score),分值必须为浮点数,Redis有序集合是唯一一个即可以根据成员访问元素,也可以通过分值以及分值的排列顺序来访问元素的结构


    相关文章

      网友评论

          本文标题:2018-01-05

          本文链接:https://www.haomeiwen.com/subject/zzpsnxtx.html