redis介绍

Redis 是一个高性能的key-value数据库。它提供了Java,C/C++,C#,PHP,nodejs,Perl,Object-C,Python等客户端。

它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

redis及node redis方法

set(key,value,[EX|PX],[NX|XX])

描述:set设置key为保持字符串value

KEY:键名

VALUE:键值

EX:设置指定的过期时间,以秒为单位

PX:设置指定的过期时间,以毫秒为单位

NX:仅设置密钥(如果密钥尚不存在)

XX:仅设置密钥(如果密钥已存在)

注意:set命令可以替换setnx(),setex(),psetex(),未来会被废弃,故不做深纠。

const redis = require("redis");
const client = redis.createClient();

client.set("key","some string");
client.set("key","some value","EX", 1);    //过期时间为1秒

get(key,callback)

描述:get获取指定key的value,异步返回。

client.get("key1",function(err,data){
    if(err){console.log(err);return false}
    console.log("key1:"+data);
})

append(key,value)

描述:如果key已经存在并且是字符串,则此命令将附加value在字符串的末尾。如果key不存在,则创建它并将其设置为空字符串

client.append("key","追加内容");
client.get("key",function(err,data){
    if(err){console.log(err);return false}
    console.log("追加后key:"+data);
})

bitcount(key,[start],[end],callback)

描述:默认情况下,将检查字符串中包含的所有字节。可以仅在通过附加参数startend的间隔中指定计数操作。start和end可以包含负值,以便从字符串末尾开始索引字节,其中-1是最后一个字节,-2是倒数第二个

client.bitcount("key2",function(err,data){
    console.log("key2:"+data);
})
client.bitcount("key2",0,1,function(err,data){
    console.log("key2:"+data);
})

decr(key,callback)

描述:将存储的数字key减1。此操作仅限于64位有符号整数

client.set("key3", "3");
client.set("key4", "0");

client.decr("key3",function(err,data){
    console.log("key3:"+data);    //2
});
client.decr("key4",function(err,data){
    console.log("key4:"+data);    //-1
})

incr(key)

描述:将存储的数字key加1。

decrby(key,decrement,callback)

描述:与decr类似,不同是减去decrement返回结果值。

client.set("key3", "10");

client.decrby("key3","3",function(err,data){
    console.log("key3:"+data);    //7
});

incrby(key,decrement,callback)

描述:与decrby相反,将key值进行增量。

getrange(key,start,end,callback)

描述:返回存储在字符串值的子串key,由偏移确定startend(两者都包括)。可以使用负偏移以便从字符串的末尾开始提供偏移。所以-1表示最后一个字符,-2表示倒数第二个字符。

client.set("key5", "This is a string");
client.getrange("key5",0,3,function(err,data){
    console.log("key5:"+data);    //This
});

getset(key,value,callback)

描述:获取key值并赋值value。

client.set("key6", "10");

client.getset("key6",4,function(err,data){
    console.log("获取key6:"+data);	//10
    setTimeout(function(){
        client.get("key6",function(err,data){
            console.log("重新获取key6:"+data);	//4
        })
    },2000)
});

mset(key1,value1,key2,value2,...)

描述:将给定键设置为各自的值。 MSET用新值替换现有值,就像常规SET一样。如果您不想覆盖现有值,请参阅MSETNX。

client.mset("key7","5","key8","6");

client.get("key7",function(err,data){
    console.log("key7:"+data);	//5
});
client.get("key8",function(err,data){
    console.log("key8:"+data);	//6
});

mget(key1,key2,key3,...,callback)

描述:返回一个数组包含多个value。

client.mset("key7","5","key8","6");
client.mget("key7","key8",function(err,data){
    console.log(data);    //['5','6']
});

msetnx("key","value","key1","value1",...)

描述:将给定键设置为各自的值。如果全部值设置成功返回1,如果设置失败或只有一个值成功时返回0,此操作不会发现覆盖值情况。

client.msetnx("key9","9","key10","10");
client.msetnx("key10","10","key11","11");

client.mget("key9","key10","key11",function(err,data){
    console.log(data);    //[ '9', '10', null ]
});

strlen(key)

