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 and geospatial indexes with radius queries. 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伺服器,可以前往http://try.redis.io/對Redis的命令進行線上測試。
二、安裝
windows
linux
編譯安裝:
# 1.首先下載redis原始碼
`git clone https://github.com/antirez/redis.git`
# 2.編譯:進入到redis原始碼根目錄,執行make (需要先安裝gcc)
make
# 然後找到redis-server並執行之
./redis-server
三、Redis中的資料結構
各個資料型別應用場景:
型別 | 特性 | 簡介 | 場景 |
---|---|---|---|
String(字串) | 二進位制安全 | 可以包含任何資料,比如jpg圖片或者序列化的物件,一個鍵最大能儲存512M | |
Hash(字典) | 鍵值對集合即程式語言中的Map型別 | 適合儲存物件,並且可以像資料庫中update一個屬性一樣只修改某一項屬性值(Memcached中需要取出整個字串反序列化成物件修改完再序列化存回去) | 儲存、讀取、修改使用者屬性 |
List(列表) | 連結串列(雙向連結串列) | 增刪快,提供了操作某一段元素的API | 1,最新訊息排行等功能(比如朋友圈的時間線) 2,訊息佇列 |
Set(集合) | 雜湊表實現,元素不重複 | 1、新增、刪除,查詢的複雜度都是O(1) 2、為集合提供了求交集、並集、差集等操作 | 1、共同好友 2、利用唯一性,統計訪問網站的所有獨立ip 3、好友推薦時,根據tag求交集,大於某個閾值就可以推薦 |
Sorted Set(有序集合) | 將Set中的元素增加一個權重引數score元素按score有序排列 | 資料插入集合時,已經進行天然排序 | 1、排行榜 2、帶權重的訊息佇列 |
四、命令
五、Redis客戶端(Clients)
Redis只是一個伺服器,如果需要在其他語言中連線並使用Redis伺服器,需要使用第三方庫。Redis官方文件中列出了許多第三方Redis客戶端:關於Redis客戶端的官方文件,可以按需選擇。
以Java為例,Java有多個版本的第三方Redis客戶端可選,如Jedis,Redisson等。這裡介紹一下Jedis(Redis的Java客戶端)的用法:
首先引入Jedis依賴:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
使用:
public class RedisJavaTest {
public static void main(String[] args) {
//連線本地的 Redis 服務
Jedis jedis = new Jedis("localhost");
System.out.println("連線成功");
//檢視服務是否執行
System.out.println("服務正在執行: "+jedis.ping());
}
}
這裡不再介紹Redis如何與框架整合,網上資料很多。
六、Redis叢集
Redis叢集官方文件介紹了Redis叢集的基本原理,以及如何搭建Redis叢集,如不想閱讀英文文件也可以參考Redis叢集官方文件中文譯文。文章很短,也沒有特別難以理解的內容,花個十幾分鍾就看完了,這裡不再詳細解釋。
據官方文件所說,Redis客戶端的叢集實現比較少,目前僅有幾個客戶端實現了叢集功能的支援(如Jedis、Predis,不過對於我們Java技術棧的人已經夠了hhh)。
七、實戰
雖然Redis只是一個基於記憶體的nosql資料庫,但是依然可以用它來做出許多騷操作,比如用來構建 分散式鎖、用來做快取、用來做訊息佇列等等。