1. 程式人生 > >Redis學習之路(1)----初識Redis

Redis學習之路(1)----初識Redis

一、什麼是Redis

Redis官網上的介紹是這樣的:

Redis is an open source (BSD licensed), in-memory data structure
store, used as a database, cache and message broker. It supports data
structures such as strings, hashes, lists, sets, sorted sets with
range queries, bitmaps, hyperloglogs, geospatial indexes with radius
queries and streams. Redis has built-in replication, Lua scripting,
LRU eviction, transactions and different levels of on-disk
persistence, and provides high availability via Redis Sentinel and
automatic partitioning with Redis Cluster.
翻譯過來大概是:
Redis是一個開源(BSD許可),記憶體中的資料結構儲存,用作資料庫、快取和訊息代理。它支援字串、雜湊、列表、集合、帶範圍查詢的排序集合、點陣圖、超loglogs、帶半徑查詢和流的地理空間索引等資料結構。Redis具有內建的複製、Lua指令碼、LRU退出、事務和不同級別的磁碟永續性,並通過Redis
Sentinel和Redis叢集自動分割槽提供高可用性

上面羅列了許多高大上的名詞,也許剛開始看有點蒙,但沒關係,不懂的先放一邊,我們先從簡單的入手,
檢視官網的介紹和網上的資料我們可以知道:
1、Redis 是一個開源的、基於記憶體的資料結構儲存,可用作於快取、資料庫、訊息中介軟體。
2、Redis 是速度非常快的非關係型(NoSQL)記憶體鍵值資料庫,可以儲存鍵和五種不同型別的值之間的對映(類似map的key-value鍵值對)。
3、鍵的型別只能為String,值支援五種資料型別:字串(String)、列表(list)、集合(set)、散列表(hash)、有序集合(sort set)。
4、Redis 還支援很多特性,例如將記憶體中的資料持久化到硬碟中,使用複製來擴充套件讀效能,使用分片來擴充套件寫效能等等。

簡單來說 redis 就是一個數據庫,不過與傳統資料庫不同的是 redis 的資料是存在記憶體中的,所以存寫速度非常快,因此 redis 被廣泛應用於快取方向。另外,redis 也經常用來做分散式鎖。redis 提供了多種資料型別來支援不同的業務場景。除此之外,redis 支援事務 、持久化、LUA指令碼、LRU驅動事件、多種叢集方案。

二、Redis的優勢

(1)從效能上來看
假如使用者第一次訪問資料庫中的某些資料。這個過程會比較慢,因為是從硬碟上讀取的。將該使用者訪問的資料存在數快取中,這樣下一次再訪問這些資料的時候就可以直接從快取中獲取了。操作快取就是直接操作記憶體,所以速度相當快。如果資料庫中的對應資料改變的之後,同步改變快取中相應的資料即可!
在這裡插入圖片描述


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

(2)從高併發上看
在大併發的情況下,所有的請求直接訪問資料庫,資料庫會出現連線異常。這個時候,就需要使用redis做一個緩衝操作,讓請求先訪問到redis,而不是直接訪問資料庫。
在這裡插入圖片描述

三、為什麼要用 redis 而不用 map/guava 做快取?

前面說過,Redis是一種類似map的key-value鍵值對的結構,那麼為什麼不用map來做快取呢?原因是因為:

快取分為本地快取和分散式快取。以 Java 為例,使用自帶的 map 或者 guava
實現的是本地快取,最主要的特點是輕量以及快速,生命週期隨著 jvm
的銷燬而結束,並且在多例項的情況下,每個例項都需要各自儲存一份快取,快取不具有一致性。

使用 redis 或 memcached 之類的稱為分散式快取,在多例項的情況下,各例項共用一份快取資料,快取具有一致性。缺點是需要保持
redis 或 memcached服務的高可用,整個程式架構上較為複雜。

四、redis 和 memcached 的區別

對於 redis 和 memcached 我總結了下面四點。現在公司一般都是用 redis 來實現快取,而且 redis 自身也越來越強大了!

1、redis支援更豐富的資料型別(支援更復雜的應用場景):Redis不僅僅支援簡單的k/v型別的資料,同時還提供list,set,zset,hash等資料結構的儲存。memcache支援簡單的資料型別,String。

2、Redis支援資料的持久化,可以將記憶體中的資料保持在磁碟中,重啟的時候可以再次載入進行使用,而Memecache把資料全部存在記憶體之中。

3、叢集模式:memcached沒有原生的叢集模式,需要依靠客戶端來實現往叢集中分片寫入資料;但是 redis 目前是原生支援 cluster 模式的

4、Memcached是多執行緒,非阻塞IO複用的網路模型;Redis使用單執行緒的多路 IO 複用模型。

參考

Redis官網
https://github.com/Snailclimb/JavaGuide/blob/master/資料儲存/Redis/Redis.md