您的位置:首页 > 数据库 > Redis

mongodb,redis,mysql 简要对比

2018-05-24 23:09 721 查看

mongodb:

它是一个内存数据库,数据都是放在内存里面的。

对数据的操作大部分都在内存中,但mongodb并不是单纯的内存数据库。

持久化方式:

mongodb的所有数据实际上是存放在硬盘的,所有要操作的数据通过mmap的方式映射到内存某个区域内。

然后,mongodb就在这块区域里面进行数据修改,避免了零碎的硬盘操作。

至于mmap上的内容flush到硬盘就是操作系统的事情了,所以,如果,mongodb在内存中修改了数据后,mmap数据flush到硬盘之前,系统宕机了,数据就会丢失。

mmap详解链接:https://www.geek-share.com/detail/2503986980.html

redis:

它就是一个不折不扣的内存数据库了。

[code]1、查询所有记录
db.userInfo.find();
相当于:select*fromuserInfo;
默认每页显示20条记录,当显示不下的情况下,可以用it迭代命令查询下一页数据。注意:键入it命令不能带“;”
但是你可以设置每页显示数据的大小,用DBQuery.shellBatchSize=50;这样每页就显示50条记录了。
 
2、查询去掉后的当前聚集集合中的某列的重复数据
db.userInfo.distinct("name");
会过滤掉name中的相同数据
相当于:selectdistictnamefromuserInfo;
 
3、查询age=22的记录
db.userInfo.find({"age":22});
相当于:select*fromuserInfowhereage=22;
 
4、查询age>22的记录
db.userInfo.find({age:{$gt:22}});
相当于:select*fromuserInfowhereage>22;
 
5、查询age<22的记录
db.userInfo.find({age:{$lt:22}});
相当于:select*fromuserInfowhereage<22;
 
6、查询age>=25的记录
db.userInfo.find({age:{$gte:25}});
相当于:select*fromuserInfowhereage>=25;
 
7、查询age<=25的记录
db.userInfo.find({age:{$lte:25}});
 
8、查询age>=23并且age<=26
db.userInfo.find({age:{$gte:23,$lte:26}});
 
9、查询name中包含mongo的数据
db.userInfo.find({name:/mongo/});
//相当于%%
select*fromuserInfowherenamelike‘%mongo%’;
 
10、查询name中以mongo开头的
db.userInfo.find({name:/^mongo/});
select*fromuserInfowherenamelike‘mongo%’;
 
11、查询指定列name、age数据
db.userInfo.find({},{name:1,age:1});
相当于:selectname,agefromuserInfo;
当然name也可以用true或false,当用ture的情况下河name:1效果一样,如果用false就是排除name,显示name以外的列信息。
 
12、查询指定列name、age数据,age>25
db.userInfo.find({age:{$gt:25}},{name:1,age:1});
相当于:selectname,agefromuserInfowhereage>25;
 
13、按照年龄排序
升序:db.userInfo.find().sort({age:1});
降序:db.userInfo.find().sort({age:-1});
 
14、查询name=zhangsan,age=22的数据
db.userInfo.find({name:'zhangsan',age:22});
相当于:select*fromuserInfowherename=‘zhangsan’andage=‘22’;
 
15、查询前5条数据
db.userInfo.find().limit(5);
相当于:selecttop5*fromuserInfo;
 
16、查询10条以后的数据
db.userInfo.find().skip(10);
相当于:select*fromuserInfowhereidnotin(
selecttop10*fromuserInfo
);
 
17、查询在5-10之间的数据
db.userInfo.find().limit(10).skip(5);
可用于分页,limit是pageSize,skip是第几页*pageSize
 
18、or与查询
db.userInfo.find({$or:[{age:22},{age:25}]});
相当于:select*fromuserInfowhereage=22orage=25;
 
19、查询第一条数据
db.userInfo.findOne();
相当于:selecttop1*fromuserInfo;
db.userInfo.find().limit(1);
 
20、查询某个结果集的记录条数
db.userInfo.find({age:{$gte:25}}).count();
相当于:selectcount(*)fromuserInfowhereage>=20;
 
