redis入門+下載安裝+springdata整合redis

2020-08-11 18:13:51

Redis入門

今天我們來學習一下redis,想要學習redis,首先要瞭解一個東西:NoSQL

1.什麼是NoSQL?

NoSQL(NoSQL = Not Only SQL),意即「不僅僅是SQL」,是一項全新的數據庫理念,泛指非關係型的數據庫

2.爲什麼使用NoSQL?

官方文件用了一大堆文字來描述,總結下來主要就是以下幾點:

  • 高併發讀寫
  • 海量數據的高效率儲存和存取
  • 高可延伸性和高可用性

3.主流NoSQL產品

NoSQL數據庫的四大分類如下:

  • 鍵值(Key-Value)儲存數據庫
    相關產品: Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB
    典型應用: 內容快取,主要用於處理大量數據的高存取負載。
    數據模型: 一系列鍵值對
    優勢: 快速查詢
    劣勢: 儲存的數據缺少結構化
  • 列儲存數據庫
    相關產品:Cassandra, HBase, Riak
    典型應用:分佈式的檔案系統
    數據模型:以列簇式儲存,將同一列數據存在一起
    優勢:查詢速度快,可延伸性強,更容易進行分佈式擴充套件
    劣勢:功能相對侷限
  • 文件型數據庫
    相關產品:CouchDB、MongoDB
    典型應用:Web應用(與Key-Value類似,Value是結構化的)
    數據模型: 一系列鍵值對
    優勢:數據結構要求不嚴格
    劣勢: 查詢效能不高,而且缺乏統一的查詢語法
  • 圖形(Graph)數據庫
    相關數據庫:Neo4J、InfoGrid、Infinite Graph
    典型應用:社羣網路
    數據模型:圖結構
    優勢:利用圖結構相關演算法。
    劣勢:需要對整個圖做計算才能 纔能得出結果,不容易做分佈式的叢集方案。

4.什麼是Redis?

Redis是用C語言開發的一個開源的高效能鍵值對(key-value)數據庫。

  • 官方提供測試數據:50個併發執行100000個請求,讀的速度是110000次/s,寫的速度是81000次/s (數據僅供參考)。

  • Redis提供5種數據型別,解決不同場景下儲存問題。

    1、 字串型別

    2、 雜湊型別

    3、 列表型別

    4、 集合型別

    5、 有序集合型別。

5.redis下載與安裝

redis建議安裝在linux伺服器上執行測試,本次主要學習windows下操作。

5.1 目錄結構和使用

  • 目錄結構
    在这里插入图片描述

5.2 啓動redis服務:執行redis-server.exe,並指定組態檔名稱

redis-server.exe redis.windows.conf

在这里插入图片描述

  • 如果有網路存取問題,允許
    在这里插入图片描述
  • 若出現問題:system error caught
    在这里插入图片描述
    修改redis.windows.conf檔案,最後追加如下內容(用於設定記憶體大小,參考 maxheap = 1.5 * maxmemory):

maxmemory 120MB
maxheap 180MB

5.3 連線redis服務:雙擊redis-cli.exe介面

  • 使用「ping"命令進行測試,如果返回結果爲」PONG「,表示連線成功
    在这里插入图片描述
  • 問題:由於目標計算機積極拒絕,無法連線。(redis沒有啓動,啓動就行)
    在这里插入图片描述

6.註冊成windows服務

  • 將redis服務註冊window服務。

redis-server.exe --service-install

在这里插入图片描述

  • 可選項:設定redis服務的啓動方式
    在这里插入图片描述

7.安裝圖形化工具

7.1安裝

  • 步驟一:環境介面
    在这里插入图片描述
  • 步驟二:許可
    在这里插入图片描述
  • 步驟三:選擇安裝路徑
    在这里插入图片描述
  • 步驟四:安裝成功
    在这里插入图片描述
  • 步驟五:完成並執行
    在这里插入图片描述

7.2 使用

