各位大神,這個是面試題啊,小弟是菜鳥,最好,用比較通俗的話說,最好不要直接百度copy 其他人的,最好是自己處理總結過的,因為,本人已經百度了很多次了。
大家讲道理2017-04-24 09:15:02
是一種非關係型資料庫(NoSQL),是用C/C++寫的,redis的特徵:
採用簡單資料或以鍵值索引的雜湊表,但也支援複雜操作,例如 ZREVRANGEBYSCORE。
INCR & co (適合計算極限值或統計數據)
支援 sets(同時也支援 union/diff/inter)
支援清單(同時也支援隊列;阻塞式 pop操作)
支援雜湊表(帶有多個域的物件)
支援排序 sets(高得分錶,適用於範圍查詢)
Redis支援事務
支援將資料設定成過期資料(類似快速緩衝區設計)
Pub/Sub允許使用者實現訊息機制
至於它有什麼用或怎麼用:
通常局限點來說,Redis也以訊息佇列的形式存在,作為內嵌的List存在,滿足即時的高並發需求。而通常在一個電商類型的資料處理過程之中,有關商品,熱銷,推薦排序的隊列,通常存放在Redis之中,期間也包擴Storm對於Redis列表的讀取和更新。
可以參考這篇文章:Redis應用程式場景
黄舟2017-04-24 09:15:02
redis是內存kv存儲,跟memcache有點類似,很多時候可以互換。一般用於資料庫前面加一層快取。
例如簡單的members表,每次請求可能都要讀取members表,頻繁的讀取可以用redis來快取。
row=redis->get("m_"..id)
if not row then
sql="select * from members where id='"..id.."'";
row=sdo:fetch(sql);
redis->set("m_"..id,row);
end
這個是基本的,也是用的最多的。
redis還有佇列,例如一個請求記錄使用者的操作請求,用redis->lpush(op),從左加入佇列。一個後台服務可以從redis佇列讀取,op=redis->rpop(op),這個就可以完成簡單的先來先服務策略。
另外redis也可以持久化,就是把記憶體的kv資料存到硬碟,斷電之後可以從記憶體載入。
個人不建議使用redis持久化,關掉持久化,只用來做個cache。