21、按照某列进行排序
db.userInfo.find({sex:{$exists:true}}).count();
相当于:selectcount(sex)fromuserInfo;
[/code] [/code]

索引

[code]
[code]1、创建索引
db.userInfo.ensureIndex({name:1});
db.userInfo.ensureIndex({name:1,ts:-1});
 
2、查询当前聚集集合所有索引
db.userInfo.getIndexes();
 
3、查看总索引记录大小
db.userInfo.totalIndexSize();
 
4、读取当前集合的所有index信息
db.users.reIndex();
 
5、删除指定索引
db.users.dropIndex("name_1");
 
6、删除所有索引索引
db.users.dropIndexes();
[/code] [/code]

 修改、添加、删除集合数据

[code]
[code]1、添加
db.users.save({name:‘zhangsan’,age:25,sex:true});
添加的数据的数据列,没有固定,根据添加的数据为准
 
2、修改
db.users.update({age:25},{$set:{name:'changeName'}},false,true);
相当于:updateuserssetname=‘changeName’whereage=25;
 
db.users.update({name:'Lisi'},{$inc:{age:50}},false,true);
相当于:updateuserssetage=age+50wherename=‘Lisi’;
 
db.users.update({name:'Lisi'},{$inc:{age:50},$set:{name:'hoho'}},false,true);
相当于:updateuserssetage=age+50,name=‘hoho’wherename=‘Lisi’;
 
3、删除
db.users.remove({age:132});
 
4、查询修改删除
db.users.findAndModify({
query:{age:{$gte:25}},
sort:{age:-1},
update:{$set:{name:'a2'},$inc:{age:2}},
remove:true
});
 
db.runCommand({findandmodify:"users",
query:{age:{$gte:25}},
sort:{age:-1},
update:{$set:{name:'a2'},$inc:{age:2}},
remove:true
});

update 或 remove 其中一个是必须的参数;其他参数可选。

参数

详解

默认值

query

查询过滤条件

{}

sort

如果多个文档符合查询过滤条件,将以该参数指定的排列方式选择出排在首位的对象,该对象将被操作

{}

remove

若为true,被选中对象将在返回前被删除

N/A

update

一个 修改器对象

N/A

new

若为true,将返回修改后的对象而不是原始对象。在删除操作中,该参数被忽略。

false

fields

参见RetrievingaSubsetofFields (1.5.0+)

Allfields

upsert

创建新对象若查询结果为空。 示例 (1.5.4+)

false

[/code] [/code]

语句块操作

[code]
[code]1、简单HelloWorld
print("HelloWorld!");
这种写法调用了print函数,和直接写入"HelloWorld!"的效果是一样的;
 
2、将一个对象转换成json
tojson(newObject());
tojson(newObject('a'));
 
3、循环添加数据
>for(vari=0;i<30;i++){
...db.users.save({name:"u_"+i,age:22+i,sex:i%2});
...};
这样就循环添加了30条数据,同样也可以省略括号的写法
>for(vari=0;i<30;i++)db.users.save({name:"u_"+i,age:22+i,sex:i%2});
也是可以的,当你用db.users.find()查询的时候,显示多条数据而无法一页显示的情况下,可以用it查看下一页的信息;
 
4、find游标查询
>varcursor=db.users.find();
>while(cursor.hasNext()){
printjson(cursor.next());
}
这样就查询所有的users信息,同样可以这样写
varcursor=db.users.find();
while(cursor.hasNext()){printjson(cursor.next);}
同样可以省略{}号

5、forEach迭代循环
db.users.find().forEach(printjson);
forEach中必须传递一个函数来处理每条迭代的数据信息
 
6、将find游标当数组处理
varcursor=db.users.find();
cursor[4];
取得下标索引为4的那条数据
既然可以当做数组处理,那么就可以获得它的长度:cursor.length();或者cursor.count();
那样我们也可以用循环显示数据
for(vari=0,len=c.length();i<len;i++)printjson(c[i]);
 
7、将find游标转换成数组
>vararr=db.users.find().toArray();
>printjson(arr[2]);
用toArray方法将其转换为数组
 
