1. 程式人生 > >mongodb,redis,mysql 簡要對比

mongodb,redis,mysql 簡要對比

添加用戶 .get 共享 之前 float head del scribe oar

mongodb:

它是一個內存數據庫,數據都是放在內存裏面的。

對數據的操作大部分都在內存中,但mongodb並不是單純的內存數據庫。

持久化方式:

mongodb的所有數據實際上是存放在硬盤的,所有要操作的數據通過mmap的方式映射到內存某個區域內。

然後,mongodb就在這塊區域裏面進行數據修改,避免了零碎的硬盤操作。

至於mmap上的內容flush到硬盤就是操作系統的事情了,所以,如果,mongodb在內存中修改了數據後,mmap數據flush到硬盤之前,系統宕機了,數據就會丟失。

mmap詳解鏈接:http://www.cnblogs.com/techdoc/archive/2010/12/22/1913521.html

redis:

它就是一個不折不扣的內存數據庫了。

持久化方式:

redis所有數據都是放在內存中的,持久化是使用RDB方式或者aof方式。

解密redis持久化:http://blog.nosqlfan.com/html/3813.html

mysql:

無論數據還是索引都存放在硬盤中。到要使用的時候才交換到內存中。能夠處理遠超過內存總量的數據。

數據量和性能: 當物理內存夠用的時候,redis>mongodb>mysql 當物理內存不夠用的時候,redis和mongodb都會使用虛擬內存。 實際上如果redis要開始虛擬內存,那很明顯要麽加內存條,要麽你換個數據庫了。 但是,mongodb不一樣,只要,業務上能保證,冷熱數據的讀寫比,使得熱數據在物理內存中,mmap的交換較少。 mongodb還是能夠保證性能。有人使用mongodb存儲了上T的數據。 mysql,mysql根本就不需要擔心數據量跟內存下的關系。不過,內存的量跟熱數據的關系會極大地影響性能表現。 當物理內存和虛擬內存都不夠用的時候,估計除了mysql你沒什麽好選擇了。 其實,從數據存儲原理來看,我更傾向於將mongodb歸類為硬盤數據庫,但是使用了mmap作為加速的手段而已。 簡說mmap:
mmap系統調用並不是完全為了用於共享內存而設計的。它本身提供了不同於一般對普通文件的訪問方式,進程可以像讀寫內存一樣對普通文件進行操作。 mmap 系統調用使得進程之間通過映射同一個普通文件實現共享內存。普通文件被映射到進程地址空間後,進程可以像訪問普通內存一樣對文件進行訪問,不必再調用。 read(),write()等操作。mmap並不分配空間, 只是將文件映射到調用進程的地址空間裏, 然後你就可以用memcpy等操作寫文件, 而不用write()了.寫完後用msync()同步一下, 你所寫的內容就保存到文件裏了. 不過這種方式沒辦法增加文件的長度, 因為要映射的長度在調用mmap()的時候就決定了。

MongoDB和Redis都是NoSQL,采用結構型數據存儲。二者在使用場景中,存在一定的區別,這也主要由於二者在內存映射的處理過程,持久化的處理方法不同。

MongoDB建議集群部署,更多的考慮到集群方案,Redis更偏重於進程順序寫入,雖然支持集群,也僅限於主-從模式。

比較指標 MongoDB(v2.4.9) Redis(v2.4.17) 比較說明
實現語言 c++ c/c++ -
協議 BSON,自定義二進制 類telnet -
性能 依賴內存,TPS較高 依賴內存,TPS非常高 Redis優於MongoDB
可操作性 豐富的數據表達,索引;最類似於關系型數據庫,支持豐富的查詢語句 數據豐富,較少的IO MongoDB優於Redis
內存及存儲 適合大數據量存儲,依賴系統虛擬內存,采用鏡像文件存儲;內存占用率比較高,官方建議獨立部署在64位系統 Redis2.0後支持虛擬內存特性(VM) 突破物理內存限制;數據可以設置時效性,類似於memcache 不同的應用場景,各有千秋
可用性 支持master-slave,replicatset(內部采用paxos選舉算法,自動故障恢復),auto sharding機制,對客戶端屏蔽了故障轉移和切片機制 依賴客戶端來實現分布式讀寫;主從復制時,每次從節點重新連接主節點都要依賴整個快照,無增量復制;不支持auto sharding,需要依賴程序設定一致性hash機制 MongoDB優於Redis;單點問題上,MongoDB應用簡單,相對用戶透明,Redis比較復雜,需要客戶端主動解決.(MongoDB一般使用replicasets和sharding相結合,replicasets側重高可用性以及高可靠,sharding側重性能,水平擴展)
可靠性 從1.8版本後,采用binlog方式(類似Mysql) 支持持久化 依賴快照進行持久化;AOF增強可靠性;增強性的同時,影響訪問性能

