> 文档中心 > Redis外篇之键类型操作(nodejs版)

Redis外篇之键类型操作(nodejs版)


Redis外篇之键类型操作(nodejs版)

文章目录

    • Redis外篇之键类型操作(nodejs版)
      • 操作前准备
      • nodejs连接Redis代码
      • String操作
      • List操作
      • Set操作
      • Hash操作
      • Zset操作
      • 通用操作

操作前准备

node.js访问redis前提条件,安装redis模块

npm install redis

nodejs连接Redis代码

//导入redis模块var redis = require('redis');//新建连接 redis.createClient(端口,ip地址0); 端口参数可以是数值也可以是字符串var client = redis.createClient(6379, 'ip地址');//如果有密码,请认证client.auth("密码"); //如果想要选择其他库,例如3/** * 说明: *      1.Redis不支持自定义数据库的名字; *      2.Redis也不支持为每个数据库设置不同的访问密码; *      3.多个数据库之间并不是完全隔离的,比如FLUSHALL命令可以清空全部数据库的数据; *      4.数据库更像是一种命名空间,而不适宜存储不同应用程序的数据,不同的应用应该使用不同的Redis实例存储数据; *      5.一个空Redis实例占用的内在只有1M左右,所以不用担心多个Redis实例会额外占用很多内存。 */client.select(3,function(error){    if(error) {console.log(error)};    console.log('已切换到数据库3');})

String操作

//-------------------------String 操作--------------------------//// set 设置存储在给定键中的值 返回值'OK'client.set("string key", 20,function(error,info){    if(error){ console.log(error);    }    //"=="相等,但是不严格(字符串'456'和数字456相等);"===":严格相等     if(info == 'OK'){ console.log('在数据库1中set成功')    }});// get 获取存储在给定键中的值 返回值 value或空client.get('string key',function(error,data){    if(error){ console.log(error);    }    console.log(data);})// del 删除存储在给定键中的值(任意类型) 返回值 0或1 0:库中没有要删除的数据;1:删除成功client.del('list',function(error,info){    if(error){ console.log(error);    }    console.log(info);});// incrby 将键存储的值加上整数,返回值 value最后的值,key中的值需要为整数。不然会报错client.incrby('string key',10,function(error,info){    if(error){ console.log(error);    }    console.log(info)    client.get('string key',function(error,data){ console.log(data);    });})// decrby 将键存储的值减去整数 // incrbyfloat 将键存储的值加上浮点数 // append  将值value追加到给定键当前存储值的末尾 返回值 value最后的值 ,这个操作是单纯的拼接,例如整数30 拼 80 等于 3080client.append('string key',80,function(error,info){    if(error){ console.log(error);    }    console.log(info);}) // getrange 获取指定键的index范围内的所有字符组成的子串 返回值 指定范围的子串client.getrange('string key',0,2,function(error,data){    if(error){ console.log(error);    }    console.log(data);}) // setrange 将指定键值从指定偏移量开始的子串设为指定值 ,如果指定的key不存在,其效果与set类似,整数会转为字符串client.setrange('string key1',0,0,function(error,info){    if(error){ console.log(error);    }    console.log(info);})

List操作

//--------------------------list 操作---------------------------//// rpush 将给定值推入列表的右端 返回值 当前列表长度 client.rpush("list",['test1','test2','test3','test4','test5'],function(error,info){    if(error){ console.log(error);    }    console.log(info);}) // lrange 获取列表在给定范围上的所有值 返回值 当前所有值 如果超出范围则返回所有,不报错。client.lrange('list',0,1000,function(error,data){    if(error){ console.log(error);    }    console.log(data);}) // lindex 获取列表在给定位置上的单个元素 // lpop 从列表左端弹出一个值,并返回被弹出的值 // rpop 从列表右端弹出一个值,并返回被弹出的值 // 将列表按指定的index范围裁减, 返回值 OK ,只保留指定范围内的数据client.ltrim('list',10,15,function(error,data){    if(error){ console.log(error);    }    console.log(data);});

Set操作