8、定制我们自己的查询结果
只显示age<=28的并且只显示age这列数据
db.users.find({age:{$lte:28}},{age:1}).forEach(printjson);
db.users.find({age:{$lte:28}},{age:true}).forEach(printjson);
排除age的列
db.users.find({age:{$lte:28}},{age:false}).forEach(printjson);
 
9、forEach传递函数显示信息
db.things.find({x:4}).forEach(function(x){print(tojson(x));});

Redis地理位置(geo)命令

[/code]
命令描述
RedisGEOADD命令 将指定的地理空间位置(纬度、经度、名称)添加到指定的key中
RedisGEODIST命令 返回两个给定位置之间的距离
RedisGEOHASH命令 返回一个或多个位置元素的Geohash表示
RedisGEOPOS命令 从key里返回所有给定位置元素的位置(经度和纬度)
RedisGEORADIUS命令 以给定的经纬度为中心,找出某一半径内的元素
RedisGEORADIUSBYMEMBER命令 找出位于指定范围内的元素,中心点是由给定的位置元素决定

Redis键(key)命令

[/code]
命令描述
RedisDEL命令 该命令用于在key存在是删除key。
RedisDump命令 序列化给定key,并返回被序列化的值。
RedisEXISTS命令 检查给定key是否存在。
RedisExpire命令 seconds为给定key设置过期时间。
RedisExpireat命令 EXPIREAT的作用和EXPIRE类似,都用于为key设置过期时间。不同在于EXPIREAT命令接受的时间参数是UNIX时间戳(unixtimestamp)。
RedisPEXPIREAT命令 设置key的过期时间亿以毫秒计。
RedisPEXPIREAT命令 设置key过期时间的时间戳(unixtimestamp)以毫秒计
RedisKeys命令 查找所有符合给定模式(pattern)的key。
RedisMove命令 将当前数据库的key移动到给定的数据库db当中。
RedisPERSIST命令 移除key的过期时间,key将持久保持。
RedisPttl命令 以毫秒为单位返回key的剩余的过期时间。
RedisTTL命令 以秒为单位,返回给定key的剩余生存时间(TTL,timetolive)。
RedisRANDOMKEY命令 从当前数据库中随机返回一个key。
RedisRename命令 修改key的名称
RedisRenamenx命令 仅当newkey不存在时,将key改名为newkey。
RedisType命令 返回key所储存的值的类型。

Redis字符串(String)命令

命令描述
RedisSET命令 设置指定key的值
RedisGet命令 获取指定key的值。
RedisGetrange命令 返回key中字符串值的子字符
RedisGetset命令 将给定key的值设为value,并返回key的旧值(oldvalue)。
RedisGetbit命令 对key所储存的字符串值,获取指定偏移量上的位(bit)。
RedisMget命令 获取所有(一个或多个)给定key的值。
RedisSetbit命令 对key所储存的字符串值,设置或清除指定偏移量上的位(bit)。
RedisSetex命令 将值value关联到key,并将key的过期时间设为seconds(以秒为单位)。
RedisSetnx命令 只有在key不存在时设置key的值。
RedisSetrange命令 用value参数覆写给定key所储存的字符串值,从偏移量offset开始。
RedisStrlen命令 返回key所储存的字符串值的长度。
RedisMset命令 同时设置一个或多个key-value对。
RedisMsetnx命令 同时设置一个或多个key-value对,当且仅当所有给定key都不存在。
RedisPsetex命令 这个命令和SETEX命令相似,但它以毫秒为单位设置key的生存时间,而不是像SETEX命令那样,以秒为单位。
RedisIncr命令 将key中储存的数字值增一。
RedisIncrby命令 将key所储存的值加上给定的增量值(increment)。
RedisIncrbyfloat命令 将key所储存的值加上给定的浮点增量值(increment)。
RedisDecr命令 将key中储存的数字值减一。
RedisDecrby命令 key所储存的值减去给定的减量值(decrement)。
RedisAppend命令 如果key已经存在并且是一个字符串,APPEND命令将value追加到key原来的值的末尾。

Redis哈希(Hash)命令