一致性 不支持事務,靠客戶端保證 支持事務,比較脆,僅能保證事務中的操作按順序執行 Redis優於MongoDB
數據分析 內置數據分析功能(mapreduce) 不支持 MongoDB優於Redis
應用場景 海量數據的訪問效率提升 較小數據量的性能和運算 MongoDB優於Redis

分類: Redis

http://www.cnblogs.com/chinesern/p/5581422.html

1\redis和mongodb,mysql


Redis是完全在內存中保存數據的數據庫,使用磁盤只是為了持久性目的,Redis數據全部存在內存,定期寫入磁盤,當內存不夠時,可以選擇指定的LRU算法刪除數據,持久化是使用RDB方式或者aof方式。


mongodb是文檔型的非關系型數據庫,MongoDB更類似MySQL,支持字段索引、遊標操作,其優勢在於查詢功能比較強大,擅長查詢JSON數據,能存儲海量數據,但是不支持事務。


mongodb的所有數據實際上是存放在硬盤的,所有要操作的數據通過mmap的方式映射到內存某個區域內。
然後,mongodb就在這塊區域裏面進行數據修改,避免了零碎的硬盤操作。
至於mmap上的內容flush到硬盤就是操作系統的事情了,所以,如果,mongodb在內存中修改了數據後,mmap數據flush到硬盤之前,系統宕機了,數據就會丟失。


mysql:
無論數據還是索引都存放在硬盤中。到要使用的時候才交換到內存中。能夠處理遠超過內存總量的數據。


數據量和性能:
當物理內存夠用的時候,redis>mongodb>mysql
當物理內存不夠用的時候,redis和mongodb都會使用虛擬內存。
實際上如果redis要開始虛擬內存,那很明顯要麽加內存條,要麽你換個數據庫了。
但是,mongodb不一樣,只要,業務上能保證,冷熱數據的讀寫比,使得熱數據在物理內存中,mmap的交換較少。
mongodb還是能夠保證性能。有人使用mongodb存儲了上T的數據。
mysql,mysql根本就不需要擔心數據量跟內存的關系。




Redis 事務支持比較弱,只能保證事務中的每個操作連續執行
mongodb不支持事務


MongoDB 內置了數據分析的功能(mapreduce),Redis不支持


Redis只能使用單線程,性能受限於CPU性能

成功啟動MongoDB後,再打開一個命令行窗口輸入mongo,就可以進行數據庫的一些操作。

輸入help可以看到基本操作命令:

show dbs:顯示數據庫列表
show collections:顯示當前數據庫中的集合(類似關系數據庫中的表)
show users:顯示用戶

use <db name>:切換當前數據庫,這和MS-SQL裏面的意思一樣
db.help():顯示數據庫操作命令,裏面有很多的命令
db.foo.help():顯示集合操作命令,同樣有很多的命令,foo指的是當前數據庫下,一個叫foo的集合,並非真正意義上的命令
db.foo.find():對於當前數據庫中的foo集合進行數據查找(由於沒有條件,會列出所有數據)
db.foo.find( { a : 1 } ):對於當前數據庫中的foo集合進行查找,條件是數據中有一個屬性叫a,且a的值為1

MongoDB沒有創建數據庫的命令,但有類似的命令。

如:如果你想創建一個“myTest”的數據庫,先運行use myTest命令,之後就做一些操作(如:db.createCollection(‘user‘)),這樣就可以創建一個名叫“myTest”的數據庫。

數據庫常用命令

1、Help查看命令提示

help

db.help();

db.yourColl.help();

db.youColl.find().help();

rs.help();

2、切換/創建數據庫

use yourDB; 當創建一個集合(table)的時候會自動創建當前數據庫

3、查詢所有數據庫

show dbs;

4、刪除當前使用數據庫

db.dropDatabase();

5、從指定主機上克隆數據庫

