1. 程式人生 > >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 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客戶端可選,如JedisRedisson等。這裡介紹一下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資料庫,但是依然可以用它來做出許多騷操作,比如用來構建 分散式鎖、用來做快取、用來做訊息佇列等等。

參考資料