1. 程式人生 > >Redis的介紹

Redis的介紹

map pos 結果 一次 sorted round dump.rdb c 語言 family

1.1 什麽是 NoSql

  為了解決高並發、高可擴展(集群)、高可用(不能宕機)、大數據存儲問題而產生的數據庫解決方案,就是 NoSql 數據庫。

  NoSql : 全稱 not only sql ,非關系型數據庫。可以作為關系型數據庫的一個很好的補充。不能替代。

1.2 NoSql 數據庫分類

  ┣?鍵值(Key-Value)存儲數據庫

    相關產品:Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB。

    典型應用:內容緩存,主要用於處理大量數據的高訪問負載。

    數據模型:一系列鍵值對

    優勢:快速查詢

    劣勢:存儲的數據缺少結構化

  ┣?列存儲數據庫

    相關產品:Cassandra,HBase,Riak

    典型應用:分布式的文件系統

    數據模型:以列簇式存儲,將同一列數據存在一起

    優勢:查找速度快,可擴展性強,更容易進行分布式擴展

    劣勢:功能相對局限

  ┣?文檔型數據庫

    相關產品:CouchDB、MongoDB

    典型應用:Web應用

    數據模型:一系列鍵值對(與Key-Value類似,但Value是結構化的)

    優勢:數據結構要求不高

    劣勢:查詢性能不高,而且缺乏統一的查詢語法

  ┣?圖形(Graph)數據庫

    相關產品:Neo4J、InfoGrid、Infinite Graph

    典型應用:社交網絡

    數據模型:圖結構

    優勢:利用圖結構相關算法。

    劣勢:需要對整個圖做計算才能得出結果,不容易做分布式的集群方案。

1.3 什麽是 redis

  Redis 是用 C 語言開發的一個開源的高性能鍵值對(Key-Value)數據庫(NoSql),應用在緩存。它通過提供多種鍵值數據類型來適應不同場景下的存儲需求,目前為止 Redis支持的鍵值數據類型有5種。String、Hash、List、Set、SortedSet。

1.4 redis 的五種數據類型

  首先,① redis 中的數據都是字符串。② redis是單線程的,不適合存儲比較大的數據(因為先進先出,大的數據占位子,哈哈哈哈哈)

  ◤ String: Key-Value

    字符串類型

    redis 命令不區分大小寫,但是 key 是區分的

    使用 incr 命令,如果 key 不存在。會自動創建 key 並自動+1。

    ① set key value  設置值

    ② get key  獲取值

    ③ incry key  加一

    ④ decr key  減一

    技術分享圖片

  ◤Hash:Key-Field-Value

    散列類型

    相當於一個 key 對應一個map (map 中又是 key-value(field-value))

    應用於歸類

    ① hset key field value  設置值

    ② hget key field  獲取值

    ③ hincrby key field num  設置增數量(負數就減咯)

    技術分享圖片

  ◤List

    列表類型

    List 是有順序可重復(數據結構中的:雙鏈表,隊列)

    可作為鏈表,從左添加元素,也可以從右添加元素。

    ① lpush list a b c d  從左添加元素

    ② rpush list 1 2 3 4  從右添加元素

    ③ lrange list 0 -1  從 0 到 -1 元素查看:也就表示查看所有

    ④ lpop list   從左邊取,刪除

    ⑤ rpop list   從右邊取,刪除

    技術分享圖片

  ◤Set

    集合類型

    無序,不可重復

    ① sadd set1 a b c d d  向 set1 中添加元素(元素不重復)

    ② smembers set1  查詢元素

    ③ srem set1 a  刪除元素

    技術分享圖片

  ◤SortedSet(zSet)

    有序集合類型

    有序,不能重復

    適合做排行榜 排序需要一個分數屬性

    ① zadd zset1 9 a 8 c 10 d 1 e (添加元素 zadd key score member

    ② ZRANGE key start stop [WITHSCORES] (查看所有元素:zrange key 0 -1 withscores:如果要查看分數,加上withscores

    ③ zrange zset1 0 -1 (分數從小到大排列)

    ④ zrevrange zset1 0 -1 (從大到小)

    ⑤ zincrby zset2 score member (對元素member 增加 score)

1.5 redis 的應用場景

    緩存。

    分布式集群架構中的session分離。 session默認的時候半個小時,可以把 redis 的時效也設為半個小時。key-->userid value -->user

    任務隊列。(秒殺、搶購、12306等等)

    應用排行榜。(SortedSet)

    網站訪問統計。

    數據過期處理。(expire)

1.6 key 命令

  ① expire key second   設置 key 的過期時間  0 - key不存在  1 - 設置成功

  ② ttl key   查看剩余時間   -2 - 表示不存在, -1 - 表示已被持久化, 正數表示剩余時間

  ③ persist key  清除過期時間,即持久化。 持久化成功提示1,不成功0。

  ④ del key   刪除 key 。

  ⑤ exists key   key存在返回1,否則返回0 。

  ⑥ select 0   選擇0號數據庫。默認是0號數據庫。

1.6 redis 持久化方案

  Redis 數據都放在內存中。如果機器掛掉,內存的數據就不存在。

  需要做持久化,將內存中的數據保存在磁盤,下一次啟動的時候就可以恢復數據到內存中。

  1. RDB 快照形式 默認(定期將當前時刻的數據保存磁盤中)會產生一個dump.rdb文件

    持久化依據:多長時間多少個key發生改變。

    特點:會存在數據丟失,性能較好,用於數據備份。

  2.AOF append only file (所有對redis的操作命令記錄在.aof文件中),恢復數據,重新執行一遍即可。

    持久化依據:多長時間 或者 多少個key發生改變。

    特點:每秒保存,數據完整性比較好,耗費性能。

Redis的介紹