db.cloneDatabase(“127.0.0.1”); 將指定機器上的數據庫的數據克隆到當前數據庫

6、從指定的機器上復制指定數據庫數據到某個數據庫

db.copyDatabase("mydb", "temp", "127.0.0.1");將本機的mydb的數據復制到temp數據庫中

7、修復當前數據庫

db.repairDatabase();

8、查看當前使用的數據庫

db.getName();

db; db和getName方法是一樣的效果,都可以查詢當前使用的數據庫

9、顯示當前db狀態

db.stats();

10、當前db版本

db.version();

11、查看當前db的鏈接機器地址

db.getMongo();

Collection聚集集合

1、創建一個聚集集合(table)

db.createCollection(“collName”, {size: 20, capped: 5, max: 100});

2、得到指定名稱的聚集集合(table)

db.getCollection("account");

3、得到當前db的所有聚集集合

db.getCollectionNames();

4、顯示當前db所有聚集索引的狀態

db.printCollectionStats();

用戶相關

1、添加一個用戶

db.addUser("name");

db.addUser("userName", "pwd123", true); 添加用戶、設置密碼、是否只讀

2、數據庫認證、安全模式

db.auth("userName", "123123");

3、顯示當前所有用戶

show users;

4、刪除用戶

db.removeUser("userName");

其他 1、查詢之前的錯誤信息 db.getPrevError(); 2、清除錯誤記錄 db.resetError(); 查看聚集集合基本信息
1、查看幫助  db.yourColl.help();
2、查詢當前集合的數據條數  db.yourColl.count();
3、查看數據空間大小 db.userInfo.dataSize();
4、得到當前聚集集合所在的db db.userInfo.getDB();
5、得到當前聚集的狀態 db.userInfo.stats();
6、得到聚集集合總大小 db.userInfo.totalSize();
7、聚集集合儲存空間大小 db.userInfo.storageSize();
8、Shard版本信息  db.userInfo.getShardVersion()
9、聚集集合重命名 db.userInfo.renameCollection("users"); 將userInfo重命名為users
10、刪除當前聚集集合 db.userInfo.drop();

聚集集合查詢

1、查詢所有記錄
db.userInfo.find();
相當於:select* from userInfo;
默認每頁顯示20條記錄,當顯示不下的情況下,可以用it叠代命令查詢下一頁數據。註意:鍵入it命令不能帶“;”
但是你可以設置每頁顯示數據的大小,用DBQuery.shellBatchSize= 50;這樣每頁就顯示50條記錄了。
 
2、查詢去掉後的當前聚集集合中的某列的重復數據
db.userInfo.distinct("name");
會過濾掉name中的相同數據
相當於:select distict name from userInfo;
 
3、查詢age = 22的記錄
db.userInfo.find({"age": 22});
相當於: select * from userInfo where age = 22;
 
4、查詢age > 22的記錄
db.userInfo.find({age: {$gt: 22}});
相當於:select * from userInfo where age >22;
 
5、查詢age < 22的記錄
db.userInfo.find({age: {$lt: 22}});
相當於:select * from userInfo where age <22;
 
6、查詢age >= 25的記錄
db.userInfo.find({age: {$gte: 25}});
相當於:select * from userInfo where age >= 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 * from userInfo where name like ‘%mongo%’;
 
10、查詢name中以mongo開頭的
db.userInfo.find({name: /^mongo/});
select * from userInfo where name like ‘mongo%’;
 
11、查詢指定列name、age數據
db.userInfo.find({}, {name: 1, age: 1});
相當於:select name, age from userInfo;
當然name也可以用true或false,當用ture的情況下河name:1效果一樣,如果用false就是排除name,顯示name以外的列信息。
 
12、查詢指定列name、age數據, age > 25
db.userInfo.find({age: {$gt: 25}}, {name: 1, age: 1});
相當於:select name, age from userInfo where age >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 * from userInfo where name = ‘zhangsan’ and age = ‘22’;
 
15、查詢前5條數據
db.userInfo.find().limit(5);
相當於:selecttop 5 * from userInfo;
 
16、查詢10條以後的數據
db.userInfo.find().skip(10);
相當於:select * from userInfo where id not in (
selecttop 10 * from userInfo
);
 
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 * from userInfo where age = 22 or age = 25;
 
19、查詢第一條數據
db.userInfo.findOne();
相當於:selecttop 1 * from userInfo;
db.userInfo.find().limit(1);
 
20、查詢某個結果集的記錄條數
db.userInfo.find({age: {$gte: 25}}).count();
相當於:select count(*) from userInfo where age >= 20;
 
21、按照某列進行排序
db.userInfo.find({sex: {$exists: true}}).count();
相當於:select count(sex) from userInfo;

索引

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();

修改、添加、刪除集合數據

1、添加
db.users.save({name: ‘zhangsan’, age: 25, sex: true});
添加的數據的數據列,沒有固定,根據添加的數據為準
 
2、修改
db.users.update({age: 25}, {$set: {name: ‘changeName‘}}, false, true);
相當於:update users set name = ‘changeName’ where age = 25;
 
db.users.update({name: ‘Lisi‘}, {$inc: {age: 50}}, false, true);
相當於:update users set age = age + 50 where name = ‘Lisi’;
 
db.users.update({name: ‘Lisi‘}, {$inc: {age: 50}, $set: {name: ‘hoho‘}}, false, true);
相當於:update users set age = age + 50, name = ‘hoho’ where name = ‘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
});

updateremove 其中一個是必須的參數; 其他參數可選。

參數

詳解

默認值

query

查詢過濾條件

{}

sort

如果多個文檔符合查詢過濾條件,將以該參數指定的排列方式選擇出排在首位的對象,該對象將被操作

{}

remove

若為true,被選中對象將在返回前被刪除

N/A

update

一個 修改器對象

N/A

new

若為true,將返回修改後的對象而不是原始對象。在刪除操作中,該參數被忽略。

false

fields

參見Retrieving a Subset of Fields (1.5.0+)

All fields

upsert

創建新對象若查詢結果為空。 示例 (1.5.4+)

false

語句塊操作

1、簡單Hello World
print("Hello World!");
這種寫法調用了print函數,和直接寫入"Hello World!"的效果是一樣的;
 
2、將一個對象轉換成json
tojson(new Object());
tojson(new Object(‘a‘));
 
3、循環添加數據
> for (var i = 0; i < 30; i++) {
... db.users.save({name: "u_" + i, age: 22 + i, sex: i % 2});
... };
這樣就循環添加了30條數據,同樣也可以省略括號的寫法
> for (var i = 0; i < 30; i++) db.users.save({name: "u_" + i, age: 22 + i, sex: i % 2});
也是可以的,當你用db.users.find()查詢的時候,顯示多條數據而無法一頁顯示的情況下,可以用it查看下一頁的信息;
 
4、find 遊標查詢
>var cursor = db.users.find();
> while (cursor.hasNext()) { 
    printjson(cursor.next()); 
}
這樣就查詢所有的users信息,同樣可以這樣寫
var cursor = db.users.find();
while (cursor.hasNext()) { printjson(cursor.next); }
同樣可以省略{}號
 
5、forEach叠代循環
db.users.find().forEach(printjson);
forEach中必須傳遞一個函數來處理每條叠代的數據信息
 
6、將find遊標當數組處理
var cursor = db.users.find();
cursor[4];
取得下標索引為4的那條數據
既然可以當做數組處理,那麽就可以獲得它的長度:cursor.length();或者cursor.count();
那樣我們也可以用循環顯示數據
for (var i = 0, len = c.length(); i < len; i++) printjson(c[i]);
 
7、將find遊標轉換成數組
> var arr = 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) 命令

命令描述
Redis GEOADD 命令 將指定的地理空間位置(緯度、經度、名稱)添加到指定的key中
Redis GEODIST 命令 返回兩個給定位置之間的距離
Redis GEOHASH 命令 返回一個或多個位置元素的 Geohash 表示
Redis GEOPOS 命令 從key裏返回所有給定位置元素的位置(經度和緯度)
Redis GEORADIUS 命令 以給定的經緯度為中心, 找出某一半徑內的元素
Redis GEORADIUSBYMEMBER 命令 找出位於指定範圍內的元素,中心點是由給定的位置元素決定

Redis 鍵(key) 命令

命令描述
Redis DEL 命令 該命令用於在 key 存在是刪除 key。
Redis Dump 命令 序列化給定 key ,並返回被序列化的值。
Redis EXISTS 命令 檢查給定 key 是否存在。
Redis Expire 命令 seconds 為給定 key 設置過期時間。
Redis Expireat 命令 EXPIREAT 的作用和 EXPIRE 類似,都用於為 key 設置過期時間。 不同在於 EXPIREAT 命令接受的時間參數是 UNIX 時間戳(unix timestamp)。
Redis PEXPIREAT 命令 設置 key 的過期時間億以毫秒計。
Redis PEXPIREAT 命令 設置 key 過期時間的時間戳(unix timestamp) 以毫秒計
Redis Keys 命令 查找所有符合給定模式( pattern)的 key 。
Redis Move 命令 將當前數據庫的 key 移動到給定的數據庫 db 當中。
Redis PERSIST 命令 移除 key 的過期時間,key 將持久保持。
Redis Pttl 命令 以毫秒為單位返回 key 的剩余的過期時間。
Redis TTL 命令 以秒為單位,返回給定 key 的剩余生存時間(TTL, time to live)。
Redis RANDOMKEY 命令 從當前數據庫中隨機返回一個 key 。
Redis Rename 命令 修改 key 的名稱
Redis Renamenx 命令 僅當 newkey 不存在時,將 key 改名為 newkey 。
Redis Type 命令 返回 key 所儲存的值的類型。

Redis 字符串(String) 命令

命令描述
Redis SET 命令 設置指定 key 的值
Redis Get 命令 獲取指定 key 的值。
Redis Getrange 命令 返回 key 中字符串值的子字符
Redis Getset 命令 將給定 key 的值設為 value ,並返回 key 的舊值(old value)。
Redis Getbit 命令 對 key 所儲存的字符串值,獲取指定偏移量上的位(bit)。
Redis Mget 命令 獲取所有(一個或多個)給定 key 的值。
Redis Setbit 命令 對 key 所儲存的字符串值,設置或清除指定偏移量上的位(bit)。
Redis Setex 命令 將值 value 關聯到 key ,並將 key 的過期時間設為 seconds (以秒為單位)。
Redis Setnx 命令 只有在 key 不存在時設置 key 的值。
Redis Setrange 命令 用 value 參數覆寫給定 key 所儲存的字符串值,從偏移量 offset 開始。
Redis Strlen 命令 返回 key 所儲存的字符串值的長度。
Redis Mset 命令 同時設置一個或多個 key-value 對。
Redis Msetnx 命令 同時設置一個或多個 key-value 對,當且僅當所有給定 key 都不存在。
Redis Psetex 命令 這個命令和 SETEX 命令相似,但它以毫秒為單位設置 key 的生存時間,而不是像 SETEX 命令那樣,以秒為單位。
Redis Incr 命令 將 key 中儲存的數字值增一。
Redis Incrby 命令 將 key 所儲存的值加上給定的增量值(increment) 。
Redis Incrbyfloat 命令 將 key 所儲存的值加上給定的浮點增量值(increment) 。
Redis Decr 命令 將 key 中儲存的數字值減一。
Redis Decrby 命令 key 所儲存的值減去給定的減量值(decrement) 。
Redis Append 命令 如果 key 已經存在並且是一個字符串, APPEND 命令將 value 追加到 key 原來的值的末尾。

Redis 哈希(Hash) 命令

命令描述
Redis Hdel 命令 刪除一個或多個哈希表字段
Redis Hexists 命令 查看哈希表 key 中,指定的字段是否存在。
Redis Hget 命令 獲取存儲在哈希表中指定字段的值/td>
Redis Hgetall 命令 獲取在哈希表中指定 key 的所有字段和值
Redis Hincrby 命令 為哈希表 key 中的指定字段的整數值加上增量 increment 。
Redis Hincrbyfloat 命令 為哈希表 key 中的指定字段的浮點數值加上增量 increment 。
Redis Hkeys 命令 獲取所有哈希表中的字段
Redis Hlen 命令 獲取哈希表中字段的數量
Redis Hmget 命令 獲取所有給定字段的值
Redis Hmset 命令 同時將多個 field-value (域-值)對設置到哈希表 key 中。
Redis Hset 命令 將哈希表 key 中的字段 field 的值設為 value 。
Redis Hsetnx 命令 只有在字段 field 不存在時,設置哈希表字段的值。
Redis Hvals 命令 獲取哈希表中所有值

Redis 列表(List) 命令

