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 應用場景
- 熱點數據的緩存: 作爲緩存數據。緩存都是基於內存走
- 限時業務的運用: 秒殺 存放用戶信息 短信保存 。expire
- 計數器相關問題: 點贊量 播放量 訪問量 incr
- 排行榜相關問題:
- 分佈式鎖: 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支持的數據類型
- redis中
key
的類型都是字符串類型
。 - redis中
value
的類型很多:
- 字符串(string)
- 散列(hash)
- 列表(list)
- 集合(set)
- 具有範圍查詢的排序集合、位圖、超日誌、地理空間索引和流 。
而我們主要學習: string,hash,list,set,sort set.
3.1.1 redis中key的操作
- keys *: 查詢當前redis中所有的key.
- expire key second: 爲指定的key設置過期時間
- ttl key: 查看指定key的過期時間
- del key: 刪除指定的key
- exists key: 判斷指定的key是否存在。 存在返回1 不存在返回0
3.1.2 redis中數據庫操作命令
- select index: 選擇相應的數據庫
- flushdb: 清空當前庫
- flushall: 清空所有庫
3.1.3 string數據類型的命令
- set key value: 存放指定key的字符串類型。
- setnx key value: 如果指定的key存在,則不存放redis中,如果不存在則存入redis.
- get key: 獲取指定key值
- mset key value key value....: 存儲多個key和value的值
- mget key key key...:獲取多個key對於的值。
- incr key: 對指定的key的value進行累加。
- decr key: 對指定的key的value進行遞減。
3.1.4 hash散列類型的命令
- HSET key field value [field value]: 存放指定key的field和value值
- hget key field: 獲取指定key的field對於的value值。
- hkeys key: 獲取指定key對於的所有field.
- hvals key: 獲取指定key對應 的所有value值。
- hgetall key: 獲取指定key下所有的內容。
3.1.5 list隊列類型的命令
- lpush key value: 根據key從左邊存放對應的隊列數據,
- lrange key start end: 獲取key指定的元素
- LPOP key: 從左邊獲取指定key的第一個元素 並移除該元素。
3.1.6 set集合類型的命令
- SADD key value value ....
- smembers key: 獲取指定key下所有的元素。
- SPOP key: 獲取指定key的元素 隨機。
- SISMEMBER key value 判斷元素是否在集合中
和上面list的唯一區別 就是不允許重複,無序。
3.1.7 sort set集合類型的命令
- 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命令
恢復數據:
演示:
- 關閉redis服務 2. dump.rdb複製到其他目錄 3. 刪除dump.rdb 4. 其他服務 看到沒有數據
- 關閉服務。刪除dump.rdb 3. 把備份的dump.rdb複製到當前目錄 4.其他redis.
你要把redis rdb文件放入你的安裝目錄下。
rbd持久化的優缺點
優點: 持久化速度塊,恢復速度也快。
缺點: 數據完整性差。
AOF持久化方式
AOF持久化方式
RDB全量備份總是耗時的,有時候我們提供一種更加高效的方式AOF,工作機制很簡單,redis會將每一個收到的寫命令都通過write函數追加到文件中。通俗的理解就是日誌記錄。
AOF持久化的優缺點
優點: 數據庫完整高。
缺點: 恢復數據時效率低。每次都要往日誌文件中追加寫命令。
Y 推薦文獻
Redis 官網
Redis 文檔
Redis 命令參考
github 源碼倉庫
redis 在線測試
-
https://github.com/microsoftarchive/redis/releases/tag/win-3.2.100
-
https://github.com/qishibo/AnotherRedisDesktopManager/releases