在这里插入图片描述

  • 連線redis
    在这里插入图片描述

7.3 redis幾個簡單的常見命令

  • 類似mysql時的sql語句
常見命令 描述
ping 用於測試redis服務是否連線成功,返回「PONG」表示成功
set 設定字串數據,格式:set 鍵 值
get 獲得字串數據,格式:get 鍵
del 刪除數據,格式:del 鍵

在这里插入图片描述

8. Jedis使用

Redis不僅是使用命令來操作,現在基本上主流的語言都有用戶端支援,比如java、C、C#、C++、php、Node.js、Go等。

  • 在官方網站裡列一些Java的用戶端,有Jedis、Redisson、Jredis、JDBC-Redis等,其中官方推薦使用Jedis和Redisson。下面 下麪我們就簡單學習下Jedis。
  • Jedis同樣也是託管在github上,地址:https://github.com/xetorthio/jedis.

8.1 搭建環境

  • 步驟一:構建測試專案
  • 步驟二:修改pom.xml檔案,新增依賴 redis、test
<dependencies>
        <!--redis-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
            <version>2.1.4.RELEASE</version>
        </dependency>
        <!--Jedis-->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.3</version>
        </dependency>
        <!--test-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <version>2.1.4.RELEASE</version>
        </dependency>
        <!--web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.1.4.RELEASE</version>
        </dependency>
    </dependencies>
  • 步驟三:編寫啓動類
@SpringBootApplication
public class TestApplication {
    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class,args);
    }
}

8.2 Jedis入門

public class TestJedis {
    public static void main(String[] args) {
        //1 構建jedis物件
        Jedis jedis = new Jedis("127.0.0.1",6379);
        //2 存放數據
        jedis.set("name","張三");
        //3 獲得數據
        String name = jedis.get("czxy");
        //4 控制檯展示
        System.out.println(name);
        //5 釋放資源
        jedis.close();
    }
}

9. Spring boot 整合 Redis

9.1 StringRedisTemplate 常用方法

  • RedisTemplate 對redis中5種類型進行操作工具類。
  • 開發中使用字串較多,StringRedisTemplate 專門進行字串處理模板類。
常見方法 描述
opsForValue() 操作字串
delete(key) 根據key刪除記錄
  • 通過opsForValue()獲得字串操作物件,可以進行具體操作
方法 描述
ops.set(key,value) 向redis中插入數據。因爲這個沒有設定過期時間所以是永久儲存的。
ops.set(key,value,time,timeUnit); 向redis中插入數據。第三個參數是一個long型的時間。最後一個參數是時間的單位
ops.get(key) ops.get(key)

9.2整合redis

  • 修改application.yml 檔案,設定redis
#redis設定
spring:
  redis:
    database:   0
    host: 127.0.0.1
    port: 6379

9.3 整合Junit

@RunWith(SpringRunner.class)        
@SpringBootTest(classes = TestApplication.class)
public class TestTemplate {
    @Test
    public void testDemo(){
        System.out.println("....");
    }
}

9.4 測試

@RunWith(SpringRunner.class)                    //spring整合Junit
@SpringBootTest(classes=TestApplication.class)  //spring boot 整合Junit
public class TestTemplate {

    @Resource
    private StringRedisTemplate stringRedisTemplate;
    /**
     *新增數據
     */
    @Test
    public void demo01(){
        stringRedisTemplate.opsForValue().set("java001","niubi");
    }
    /**
     *新增數據,設定有效時間5分鐘
     */
    @Test
    public void demo02(){
        stringRedisTemplate.opsForValue().set("java002","牛", 5 ,TimeUnit.MINUTES);
    }
    /**
     *獲得數據
     */
    @Test
    public void demo03(){
        String str = stringRedisTemplate.opsForValue().get("java001");
        System.out.println(str);
    }
    /**
     *刪除數據
     */
    @Test
    public void demo04(){
        stringRedisTemplate.delete("java001");
    }
}