1.存储key value以及5种不同的数据结构之间的mapping(映射)
2.redis不使用表格
- memcached只能保存字符串
- 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的长度。所表达的信息是创建了一个叫frameworks
的list
,然后推入了两个元素,分别为angular
和backbone
,返回的是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有序集合是唯一一个即可以根据成员访问元素,也可以通过分值以及分值的排列顺序来访问元素的结构
网友评论