mongodb,redis,mysql 简要对比
2018-05-24 23:09
721 查看
mongodb:
它是一个内存数据库,数据都是放在内存里面的。
对数据的操作大部分都在内存中,但mongodb并不是单纯的内存数据库。
持久化方式:
mongodb的所有数据实际上是存放在硬盘的,所有要操作的数据通过mmap的方式映射到内存某个区域内。
然后,mongodb就在这块区域里面进行数据修改,避免了零碎的硬盘操作。
至于mmap上的内容flush到硬盘就是操作系统的事情了,所以,如果,mongodb在内存中修改了数据后,mmap数据flush到硬盘之前,系统宕机了,数据就会丢失。
mmap详解链接:
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 |
参见 |
Allfields |
upsert |
创建新对象若查询结果为空。 |
false |
语句块操作
[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]命令 | 描述 |
---|---|
将指定的地理空间位置(纬度、经度、名称)添加到指定的key中 | |
返回两个给定位置之间的距离 | |
返回一个或多个位置元素的Geohash表示 | |
从key里返回所有给定位置元素的位置(经度和纬度) | |
以给定的经纬度为中心,找出某一半径内的元素 | |
找出位于指定范围内的元素,中心点是由给定的位置元素决定 |
Redis键(key)命令
[/code]命令 | 描述 |
---|---|
该命令用于在key存在是删除key。 | |
序列化给定key,并返回被序列化的值。 | |
检查给定key是否存在。 | |
seconds为给定key设置过期时间。 | |
EXPIREAT的作用和EXPIRE类似,都用于为key设置过期时间。不同在于EXPIREAT命令接受的时间参数是UNIX时间戳(unixtimestamp)。 | |
设置key的过期时间亿以毫秒计。 | |
设置key过期时间的时间戳(unixtimestamp)以毫秒计 | |
查找所有符合给定模式(pattern)的key。 | |
将当前数据库的key移动到给定的数据库db当中。 | |
移除key的过期时间,key将持久保持。 | |
以毫秒为单位返回key的剩余的过期时间。 | |
以秒为单位,返回给定key的剩余生存时间(TTL,timetolive)。 | |
从当前数据库中随机返回一个key。 | |
修改key的名称 | |
仅当newkey不存在时,将key改名为newkey。 | |
返回key所储存的值的类型。 |
Redis字符串(String)命令
命令 | 描述 |
---|---|
设置指定key的值 | |
获取指定key的值。 | |
返回key中字符串值的子字符 | |
将给定key的值设为value,并返回key的旧值(oldvalue)。 | |
对key所储存的字符串值,获取指定偏移量上的位(bit)。 | |
获取所有(一个或多个)给定key的值。 | |
对key所储存的字符串值,设置或清除指定偏移量上的位(bit)。 | |
将值value关联到key,并将key的过期时间设为seconds(以秒为单位)。 | |
只有在key不存在时设置key的值。 | |
用value参数覆写给定key所储存的字符串值,从偏移量offset开始。 | |
返回key所储存的字符串值的长度。 | |
同时设置一个或多个key-value对。 | |
同时设置一个或多个key-value对,当且仅当所有给定key都不存在。 | |
这个命令和SETEX命令相似,但它以毫秒为单位设置key的生存时间,而不是像SETEX命令那样,以秒为单位。 | |
将key中储存的数字值增一。 | |
将key所储存的值加上给定的增量值(increment)。 | |
将key所储存的值加上给定的浮点增量值(increment)。 | |
将key中储存的数字值减一。 | |
key所储存的值减去给定的减量值(decrement)。 | |
如果key已经存在并且是一个字符串,APPEND命令将value追加到key原来的值的末尾。 |
Redis哈希(Hash)命令
命令 | 描述 |
---|---|
删除一个或多个哈希表字段 | |
查看哈希表key中,指定的字段是否存在。 | |
获取存储在哈希表中指定字段的值/td> | |
获取在哈希表中指定key的所有字段和值 | |
为哈希表key中的指定字段的整数值加上增量increment。 | |
为哈希表key中的指定字段的浮点数值加上增量increment。 | |
获取所有哈希表中的字段 | |
获取哈希表中字段的数量 | |
获取所有给定字段的值 | |
同时将多个field-value(域-值)对设置到哈希表key中。 | |
将哈希表key中的字段field的值设为value。 | |
只有在字段field不存在时,设置哈希表字段的值。 | |
获取哈希表中所有值 |
Redis列表(List)命令
命令 | 描述 |
---|---|
移出并获取列表的第一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 | |
移出并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 | |
从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它;如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 | |
通过索引获取列表中的元素 | |
在列表的元素前或者后插入元素 | |
获取列表长度 | |
移出并获取列表的第一个元素 | |
将一个或多个值插入到列表头部 | |
将一个或多个值插入到已存在的列表头部 | |
获取列表指定范围内的元素 | |
移除列表元素 | |
通过索引设置列表元素的值 | |
对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。 | |
移除并获取列表最后一个元素 | |
移除列表的最后一个元素,并将该元素添加到另一个列表并返回 | |
在列表中添加一个或多个值 | |
为已存在的列表添加值 |
Redis集合(Set)命令
命令 | 描述 |
---|---|
向集合添加一个或多个成员 | |
获取集合的成员数 | |
返回给定所有集合的差集 | |
返回给定所有集合的差集并存储在destination中 | |
返回给定所有集合的交集 | |
返回给定所有集合的交集并存储在destination中 | |
判断member元素是否是集合key的成员 | |
返回集合中的所有成员 | |
将member元素从source集合移动到destination集合 | |
移除并返回集合中的一个随机元素 | |
返回集合中一个或多个随机数 | |
移除集合中一个或多个成员 | |
返回所有给定集合的并集 | |
所有给定集合的并集存储在destination集合中 | |
迭代集合中的元素 |
Redis有序集合(sortedset)命令
命令 | 描述 |
---|---|
向有序集合添加一个或多个成员,或者更新已存在成员的分数 | |
获取有序集合的成员数 | |
计算在有序集合中指定区间分数的成员数 | |
有序集合中对指定成员的分数加上增量increment | |
计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合key中 | |
在有序集合中计算指定字典区间内成员数量 | |
通过索引区间返回有序集合成指定区间内的成员 | |
通过字典区间返回有序集合的成员 | |
通过分数返回有序集合指定区间内的成员 | |
返回有序集合中指定成员的索引 | |
移除有序集合中的一个或多个成员 | |
移除有序集合中给定的字典区间的所有成员 | |
移除有序集合中给定的排名区间的所有成员 | |
移除有序集合中给定的分数区间的所有成员 | |
返回有序集中指定区间内的成员,通过索引,分数从高到底 | |
返回有序集中指定分数区间内的成员,分数从高到低排序 | |
返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序 | |
返回有序集中,成员的分数值 | |
计算给定的一个或多个有序集的并集,并存储在新的key中 | |
迭代有序集合中的元素(包括元素成员和元素分值) |
RedisHyperLogLog命令
命令 | 描述 |
---|---|
添加指定元素到HyperLogLog中。 | |
返回给定HyperLogLog的基数估算值。 | |
将多个HyperLogLog合并为一个HyperLogLog |
Redis发布订阅命令
命令 | 描述 |
---|---|
订阅一个或多个符合给定模式的频道。 | |
查看订阅与发布系统状态。 | |
将信息发送到指定的频道。 | |
退订所有给定模式的频道。 | |
订阅给定的一个或多个频道的信息。 | |
指退订给定的频道。 |
Redis事务命令
命令 | 描述 |
---|---|
取消事务,放弃执行事务块内的所有命令。 | |
执行所有事务块内的命令。 | |
标记一个事务块的开始。 | |
取消WATCH命令对所有key的监视。 | |
监视一个(或多个)key,如果在事务执行之前这个(或这些)key被其他命令所改动,那么事务将被打断。 |
Redis脚本命令
命令 | 描述 |
---|---|
执行Lua脚本。 | |
执行Lua脚本。 | |
查看指定的脚本是否已经被保存在缓存当中。 | |
从脚本缓存中移除所有脚本。 | |
杀死当前正在运行的Lua脚本。 | |
将脚本script添加到脚本缓存中,但并不立即执行这个脚本。 |
Redis连接命令
命令 | 描述 |
---|---|
验证密码是否正确 | |
打印字符串 | |
查看服务是否运行 | |
关闭当前连接 | |
切换到指定的数据库 |
Redis服务器命令
命令 | 描述 |
---|---|
异步执行一个AOF(AppendOnlyFile)文件重写操作 | |
在后台异步保存当前数据库的数据到磁盘 | |
关闭客户端连接 | |
获取连接到服务器的客户端连接列表 | |
获取连接的名称 | |
在指定时间内终止运行来自客户端的命令 | |
设置当前连接的名称 | |
获取集群节点的映射数组 | |
获取Redis命令详情数组 | |
获取Redis命令总数 | |
获取给定命令的所有键 | |
返回当前服务器时间 | |
获取指定Redis命令描述的数组 | |
获取指定配置参数的值 | |
对启动Redis服务器时所指定的redis.conf配置文件进行改写 | |
修改redis配置参数,无需重启 | |
重置INFO命令中的某些统计数据 | |
返回当前数据库的key的数量 | |
获取key的调试信息 | |
让Redis服务崩溃 | |
删除所有数据库的所有key | |
删除当前数据库的所有key | |
获取Redis服务器的各种信息和统计数值 | |
返回最近一次Redis成功将数据保存到磁盘上的时间,以UNIX时间戳格式表示 | |
实时打印出Redis服务器接收到的命令,调试用 | |
返回主从实例所属的角色 | |
异步保存数据到硬盘 | |
异步保存数据到硬盘,并关闭服务器 | |
将当前服务器转变为指定服务器的从属服务器(slaveserver) | |
管理redis的慢日志 | |
用于复制功能(replication)的内部命令 |
相关文章推荐
- mongodb,redis,mysql 简要对比
- mongodb,redis,mysql 简要对比
- mongodb,redis,mysql 简要对比
- mongodb,redis,mysql 简要对比
- mongodb,redis,mysql 简要对比
- mongodb,redis,mysql简要对比
- mongodb,redis,mysql 简要对比
- mongodb,redis,mysql 简要对比
- mongodb,redis,mysql 简要对比
- MYSQL MONGODB REDIS 同步原理以及高可用性对比
- Redis、Mysql、MongoDB简单结构对比
- mongodb,redis,mysql 对比
- MySQL、Redis、MongoDB对比
- HBase、MongoDB、MySQL、Oracle、Redis--nosql数据库与关系数据库对比
- mysql与mongodb、redis的性能对比,包含源代码
- mongodb、mysql、redis的性能对比
- HBase、Redis、MongoDB、Couchbase、LevelDB主流 NoSQL 数据库的对比(一)
- 关于 redis、memcache、mongoDB 的对比
- redis memcache mongoDB 对比
- NoSQL对比:Cassandra vs MongoDB vs CouchDB vs Redis vs Riak vs HBase vs Membase vs Neo4j