先導(dǎo)知識:Memcache
Memcache是一個高性能的分布式內(nèi)存對象緩存系統(tǒng),代碼類似于Hash。
已經(jīng)有了Memcache,為什么還要用Redis呢?
下面Memcache的缺點:
- 不支持數(shù)據(jù)持久化存儲
- 不支持主從
- 不支持分片
而對比Redis數(shù)據(jù)庫,以上三點都支持,所以要使用redis。
問題一:為什么redis能這么快?
Redis的訪問速度可達 10萬+QPS(query per second,每秒內(nèi)查詢次數(shù))。
- 完全基于內(nèi)存:絕大部分請求是純粹的內(nèi)存操作,不受限于硬盤讀取速度,故而執(zhí)行效率高
- 數(shù)據(jù)結(jié)構(gòu)簡單,是(key,value)形式,對數(shù)據(jù)的操作也簡單
- 采用單線程也能處理高并發(fā)請求
- 相對于傳統(tǒng)的阻塞I/O,Redis使用多路I/O復(fù)用模型,非阻塞I/O
- 具有原子性操作。
問題二:Redis采用的多路I/O復(fù)用函數(shù)?
多路I/O復(fù)用函數(shù)有:epoll、kqueue、evport、select 鏈接:多路I/O復(fù)用技術(shù)
- 因地制宜,有的系統(tǒng)只有select
- 優(yōu)先選擇時間復(fù)雜度為O(1)的函數(shù)作為底層實現(xiàn)
- 以時間復(fù)雜度為O(n)的select作為保底
- 基于reactor設(shè)計模式監(jiān)聽I/O事件
問題三:Redis的數(shù)據(jù)類型有哪些?(重點?。。?/span>
- string:最基本的數(shù)據(jù)類型,二進制安全,可以存儲任何格式的數(shù)據(jù)(jpg圖片,序列化的對象)
- hash:string元素組成的字典,適合用于存儲對象
- list:列表,特點:先進先出、有序(按添加順序)、可重復(fù)
- set:string元素組成的無序集合,通過hash實現(xiàn),不允許重復(fù)
- sorted set:通過分數(shù)來為集合的成員進行從小到大的排序
- 用于計數(shù)的HyperLogLog
- 用于支持存儲地理位置信息的Geo
Redis的底層數(shù)據(jù)類型基礎(chǔ):
1、簡單動態(tài)字符串;2、鏈表;3、字典;4、跳躍表
5、整數(shù)集合;6、壓縮列表;7、對象
|