描述:返回字符串长度。一个字母和空格长度都为1。一个汉字长度为3。

client.set("key11", "some string");
client.strlen("key11",function(err,data){
    console.log("len:"+data);    //11
});

client.set("key12", "我");
client.strlen("key12",function(err,data){
    console.log("len:"+data);    //3
});

setrange(key,offset,value)

描述:覆盖存储在key处的字符串的一部分,从指定的偏移量开始,为整个值的长度。如果偏移量大于键处字符串的当前长度,则使用零字节填充字符串。不存在的键被视为空字符串,因此该命令将确保它包含足够大的字符串,以便能够在偏移量处设置

client.set("key13", "hello word");
client.setrange("key13",6,"redis");
client.get("key13",function(err,data){
    if(err){console.log(err);return false}
    console.log("key13:"+data);
});

以下四个方法使用一个示例说明:

hset(key,filed1,value1,filed2,value2,...)

描述:设置field在存储在哈希keyvalue。如果key不存在,则创建一个包含哈希的新密钥。如果field哈希中已经存在,则会被覆盖。

hmset(key,filed1,value1,filed2,value2,...)

描述:将指定的字段设置为存储在其中的哈希值中的相应值 key。此命令将覆盖散列中已存在的任何指定字段。如果key不存在,则创建一个包含哈希的新密钥。

hmget(key,filed1,field2,...,callback)

描述:返回与fields存储在的哈希中 指定的值相关联的值key。对于field散列中不存在的每一个,都nil返回一个值。由于不存在的键被视为空哈希,因此针对不存在的键运行HMGETkey将返回nil值列表。

hgetall(key,callback)

描述:返回存储在的哈希的所有字段和值key。在返回的值中,每个字段名称后跟其值,因此答复的长度是散列大小的两倍。

client.hset("hset name","key1","aa","key2","bb");
client.hset("hset name","key3","cc","key4","dd");
client.hmset("keyname","key7","5","key8","6");

client.hmset("keyobj",{
    id:11,
    value:22,
    name:"hmset obj"
});

client.hmget("hset name","key1","key2","key3","key4",function(err,data){
	console.log("hmget:");
	console.log(data);    //[ 'aa', 'bb', 'cc', 'dd' ]
});

client.hget("keyname","key7",function(err,data){
	console.log("hget key7:");
	console.log(data);    //5
});

client.hgetall("keyobj",function(err,data){
    console.log("obj get style:");
    console.log(data);    //{ id: '11', value: '22', name: 'hmset obj' }
});

client.hgetall("keyname",function(err,data){
	console.log("hgetall:");
	console.log(data);    //{ key7: '5', key8: '6' }
});

hdel(key,filed,callback)

描述:从存储的哈希中删除指定的字段key。忽略此哈希中不存在的指定字段。如果key不存在,则将其视为空哈希,并返回此命令 0

client.hmset("keyobj",{
    id:11,
    value:22,
    name:"hmset obj"
});
client.hgetall("keyobj",function(err,data){
    console.log(data);    //{ id: '11', value: '22', name: 'hmset obj' }
});
client.hdel("keyobj","id");
client.hgetall("keyobj",function(err,data){
    console.log(data);    //{ value: '22', name: 'hmset obj' }
});

hexists(key,filed,callback)

描述:返回是否field存储在哈希中的现有字段key。如果哈希包含field返回1,不包含返回0.

client.hmset("keyobj",{
    id:11,
    value:22,
    name:"hmset obj"
});

client.hexists("keyobj","idb",function(err,data){
    console.log("HEXISTS:"+data);    //0
});

hkeys(key,callback)

描述:返回存储在哈希中的所有字段名称key

hvals(key,callback)

描述:返回存储在哈希值中所有key的value

client.hmset("keyobj",{
    id:11,
    value:22,
    name:"hmset obj"
});
client.hmset("keyobj","node",1);

client.hkeys("keyobj",function(err,data){
    console.log(data);    //[ 'value', 'name', 'id', 'node' ]
});
client.hvals("keyobj",function(err,data){
	console.log(data);    //[ '22', 'hmset obj', '11', '1' ]
});