Redis的介紹
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的介紹