欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

redismemcache和mongodb各自的優點是什么

傅智翔2年前20瀏覽0評論

redismemcache和mongodb各自的優點是什么?

謝邀

redis、memcahce 比較相似,但與 mongodb 完全不同,幾乎沒有可比性。

總的來說 redis/memcache 是基于內存的,講究的是性能,多用作緩存層,比如說存放session。而 mongodb 是面向文檔的,存儲的是類似JSON的非結構化數據,查詢起來非常方便,開發效率高,比較類似傳統SQL關系型https://www.b5b6.com/shujuku/。

普遍認為redis性能明顯好于MemoryCache。所以這里主要比較 Redis 和 Mongodb。

體積

Redis是一個基于內存的鍵值https://www.b5b6.com/shujuku/,它由C語言實現的,以單線程異步的方式工作,與Nginx/ NodeJS工作原理近似。所以文件非常小。編繹出來的主文件還不到 2Mb,在 Linux 服務器上初始只需要占用1Mb左右的內存。

Mongodb安裝包則要大的多,跟mySQL差不多,都是百兆級的。

持久化

Redis是先讀寫內存再異步同步到磁盤,但持久化數據是需要時間的,如果每條記錄都觸發持久化,則性能優勢則體現不出來,這里可能會產生一個問題,就是在數據改動不夠多時,數據還沒有持久化就重啟了系統,這部分數據是有可能丟失的。

這里可以在設置文件中設置與入規則:

save 900 1save 300 10save 60 10000

以上規則表明,如果在1秒內發生900次數據發動,則開始寫入到硬盤。如果10秒發生300次發動,則就持久化。

當你也可以設置成 save 1 1 每次發動都保存到硬盤,但是性能會下降。

MongoDB則不存在內存數據有可能丟失的問題,因為MongoDB每次改動都會寫入https://www.b5b6.com/shujuku/文件。

數據表

Redis沒有嚴格意義上的表,習慣上一般采用 schema:key 形式做為鍵值,其中

schema: 可理解為傳統https://www.b5b6.com/shujuku/中的表名key: 可理解為表中的主鍵

比如將 user:1 中的name設置為kris

HSET user:1 name kris

Mongodb則可將collection當作表

var col = db.collection('createIndexExample1');col.find({}).toArray(function(err, items) {

});

數據寫入

Redis 可以通過 hash set數據類型支持,JSON對象的寫入,不過是二維的,有深層次JSON對象時,需要先序列化成string [JS代碼]

client.hmset(user:1, { username: 'lee', age: '21' }, function(err) { console.log(err)})

實際上執行的則是

hmset user:1 user_name lee age 21

MongoDB支持復雜結構JSON文件的寫入 [JS代碼]

var col = db.collection('createIndexExample1'); col.insert([{a:1, node: {b:1}}], {w:1}, function(err, result) { }});

數據查詢

MongoDB支持對JSON對象的任何層次和數據進行查詢,使用起來非常方便:[JS代碼]

col.find({ a:1 }).toArray(function(err, items) });

Redis 出于性能考慮,不能按照 hash object的值來搜索hash對象。

需要借助一系列的復雜操作才能進行數據查詢,這一點比較接近https://www.b5b6.com/shujuku/的底層。

比如我們有三條學生記錄,存放著ID,名字和姓名 [redis 指令]

# 添加 3 個用戶和信息

hmset user:1 user_name lee age 21hmset user:2 user_name david age 25hmset user:3 user_name chris age 25

如果想要按name和age查詢,則要創建相關的數據集合(set)來作為索引

# 維護age索引sadd age:21 1sadd age:25 2 3# 維護name索引sadd name:lee 1sadd name:david 2sadd name:chris 3

然后,求數據集交集(sinter),實現多條件查詢,比如我們要名字是lee,年齡是25歲的學生,會返回用戶ID

sinter age:25 name:lee

java數組交集,redismemcache和mongodb各自的優點是什么