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