Redis學習筆記(持續更新)

技術支持:Linux基本命令、常用數據結構、Java

Redis簡介

Redis是一種開源、基於鍵值對的存儲服務系統,是高性能Key-Value服務器,支持多種數據結構,有豐富的功能,高可用分佈式支持。

Redis的鍵值可以包括字符串(string)類型,同時它還包括哈希(hash)、列表(list)、集合(set)和 有序集合(sorted set)等數據類型。 對於這些數據類型,你可以執行原子操作。例如:對字符串進行附加操作(append);遞增哈希中的值;向列表中增加元素;計算集合的交集、並集與差集等。

爲了獲得優異的性能,Redis採用了內存中(in-memory)數據集(dataset)的方式。同時,Redis支持數據的持久化,你可以每隔一段時間將數據集轉存到磁盤上(snapshot),或者在日誌尾部追加每一條操作命令(append only file,aof)。

Redis同樣支持主從複製(master-slave replication),並且具有非常快速的非阻塞首次同步( non-blocking first synchronization)、網絡斷開自動重連等功能。同時Redis還具有其它一些特性,其中包括簡單的事物支持、發佈訂閱 ( pub/sub)、管道(pipeline)和虛擬內存(vm)等 。

Redis具有豐富的客戶端,支持現階段流行的大多數編程語言。

 

爲什麼使用Redis

在項目中使用redis,主要是從兩個角度去考慮:性能和併發。當然,redis還具備可以做分佈式鎖等其他功能,但是如果只是爲了分佈式鎖這些其他功能,完全還有其他中間件(如zookpeer等)代替,並不是非要使用redis。因此,這個問題主要從性能和併發兩個角度去答。

1、性能

如下圖所示,我們在碰到需要執行耗時特別久,且結果不頻繁變動的SQL,就特別適合將運行結果放入緩存。這樣,後面的請求就去緩存中讀取,使得請求能夠迅速響應。

2、併發

在大併發的情況下,所有的請求直接訪問數據庫,數據庫會出現連接異常。這個時候,就需要使用redis做一個緩衝操作,讓請求先訪問到redis,而不是直接訪問數據庫。

 

PS:借鑑此篇博客https://blog.csdn.net/hjm4702192/article/details/80518856

 

Redis支持的數據類型

Redis一共支持五種數據類:string(字符串),hash(哈希),list(列表),set(集合)和zset(sorted set有序集合)。

string(字符串):是Redis的最基本的數據類型,一個鍵對應一個值,需要注意是一個鍵值最大存儲512MB。

使用場景:最常規的set/get操作,value可以是String也可以是數字。一般做一些複雜的計數功能的緩存。

 hash(哈希):redis hash是一個鍵值對的集合,是一個string類型的field和value的映射表,適合用於存儲對象

使用場景:這裏value存放的是結構化的對象,比較方便的就是操作其中的某個字段。在做單點登錄的時候,就是用這種數據結構存儲用戶信息,以cookieId作爲key,設置30分鐘爲緩存過期時間,能很好的模擬出類似session的效果。

list(列表):是redis簡單的字符串列表,它按插入順序排序

使用場景:使用List的數據結構,可以做簡單的消息隊列的功能。另外還有一個就是,可以利用lrange命令,做基於redis的分頁功能,性能極佳,用戶體驗好。還可以用一個場景,很合適---取行情信息。就也是個生產者和消費者的場景。list可以很好的完成排隊,先進先出的原則。

set(集合):是字符串類型的無序集合,也不可重複

使用場景:因爲set堆放的是一堆不重複值的集合。所以可以做全局去重的功能。爲什麼不用JVM自帶的Set進行去重?因爲我們的系統一般都是集羣部署,使用JVM自帶的Set,比較麻煩,難道爲了一個做一個全局去重,再起一個公共服務,太麻煩了。另外,就是利用交集、並集、差集等操作,可以計算共同喜好,全部的喜好,自己獨有的喜好等功能。

zset(sorted set有序集合):是string類型的有序集合,也不可重複

有序集合中的每個元素都需要指定一個分數,根據分數對元素進行升序排序,如果多個元素有相同的分數,則以字典序進行升序排序,sorted set因此非常適合實現排名。

使用場景:sorted set多了一個權重參數score,集合中的元素能夠按score進行排列。可以做排行榜應用,取TOP N操作。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章