redis-基礎常識原理介紹
磁碟 定址:ms
頻寬:g/m
記憶體 定址:ns
頻寬:很大
秒》毫秒》微妙》納秒 磁碟比內存在定址上慢了10w倍
i/o buffer:
磁碟與磁軌、扇區:一扇區 = 512byte , 讀取資料造成索引成本變大
作業系統:無論怎麼讀,都是從系統讀取4k資料(預設)
資料庫:
資料:datapage 儲存量為4k -> 對應磁碟中的4k資料 datapage(定義小了會浪費,定義大了無所謂,因為底層讀取資料還是4k量), 沒有建立索引的情況下,是全量i/o讀取
索引:索引也是使用的4塊儲存模型,索引對資料有乙個指向關係,隨著資料量變大,索引也會增大,索引變向來說也是一筆資料
建表:
關係型資料庫:必須給出schema
型別:位元組寬度
儲存:傾向行級儲存
b+樹:
資料和索引都是儲存在磁碟中
b+樹的樹幹(區間)存在記憶體中,查詢資料->索引區間(記憶體)->把磁碟中的索引讀取到記憶體->從索引中查詢對應的資料->把對應的資料讀取到記憶體->返回查詢結果
問題:如果表很大,效能下降,怎麼解決?
如果表有索引的話(維護索引),寫操作變慢
查詢速度是否變慢?
乙個或少量查詢依然很快
併發大的時候會受因胖頻寬速度影響
快取 memcache
k,v儲存,value沒有型別的概念
redis
簡介:redis是乙個開源(bsd許可),記憶體儲存的資料結構伺服器,可用作資料庫,快取記憶體和訊息佇列**。它支援字串、雜湊表、列表、集合、有序集合,位圖,hyperloglogs等資料型別。內建複製、lua指令碼、lru收回、事務以及不同級別磁碟持久化功能,同時通過redis sentinel提供高可用,通過redis cluster提供自動分割槽。
value有很多資料型別
string
字串型別
數值型別
bitmaps
hashes
lists
sets
sorted sets
問題:如果客戶端從快取取回v中的某乙個元素,memcache與redis進行比較?
memcache : 會返回value所有的資料到客戶端中,服務server網絡卡有瓶頸,客戶端需要實現**解碼,兩個複雜度。
redis:型別不是很重要,reids的server中對每種型別都有自己的方法。
epoll
bio:scoket是阻塞狀態 客戶端1、2請求連線(向核心訪問,檔案識別符號 fd1、fd2) -> 執行緒1(fd1)、執行緒2(fd2)進行訪問 ->執行緒1執行、執行緒2阻塞等待 -> 執行緒1執行結束、執行緒2執行
問題:乙個客戶請求就是乙個執行緒
nio:scoket是同步非阻塞狀態 客戶端1、2請求連線(向核心訪問,檔案識別符號 fd1、fd2) -> 執行緒1進行輪詢(fd1、fd2)-> fd1執行 -> fd1執行結束、fd2執行->fd2執行結束 ----減少執行緒,輪詢發生在使用者空間。
問題:優化了執行緒,乙個執行緒輪詢處理請求,但是如果有1000個fd,代表使用者程序輪詢呼叫1000次核心,成本很大,使用者態頻繁切換核心態。
多路復用nio:批量進行檔案識別符號(select系統呼叫1000個fd,原來的1000次呼叫變成一次呼叫)-> 批量返回存在的資料(1000 -> 有效資料500)-> 再進行read系統呼叫 -> 執行結束 ——使用者空間複雜度降低,減少使用者態和核心態頻繁切換
問題:fd相關資料拷來拷去
epoll偽aio:核心提供了乙個共享空間(共享空間是程序的一部分,也是核心的一部分),應用空間和核心空間共同使用(mmap[紅黑樹、鍊錶]),應用空間不用在自己的私有空間再去維護fd的相關資料,假如有1000個fd直接放儲到共享空間裡的紅黑樹中,沒有了之前的拷貝過程,核心呼叫紅黑樹中的fd,如果fd存在資料則放到鍊錶中,鍊錶的資料就可以通過read系統呼叫來讀取資料,epoll也是nio
redis:redis是單程序,如何變的很快?
客戶端建立連線,先連線的核心
核心通過epoll與redis進行系統呼叫
redis按著檔案識別符號的順序(每連線內的命令順序),進行遍歷呼叫
redis常識 基礎
一 介紹 redis key是二進位制安全的,這意味著可以用任何二進位制序列作為key,從形如 foo 的簡單字串到乙個jpeg檔案的內容都可以。空字串也是有效的key。二 key取值原則 1 鍵不需要太長,消耗記憶體,且在資料查詢這類鍵的計算成本較高。2 鍵不宜過短,可讀性較差。三 string ...
Redis原理介紹
redis是乙個基於key value的快取記憶體系統,類似於memcached,但是支援更複雜的資料結構list set sortedset,並且有持久化的功能。由於近期工作很多地方都用到了它,所以花了不少時間來閱讀文章 編碼實驗,了解一下 redis 都能做些什麼,能有什麼樣的效能表現。首先遇到...
Redis 基礎原理
redis 是速度非常快的非關係型 nosql 記憶體鍵值資料庫,可以儲存鍵和五種不同型別的值之間的對映。在關係型資料庫如mysql中,表的結構比較複雜會包含很多個字段。可以使用查詢語句實現非常複雜的查詢需求,而redis中只能包含鍵和值兩部分,只能通過鍵來查詢或新增值。redis 鍵的型別只能為字...