//---------------------------set 操作---------------------------//// 先清空集合,方便测试client.del('setTest',function(error,info){    if(error){ console.log(error);    }    console.log('清空集合');}) // sadd 将给定元素添加到集合 返回值 插入元素数量client.sadd('setTest',['setTest1','setTest2','setTest3','setTest4'],function(error,info){    if(error){ console.log(error);    }    console.log(info);}); // smembers 返回集合中包含的所有元素 返回值 array(无序),插入和读出的顺序不一定一致client.smembers('setTest',function(error,data){    if(error){ console.log(error);    }    console.log(data);}); // sismenber 检查给定的元素是否存在于集合中 返回值 0/1 0:不存在,1:存在client.sismember('setTest','setTest3',function(error,info){    if(error){ console.log(error);    }    console.log(info);}) // srem 如果给定的元素在集合中,则移除此元素 返回值 0/1 0:没有匹配上,1:匹配上并删除client.srem('setTest','setTest37',function(error,info){    if(error){ console.log(error);    }    console.log(info);}) // scad 返回集合包含的元素的数量 返回值 元素的数量client.scard('setTest',function(error,info){    if(error){ console.log(error);    }    console.log(info);}) // spop 随机地移除集合中的一个元素,并返回此元素 返回值 被删除的元素client.spop('setTest',function(error,info){    if(error){ console.log(error);    }    console.log(info);}) // smove 将指定成员 member 元素从 source 集合移动到 destination 集合 返回值 0/1 0:元素不是 source 集合的成员,并且没有任何操作对 destination 集合执行;1:如果成员元素被成功移除,返回 1 client.smove('setTest','setTest01','setTest4',function(error,info){    if(error){ console.log(error);    }    console.log(info);}) // sdiff 返回那些存在于第一个集合,但不存在于其他集合的元素(差集)client.sdiff('setTest','setTest01',function(error,info){    if(error){ console.log(error);    }    console.log(info)}) // sdiffstore 将sdiff操作的结果存储到指定的键中 第一个参数是存储到的指定集合client.sdiffstore('setTest02','setTest','setTest01',function(error,info){    if(error){ console.log(error);    }    console.log(info);}) // sinter 返回那些同时存在于所有集合中的元素(交集)client.sinter('setTest','setTest01',function(error,info){    if(error){ console.log(error);    }    console.log(info);}) // sinterstore 将sinter操作的结果存储到指定的键中client.sinterstore('setTest03','setTest','setTest01',function(error,info){    if(error){ console.log(error);    }    console.log(info);}) // sunion 返回那些至少存在于一个集合中的元素(并集)client.sunion('setTest','setTest01',function(error,info){    if(error){ console.log(error);    }    console.log(info);}) // sunionstore 将sunion操作的结果存储到指定的键中client.sunionstore('setTest04','setTest','setTest01',function(error,info){    if(error){ console.log(error);    }    console.log(info);})

Hash操作

//---------------------------hash 操作---------------------------//// hset 在散列里面关联起给定的键值对 1(新增)/0(更新) 返回结果为0说明已存在相同 key 的值// 以下两种写法效果想同client.hset("hash key", "hashtest 3", "some value", redis.print);client.hset(["hash key", "hashtest 2", "some other value"], redis.print); // hget 获取指定散列键的值,需要指定到里面一层,不然报错client.hget("hash key","hashtest 3",function(error,data){    if(error){ console.log(error);    }    console.log(data);}) // hgetall 获取散列包含的键值对 返回值 hash键里面的所有键值对,格式为json;client.hgetall("hash key",function(error,data){    if(error){ console.log(error);    }    console.log(data);}) // hdel 如果给定键 存在于散列里面,则移除这个键 返回值 0/1 0:没有存在 1:已移除client.hdel("hash key","hashtest 3",function(error,data){    if(error){ console.log(error);    }    console.log(data);}) // hmset 为散列里面的一个或多个键设置值 返回值 不报错就返回OK// 以下两条命令效果相同client.hmset("hash key",{"hashtest 6":"hashtest 4","hashtest 7":"hashtest 5"},function(error,data){    if(error){ console.log(error);    }    console.log(data);})client.hmset("hash key","hashtest 6","hashtest 4","hashtest 7","hashtest 5",function(error,data){    if(error){ console.log(error);    }    console.log(data);}) // hmget 从散列里面获取一个或多个键的值 返回值 对应结果的列表,格式listclient.hmget("hash key",["hashtest 1","hashtest 2"],function(error,data){    if(error){ console.log(error)    }    console.log(data);}) // hlen 返回散列包含的键值对数量 返回值 键值对数量client.hlen("hash key",function(error,data){    if(error){ console.log(error)    }    console.log(data);}) // hexists 检查给定键是否在散列中 返回值 0/1 0:不存在 1:存在client.hexists('hash key','hashtest 1',function(error,data){    if(error){ console.log(error);    }    console.log(data);}) // hkeys 获取散列包含的所有键 返回值 散列中所有键,格式listclient.hkeys('hash key',function(error,data){    if(error){ console.log(error);    }    console.log(data);}) // hvals 获取散列包含的所有值 返回值 散列中所有值,格式listclient.hvals('hash key',function(error,data){    if(error){ console.log(error);    }    console.log(data);}) // hincrby 为哈希表中的字段值加上指定增量值 返回值 运算后的值 传入的值要为int ,指定的键的值也要为int,浮点数也不可以,如果键不存在,则新增该键并将其值初始化为0后加上指定增量值client.hincrby('hash key',1,123,function(error,info){    if(error){ console.log(error);    }    console.log(info);}) // hincrbyfloat 将存储的键值以指定浮点数增加 返回值 运算后的值 可以加整数client.hincrbyfloat('hash key',1,1,function(error,data){    if(error){ console.log(error);    }    console.log(data);})

