[Redis]Redis概述

1 概述

  • Redis是用C語言開發的一個開源的高性能基於內存運行的鍵值對NoSQL數據庫

  • NOSQL(not only sql)不僅僅是sql,對所有非關係型數據庫的一種通稱。

1.1 特點

  • (1) 支持數據的持久化,可以將數據保存在磁盤中,重啓之後可以再次加載到內存中使用
  • (2) 支持多種數據類型,除了KV類型的數據,還支持list、set、hash等數據結構
  • (3) 支持master-slave模式的數據備份

1.2 NOSQL和RDBMS的區別

RDBMS

  • 高度組織化結構化數據。 user---userid username age sex .....
  • 結構化查詢語言(SQL) sql語句
  • 數據和關係都存儲在單獨的表中。
  • 數據操縱語言DML,數據定義語言DDL
  • 嚴格的一致性. 事務 .
  • 基於事務

NoSQL

  • 代表着不僅僅是SQL
  • 沒有聲明性查詢語言
  • 鍵 - 值對存儲。
  • 非結構化和不可預知的數據 字符串 對象 隊列 集合.
  • 高性能,高可用性和可伸縮性。 適合搭建集羣。 mysql搭建集羣非常複雜。主從模式

常見的NoSQL數據庫類型

1.3 應用場景

  1. 熱點數據的緩存: 作爲緩存數據。緩存都是基於內存走
  2. 限時業務的運用: 秒殺 存放用戶信息 短信保存 。expire
  3. 計數器相關問題: 點贊量 播放量 訪問量 incr
  4. 排行榜相關問題:
  5. 分佈式鎖: setnx()

2 安裝

2.1 Windows下安裝Redis

  • 下載安裝包(Redis-x64-3.2.100.zip),並解壓

https://github.com/microsoftarchive/redis/releases/tag/win-3.2.100

  • 雙擊redis-server.exe,啓動 redis-server

2.2 Redis可視化管理工具 : redisplus

2.3 Redis可視化管理工具 : Another Redis Desktop Manager

https://gitee.com/qishibo/AnotherRedisDesktopManager/releases (gitee)

3 架構與原理

3.1 Redis數據類型

3.1.0 redis支持的數據類型

  1. redis中key的類型都是字符串類型
  2. redis中value的類型很多:
  • 字符串(string)
  • 散列(hash)
  • 列表(list)
  • 集合(set)
  • 具有範圍查詢的排序集合、位圖、超日誌、地理空間索引和流 。

而我們主要學習: string,hash,list,set,sort set.

3.1.1 redis中key的操作

  1. keys *: 查詢當前redis中所有的key.
  2. expire key second: 爲指定的key設置過期時間
  3. ttl key: 查看指定key的過期時間
  4. del key: 刪除指定的key
  5. exists key: 判斷指定的key是否存在。 存在返回1 不存在返回0

3.1.2 redis中數據庫操作命令

  1. select index: 選擇相應的數據庫
  2. flushdb: 清空當前庫
  3. flushall: 清空所有庫

3.1.3 string數據類型的命令

  1. set key value: 存放指定key的字符串類型。
  2. setnx key value: 如果指定的key存在,則不存放redis中,如果不存在則存入redis.
  3. get key: 獲取指定key值
  4. mset key value key value....: 存儲多個key和value的值
  5. mget key key key...:獲取多個key對於的值。
  6. incr key: 對指定的key的value進行累加。
  7. decr key: 對指定的key的value進行遞減。

3.1.4 hash散列類型的命令

  1. HSET key field value [field value]: 存放指定key的field和value值
  2. hget key field: 獲取指定key的field對於的value值。
  3. hkeys key: 獲取指定key對於的所有field.
  4. hvals key: 獲取指定key對應 的所有value值。
  5. hgetall key: 獲取指定key下所有的內容。

3.1.5 list隊列類型的命令

  1. lpush key value: 根據key從左邊存放對應的隊列數據,
  2. lrange key start end: 獲取key指定的元素
  3. LPOP key: 從左邊獲取指定key的第一個元素 並移除該元素。

3.1.6 set集合類型的命令

  1. SADD key value value ....
  2. smembers key: 獲取指定key下所有的元素。
  3. SPOP key: 獲取指定key的元素 隨機。
  4. SISMEMBER key value 判斷元素是否在集合中

和上面list的唯一區別 就是不允許重複,無序。

3.1.7 sort set集合類型的命令

  1. ZADD key score member score membere
    2. ZRANGE
    和上面的set的區別是有序。多了一個字段score

3.2 redis的持久化方式

  • 持久化: 把內存中的數據持久到磁盤的過程,就是持久化。

  • 作用: 防止數據丟失。

  • redis持久化的方式: (1)RDB 快照 (2)AOF 日誌追加。

  • RDB 持久性以指定的時間間隔執行數據集的時間點快照 . RDB是redis默認的持久化方式. 存在dump.rdb

  • 什麼時候會觸發rdb的方式?

save該命令會阻塞當前Redis服務器,執行save命令期間,Redis不能處理其他命令,直到RDB過程完成爲止。具體流程如下:

bgsave 執行該命令時,Redis會在後臺異步進行快照操作,快照同時還可以響應客戶端請求。具體流程如下:

  • 【2】自動觸發----底層原理就是調用了bgsave命令

恢復數據:

演示:

  1. 關閉redis服務 2. dump.rdb複製到其他目錄 3. 刪除dump.rdb 4. 其他服務 看到沒有數據
  2. 關閉服務。刪除dump.rdb 3. 把備份的dump.rdb複製到當前目錄 4.其他redis.

你要把redis rdb文件放入你的安裝目錄下。

rbd持久化的優缺點

優點: 持久化速度塊,恢復速度也快。
缺點: 數據完整性差。

AOF持久化方式

AOF持久化方式
RDB全量備份總是耗時的,有時候我們提供一種更加高效的方式AOF,工作機制很簡單,redis會將每一個收到的寫命令都通過write函數追加到文件中。通俗的理解就是日誌記錄。


AOF持久化的優缺點

優點: 數據庫完整高。
缺點: 恢復數據時效率低。每次都要往日誌文件中追加寫命令。

Y 推薦文獻

Redis 官網

Redis 文檔

Redis 命令參考

github 源碼倉庫

redis 在線測試

X 參考文獻

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章