redis是當今世界最為流行的非關系型數據庫之一,國內的華為、阿里巴巴、騰訊、百度、今日頭條、美團等,國外的谷歌、微軟、亞馬遜等大型互聯網公司都在廣泛的應用Redis。
其實不光在互聯網公司,Redis在一些非互聯網公司中也有非常廣泛的應用。
可以這么說但凡有點規模的IT公司,Redis都是標配,Redis與軟件研發息息相關,如果不懂Redis,你將錯過整個世界。
所以我們不光要學Redis,還要把Redis學好。
Redis到底是啥
相信很多朋友即使沒有用過也聽說過Redis, Redis似乎是我們IT人群中的一個高頻詞匯。
用官方的話來說
Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker.
Redis 是一個開源(BSD許可)的,內存中的數據結構存儲系統,它可以用作數據庫、緩存和消息中間件。
是不是你每個字都認識,但是連起來就有點懵逼了,好吧, 那我再來給大家翻譯一下。
大家把Redis想象成為一個非關系型數據庫,所以Redis和MySQL是完全不一樣的,Redis是一個NoSql數據庫(not only SQL), 這個數據庫存在于內存中,并且不用建立和維護表、字段等信息。而且Redis可以做的很多有趣的事,MySQL都是無能為力的哦。
Redis支持的數據結構
Redis不像MySQL那樣通過SQL語句來存取數據。它是通過一定的數據結構配合對應的命令來完成數據存取的。
Redis 支持的數據結構包括 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 與范圍查詢, bitmaps, hyperloglogs和 地理空間(geospatial) 索引半徑查詢
為了讓大家有一個直觀的感受,我們以字符串(strings)為例,來看一下Redis到底是怎么存取數據的
- 首先通過命令啟動Redis數據庫
redis-server.exe redis.windows.conf
- 用客戶端命令連接到Redis數據庫
redis-cli -h 127.0.0.1 -p 6379
- 通過命令存入數據
set name zhangsan
- 通過命令取出數據
get name
上邊的name是我們可以隨便定義的名字,也可以是age或者address, 這叫做Key, 而zhangsan 就是我們的Value。
Redis的應用場景
Redis的應用場景非常之多,下面我簡單列舉幾個最經典的場景
- 數據庫緩存
隨著系統用戶的增多,數據庫的訪問壓力也在逐漸增加,有些不常用的數據比如 字典數據、系統配置數據等就可以放入到Redis中緩存起來,這樣就不用每次都去訪問數據庫來獲取這些數據,從而減小了數據庫的壓力。
大體流程圖如下
- Session數據共享
系統在單機部署的情況下,服務器能夠根據用戶傳來的cookie找到其對應的服務器Session,從而能夠確定該用戶的身份信息。
但是在集群部署的情況下,上述流程就會失效。
假如用戶登錄的請求被分發到了server1, server1上會存儲用戶的session信息。
假如用戶下一步的操作是獲取菜單,該請求同樣被分發到了server1, 這時是沒有問題的。
但是當用戶獲取權限時請求被分發到了server5, 由于server5不存在用戶的session信息,所以要求其重新登錄,顯然這是一個不合理的要求。
為了解決這個問題我們可以把Session信息存入到Redis中,所有服務器共享Redis 進而 共享了Session信息。
- 分布式鎖
同樣在單機部署的情況下,JVM的鎖機制是沒有問題的,可以達到同步線程的目的。但是在集群部署的情況下,JVM的鎖機制將完全失效,因為顯然鎖住集群一個節點的JVM對象對集群其他節點是不可見的,所以分發到其他節點的請求,照樣可以順利運行,并不受鎖的限制。
因為Redis是所有集群節點共享的,用Redis來實現鎖,就可以幫我們完美解決這個問題。
如想了解更多關于Redis的知識,可以私信筆者,會有資料相送哦。