命令描述
Redis Blpop 命令 移出並獲取列表的第一個元素, 如果列表沒有元素會阻塞列表直到等待超時或發現可彈出元素為止。
Redis Brpop 命令 移出並獲取列表的最後一個元素, 如果列表沒有元素會阻塞列表直到等待超時或發現可彈出元素為止。
Redis Brpoplpush 命令 從列表中彈出一個值,將彈出的元素插入到另外一個列表中並返回它; 如果列表沒有元素會阻塞列表直到等待超時或發現可彈出元素為止。
Redis Lindex 命令 通過索引獲取列表中的元素
Redis Linsert 命令 在列表的元素前或者後插入元素
Redis Llen 命令 獲取列表長度
Redis Lpop 命令 移出並獲取列表的第一個元素
Redis Lpush 命令 將一個或多個值插入到列表頭部
Redis Lpushx 命令 將一個或多個值插入到已存在的列表頭部
Redis Lrange 命令 獲取列表指定範圍內的元素
Redis Lrem 命令 移除列表元素
Redis Lset 命令 通過索引設置列表元素的值
Redis Ltrim 命令 對一個列表進行修剪(trim),就是說,讓列表只保留指定區間內的元素,不在指定區間之內的元素都將被刪除。
Redis Rpop 命令 移除並獲取列表最後一個元素
Redis Rpoplpush 命令 移除列表的最後一個元素,並將該元素添加到另一個列表並返回
Redis Rpush 命令 在列表中添加一個或多個值
Redis Rpushx 命令 為已存在的列表添加值

Redis 集合(Set) 命令

命令描述
Redis Sadd 命令 向集合添加一個或多個成員
Redis Scard 命令 獲取集合的成員數
Redis Sdiff 命令 返回給定所有集合的差集
Redis Sdiffstore 命令 返回給定所有集合的差集並存儲在 destination 中
Redis Sinter 命令 返回給定所有集合的交集
Redis Sinterstore 命令 返回給定所有集合的交集並存儲在 destination 中
Redis Sismember 命令 判斷 member 元素是否是集合 key 的成員
Redis Smembers 命令 返回集合中的所有成員
Redis Smove 命令 將 member 元素從 source 集合移動到 destination 集合
Redis Spop 命令 移除並返回集合中的一個隨機元素
Redis Srandmember 命令 返回集合中一個或多個隨機數
Redis Srem 命令 移除集合中一個或多個成員
Redis Sunion 命令 返回所有給定集合的並集
Redis Sunionstore 命令 所有給定集合的並集存儲在 destination 集合中
Redis Sscan 命令 叠代集合中的元素

Redis 有序集合(sorted set) 命令

命令描述
Redis Zadd 命令 向有序集合添加一個或多個成員,或者更新已存在成員的分數
Redis Zcard 命令 獲取有序集合的成員數
Redis Zcount 命令 計算在有序集合中指定區間分數的成員數
Redis Zincrby 命令 有序集合中對指定成員的分數加上增量 increment
Redis Zinterstore 命令 計算給定的一個或多個有序集的交集並將結果集存儲在新的有序集合 key 中
Redis Zlexcount 命令 在有序集合中計算指定字典區間內成員數量
Redis Zrange 命令 通過索引區間返回有序集合成指定區間內的成員
Redis Zrangebylex 命令 通過字典區間返回有序集合的成員
Redis Zrangebyscore 命令 通過分數返回有序集合指定區間內的成員
Redis Zrank 命令 返回有序集合中指定成員的索引
Redis Zrem 命令 移除有序集合中的一個或多個成員
Redis Zremrangebylex 命令 移除有序集合中給定的字典區間的所有成員
Redis Zremrangebyrank 命令 移除有序集合中給定的排名區間的所有成員
Redis Zremrangebyscore 命令 移除有序集合中給定的分數區間的所有成員
Redis Zrevrange 命令 返回有序集中指定區間內的成員,通過索引,分數從高到底
Redis Zrevrangebyscore 命令 返回有序集中指定分數區間內的成員,分數從高到低排序
Redis Zrevrank 命令 返回有序集合中指定成員的排名,有序集成員按分數值遞減(從大到小)排序
Redis Zscore 命令 返回有序集中,成員的分數值
Redis Zunionstore 命令 計算給定的一個或多個有序集的並集,並存儲在新的 key 中
Redis Zscan 命令 叠代有序集合中的元素(包括元素成員和元素分值)

Redis HyperLogLog 命令

命令描述
Redis Pfadd 命令 添加指定元素到 HyperLogLog 中。
Redis Pfcount 命令 返回給定 HyperLogLog 的基數估算值。
Redis Pgmerge 命令 將多個 HyperLogLog 合並為一個 HyperLogLog

Redis 發布訂閱 命令

命令描述
Redis Psubscribe 命令 訂閱一個或多個符合給定模式的頻道。
Redis Pubsub 命令 查看訂閱與發布系統狀態。
Redis Publish 命令 將信息發送到指定的頻道。
Redis Punsubscribe 命令 退訂所有給定模式的頻道。
Redis Subscribe 命令 訂閱給定的一個或多個頻道的信息。
Redis Unsubscribe 命令 指退訂給定的頻道。

Redis 事務 命令

命令描述
Redis Discard 命令 取消事務,放棄執行事務塊內的所有命令。
Redis Exec 命令 執行所有事務塊內的命令。
Redis Multi 命令 標記一個事務塊的開始。
Redis Unwatch 命令 取消 WATCH 命令對所有 key 的監視。
Redis Watch 命令 監視一個(或多個) key ,如果在事務執行之前這個(或這些) key 被其他命令所改動,那麽事務將被打斷。

Redis 腳本 命令

命令描述
Redis Eval 命令 執行 Lua 腳本。
Redis Evalsha 命令 執行 Lua 腳本。
Redis Script Exists 命令 查看指定的腳本是否已經被保存在緩存當中。
Redis Script Flush 命令 從腳本緩存中移除所有腳本。
Redis Script kill 命令 殺死當前正在運行的 Lua 腳本。
Redis Script Load 命令 將腳本 script 添加到腳本緩存中,但並不立即執行這個腳本。

Redis 連接 命令

命令描述
Redis Auth 命令 驗證密碼是否正確
Redis Echo 命令 打印字符串
Redis Ping 命令 查看服務是否運行
Redis Quit 命令 關閉當前連接
Redis Select 命令 切換到指定的數據庫

Redis 服務器 命令

命令描述
Redis Bgrewriteaof 命令 異步執行一個 AOF(AppendOnly File) 文件重寫操作
Redis Bgsave 命令 在後臺異步保存當前數據庫的數據到磁盤
Redis Client Kill 命令 關閉客戶端連接
Redis Client List 命令 獲取連接到服務器的客戶端連接列表
Redis Client Getname 命令 獲取連接的名稱
Redis Client Pause 命令 在指定時間內終止運行來自客戶端的命令
Redis Client Setname 命令 設置當前連接的名稱
Redis Cluster Slots 命令 獲取集群節點的映射數組
Redis Command 命令 獲取 Redis 命令詳情數組
Redis Command Count 命令 獲取 Redis 命令總數
Redis Command Getkeys 命令 獲取給定命令的所有鍵
Redis Time 命令 返回當前服務器時間
Redis Command Info 命令 獲取指定 Redis 命令描述的數組
Redis Config Get 命令 獲取指定配置參數的值
Redis Config rewrite 命令 對啟動 Redis 服務器時所指定的 redis.conf 配置文件進行改寫
Redis Config Set 命令 修改 redis 配置參數,無需重啟
Redis Config Resetstat 命令 重置 INFO 命令中的某些統計數據
Redis Dbsize 命令 返回當前數據庫的 key 的數量
Redis Debug Object 命令 獲取 key 的調試信息
Redis Debug Segfault 命令 讓 Redis 服務崩潰
Redis Flushall 命令 刪除所有數據庫的所有key
Redis Flushdb 命令 刪除當前數據庫的所有key
Redis Info 命令 獲取 Redis 服務器的各種信息和統計數值
Redis Lastsave 命令 返回最近一次 Redis 成功將數據保存到磁盤上的時間,以 UNIX 時間戳格式表示
Redis Monitor 命令 實時打印出 Redis 服務器接收到的命令,調試用
Redis Role 命令 返回主從實例所屬的角色
Redis Save 命令 異步保存數據到硬盤
Redis Shutdown 命令 異步保存數據到硬盤,並關閉服務器
Redis Slaveof 命令 將當前服務器轉變為指定服務器的從屬服務器(slave server)
Redis Showlog 命令 管理 redis 的慢日誌
Redis Sync 命令 用於復制功能(replication)的內部命令

mongodb,redis,mysql 簡要對比