命令描述
RedisHdel命令 删除一个或多个哈希表字段
RedisHexists命令 查看哈希表key中,指定的字段是否存在。
RedisHget命令 获取存储在哈希表中指定字段的值/td>
RedisHgetall命令 获取在哈希表中指定key的所有字段和值
RedisHincrby命令 为哈希表key中的指定字段的整数值加上增量increment。
RedisHincrbyfloat命令 为哈希表key中的指定字段的浮点数值加上增量increment。
RedisHkeys命令 获取所有哈希表中的字段
RedisHlen命令 获取哈希表中字段的数量
RedisHmget命令 获取所有给定字段的值
RedisHmset命令 同时将多个field-value(域-值)对设置到哈希表key中。
RedisHset命令 将哈希表key中的字段field的值设为value。
RedisHsetnx命令 只有在字段field不存在时,设置哈希表字段的值。
RedisHvals命令 获取哈希表中所有值

Redis列表(List)命令

命令描述
RedisBlpop命令 移出并获取列表的第一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
RedisBrpop命令 移出并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
RedisBrpoplpush命令 从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它;如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
RedisLindex命令 通过索引获取列表中的元素
RedisLinsert命令 在列表的元素前或者后插入元素
RedisLlen命令 获取列表长度
RedisLpop命令 移出并获取列表的第一个元素
RedisLpush命令 将一个或多个值插入到列表头部
RedisLpushx命令 将一个或多个值插入到已存在的列表头部
RedisLrange命令 获取列表指定范围内的元素
RedisLrem命令 移除列表元素
RedisLset命令 通过索引设置列表元素的值
RedisLtrim命令 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
RedisRpop命令 移除并获取列表最后一个元素
RedisRpoplpush命令 移除列表的最后一个元素,并将该元素添加到另一个列表并返回
RedisRpush命令 在列表中添加一个或多个值
RedisRpushx命令 为已存在的列表添加值

Redis集合(Set)命令

命令描述
RedisSadd命令 向集合添加一个或多个成员
RedisScard命令 获取集合的成员数
RedisSdiff命令 返回给定所有集合的差集
RedisSdiffstore命令 返回给定所有集合的差集并存储在destination中
RedisSinter命令 返回给定所有集合的交集
RedisSinterstore命令 返回给定所有集合的交集并存储在destination中
RedisSismember命令 判断member元素是否是集合key的成员
RedisSmembers命令 返回集合中的所有成员
RedisSmove命令 将member元素从source集合移动到destination集合
RedisSpop命令 移除并返回集合中的一个随机元素
RedisSrandmember命令 返回集合中一个或多个随机数
RedisSrem命令 移除集合中一个或多个成员
RedisSunion命令 返回所有给定集合的并集
RedisSunionstore命令 所有给定集合的并集存储在destination集合中
RedisSscan命令 迭代集合中的元素

Redis有序集合(sortedset)命令

命令描述
RedisZadd命令 向有序集合添加一个或多个成员,或者更新已存在成员的分数
RedisZcard命令 获取有序集合的成员数
RedisZcount命令 计算在有序集合中指定区间分数的成员数
RedisZincrby命令 有序集合中对指定成员的分数加上增量increment
RedisZinterstore命令 计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合key中
RedisZlexcount命令 在有序集合中计算指定字典区间内成员数量
RedisZrange命令 通过索引区间返回有序集合成指定区间内的成员
RedisZrangebylex命令 通过字典区间返回有序集合的成员
RedisZrangebyscore命令 通过分数返回有序集合指定区间内的成员
RedisZrank命令 返回有序集合中指定成员的索引
RedisZrem命令 移除有序集合中的一个或多个成员
RedisZremrangebylex命令 移除有序集合中给定的字典区间的所有成员
RedisZremrangebyrank命令 移除有序集合中给定的排名区间的所有成员
RedisZremrangebyscore命令 移除有序集合中给定的分数区间的所有成员
RedisZrevrange命令 返回有序集中指定区间内的成员,通过索引,分数从高到底
RedisZrevrangebyscore命令 返回有序集中指定分数区间内的成员,分数从高到低排序
RedisZrevrank命令 返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序
RedisZscore命令 返回有序集中,成员的分数值
RedisZunionstore命令 计算给定的一个或多个有序集的并集,并存储在新的key中
RedisZscan命令 迭代有序集合中的元素(包括元素成员和元素分值)