Zset操作

//---------------------------zset 操作---------------------------//// zadd 有序集合插入,序号可以一致,如果值一致,更新client.zadd('zsetTest',4,'test5',6,'test6',function(error,info){    if(error){ console.log(error);    }    console.log(info);}) // zrange 根据元素在有序排列中的位置,从中取出元素client.zrange('zsetTest',0,2,function(error,data){    if(error){ console.log(error);    }    console.log(data);}) // zrangebyscore 获取有序集合在给定分值范围内的所有元素,下面语句获取4 <=score <= 10 的数据,返回值为list// 有序集合结构// zsetKey    //score : munberclient.zrangebyscore('zsetTest',4,10,function(error,data){    if(error){ console.log(error);    }    console.log(data);}) // zrem 如果给定成员存在于有序集合,则移除 返回值 移除的个数 client.zrem('zsetTest','test1','test2', 'test3',function(error,info){    if(error){ console.log(error);    }    console.log(info);}) // zcard 获取一个有序集合中的成员数量 有序集的元素个数 返回值 成员数量client.zcard('zsetTest',function(error,data){    if(error){ console.log(error);    }    console.log(data)})

通用操作

//---------------------------keys 操作---------------------------//// del 删除一个(或多个)keys 返回值 0/1 0:没有该键不存在删除;1:已删除client.del('zsetTest',function(error,info){    if(error){ console.log(error);     }    console.log(info);}) // exists 查询一个key是否存在 返回值 0/1 0:不存在 1:存在client.exists('zsetTest',function(error,info){    if(error){ console.log(error);     }    console.log(info);}) // expire 设置一个key的过期的秒数 返回值 0/1 0:不存在 1:已设置 client.expire('setTest02',300,function(error,info){    if(error){ console.log(error);     }    console.log(info);}) // pexpire 设置一个key的过期的毫秒数 返回值 0/1 0:不存在 1:已设置 // expireat 设置一个UNIX时间戳的过期时间 返回值 0/1 0:不存在 1:已设置 // pexpireat 设置一个UNIX时间戳的过期时间(毫秒) 返回值 0/1 0:不存在 1:已设置 // persist 移除key的过期时间 返回值 0/1 0:不存在 1:已设置client.persist('setTest02',function(error,info){    if(error){ console.log(error);    }    console.log(info);})// sort (集合,列表,有序集合)将指定键中的值排序输出,如果要排序字符串,需要加入参数alphaclient.sort('setTest02','alpha',function(error,info){    if(error){ console.log(error);    }    console.log(info);}) // flushdb 清空当前数据库client.flushdb(function(error,info){    if(error){ console.log(error);    }    console.log(info);}) // flushall 清空全部数据库client.flushall(function(error,info){    if(error){ console.log(error);    }    console.log(info);})