RedisHyperLogLog命令

命令描述
RedisPfadd命令 添加指定元素到HyperLogLog中。
RedisPfcount命令 返回给定HyperLogLog的基数估算值。
RedisPgmerge命令 将多个HyperLogLog合并为一个HyperLogLog

Redis发布订阅命令

命令描述
RedisPsubscribe命令 订阅一个或多个符合给定模式的频道。
RedisPubsub命令 查看订阅与发布系统状态。
RedisPublish命令 将信息发送到指定的频道。
RedisPunsubscribe命令 退订所有给定模式的频道。
RedisSubscribe命令 订阅给定的一个或多个频道的信息。
RedisUnsubscribe命令 指退订给定的频道。

Redis事务命令

命令描述
RedisDiscard命令 取消事务,放弃执行事务块内的所有命令。
RedisExec命令 执行所有事务块内的命令。
RedisMulti命令 标记一个事务块的开始。
RedisUnwatch命令 取消WATCH命令对所有key的监视。
RedisWatch命令 监视一个(或多个)key,如果在事务执行之前这个(或这些)key被其他命令所改动,那么事务将被打断。

Redis脚本命令

命令描述
RedisEval命令 执行Lua脚本。
RedisEvalsha命令 执行Lua脚本。
RedisScriptExists命令 查看指定的脚本是否已经被保存在缓存当中。
RedisScriptFlush命令 从脚本缓存中移除所有脚本。
RedisScriptkill命令 杀死当前正在运行的Lua脚本。
RedisScriptLoad命令 将脚本script添加到脚本缓存中,但并不立即执行这个脚本。

Redis连接命令

命令描述
RedisAuth命令 验证密码是否正确
RedisEcho命令 打印字符串
RedisPing命令 查看服务是否运行
RedisQuit命令 关闭当前连接
RedisSelect命令 切换到指定的数据库

Redis服务器命令

命令描述
RedisBgrewriteaof命令 异步执行一个AOF(AppendOnlyFile)文件重写操作
RedisBgsave命令 在后台异步保存当前数据库的数据到磁盘
RedisClientKill命令 关闭客户端连接
RedisClientList命令 获取连接到服务器的客户端连接列表
RedisClientGetname命令 获取连接的名称
RedisClientPause命令 在指定时间内终止运行来自客户端的命令
RedisClientSetname命令 设置当前连接的名称
RedisClusterSlots命令 获取集群节点的映射数组
RedisCommand命令 获取Redis命令详情数组
RedisCommandCount命令 获取Redis命令总数
RedisCommandGetkeys命令 获取给定命令的所有键
RedisTime命令 返回当前服务器时间
RedisCommandInfo命令 获取指定Redis命令描述的数组
RedisConfigGet命令 获取指定配置参数的值
RedisConfigrewrite命令 对启动Redis服务器时所指定的redis.conf配置文件进行改写
RedisConfigSet命令 修改redis配置参数,无需重启
RedisConfigResetstat命令 重置INFO命令中的某些统计数据
RedisDbsize命令 返回当前数据库的key的数量
RedisDebugObject命令 获取key的调试信息
RedisDebugSegfault命令 让Redis服务崩溃
RedisFlushall命令 删除所有数据库的所有key
RedisFlushdb命令 删除当前数据库的所有key
RedisInfo命令 获取Redis服务器的各种信息和统计数值
RedisLastsave命令 返回最近一次Redis成功将数据保存到磁盘上的时间,以UNIX时间戳格式表示
RedisMonitor命令 实时打印出Redis服务器接收到的命令,调试用
RedisRole命令 返回主从实例所属的角色
RedisSave命令 异步保存数据到硬盘
RedisShutdown命令 异步保存数据到硬盘,并关闭服务器
RedisSlaveof命令 将当前服务器转变为指定服务器的从属服务器(slaveserver)
RedisShowlog命令 管理redis的慢日志
RedisSync命令 用于复制功能(replication)的内部命令
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: