MySQL:
早年MyISAM: 表鎖,十分影響效率!高併發下就會出現嚴重的鎖問題
轉戰Innodb:行鎖
爲什麼要用NoSQL?
用戶的個人信息,社交網絡,地理位置。用戶自己產生的數據,用戶日誌等等爆發式增長!
什麼是NoSQL?
nosql == Not Only SQL
泛指非關係型數據庫的,隨着web2.0互聯網的誕生!傳統的關係型數據庫很難對付web2.0時代!尤其是超大規模的高併發的社區!暴露出來很多難以克服的問題,NoSQL在當今大數據環境下發展的十分迅速,Redis是發展最快的,而且是我們當下必須要掌握的技術!
很多的數據類型用戶的個人信息,社交網絡,地理位置。這些數據類型的存儲不需要一個固定的格式!不需要多月的操作就可以橫向擴展的!Map<String,Object>使用鍵值對來控制!
NoSQL特點
解耦!
1、方便擴展(數據之間沒有關係,很好擴展!)
2、大數據量高性能(Redis一秒寫8W次,讀取11W,NoSQL的緩存記錄級,是一種細粒度的緩存,性能會比較高!)
3、數據類型是多樣型的!(不需要事先設計數據庫!隨取隨用!如果是數據量十分大的表,很多人就無法設計了!)
4、傳統RDBMS和NoSQL
傳統的RDBMS
-- 結構化組織
-- SQL
-- 數據和關係都存在但單獨的表中
-- 操作,數據定義語言
-- 嚴格的一致性
-- 基礎的事務
-- ......
NoSQL
-- 不僅僅是數據
-- 沒有固定的查詢語言
-- 鍵值對存儲,列存儲,文檔存儲,圖形數據庫(社交關係)
-- 最終一致性
-- CAP定理 和 BASE(異地多活)
-- 高性能,高可用,高可擴展
-- ......
瞭解:3V+3高
大數據時代的3V:主要是描述問題的
1.海量Volume
2.多樣Variety
3.實時Velocity
大數據時代的3高:主要是對程序的要求
1.高併發
2.高可擴
3.高性能
真正在公司中的實踐:NoSQL+RDBMS結合使用!
商品的描述、評論(文字比較多)
文檔型數據庫:MongoDB
圖片:
分佈式文件系統:FastDFS
- 淘寶自己的 TFS
- Google的 GFS
- Hadoop HDFS
- 阿里雲的 oss
商品的關鍵字(搜索)
- 搜索引擎 solr elasticsearch
- ISearch
商品熱門的波段信息
- 內存數據庫
- Redis Tair、Memache . . .
大型互聯網應用問題:
- 數據類型太多了!
- 數據源繁多,經常重構!
- 數據要改造,大面積改造!
解決問題:
解決方案:UDSL(統一數據服務平臺)
Nosql的四大分類
KV鍵值對:
- 新浪:Redis
- 美團:Redis + Tair
- 阿里、百度:Redis + memecache
文檔型數據庫(bson格式和json一樣):
- MongoDB(一般必須要掌握)
- MongoDB是一個基於分佈式文件存儲的數據庫,C++編寫,主要用來處理大量的文檔!
- MongoDB是一個介於關係型數據庫和非關係型數據庫中間的產品!MongoDB是非關係型數據庫中功能最豐富,最像關係型數據庫的!
- ConthDB
列存儲數據庫:
- HBase
- 分佈式文件系統
圖關係數據庫:
- 不存圖形,存的是關係,比如:朋友圈社交網絡,廣告推薦!
- Neo4j, InfoGrid
Redis入門
概述
Redis是什麼?
Redis(Remote Dictionary Server ),即遠程字典服務!
是一個開源的使用ANSI C語言編寫、支持網絡、可基於內存亦可持久化的日誌型、Key-Value數據庫,並提供多種語言的API。
redis會週期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,並且在此基礎上實現了master-slave(主從)同步。
免費和開源!是當下最熱門的NoSQL技術之一,也被人們稱之爲結構化數據庫!
Redis能幹嘛?
1、內存存儲、持久化,內存中是斷電即失,所以說持久化很重要(RDB、AOF)
2、效率高,可以用於高數緩存
3、發佈訂閱系統
4、地圖信息分析
5、計時器、計數器(瀏覽量!)
6、......
特性
1、多樣的數據類型
2、持久化
3、集羣
4、事務
. . . . . .
Linux安裝
1、下載安裝包並上傳Linux服務器
2、解壓redis安裝包
tar -zxvf redis-6.0.3.tar.gz
3、進入解壓後的文件
4、基本的環境安裝
yum install gcc-c++
make
make install
5、redis的默認安裝路徑
/usr/local/bin
6、將redis配置文件,複製到我們當前目錄下
7、修改配置
vi redis.conf
8、啓動redis服務
通過指定的配置文件啓動redis
9、使用redis-cli連接
10、查看redis的進程是否開啓
11、如何關閉redis服務
測試性能
redis-benchmark是一個壓力測試工具!
官方自帶的性能測試工具
序號 |
選項 |
描述 |
默認值 |
1 |
-h |
指定服務器主機名 |
127.0.0.1 |
2 |
-p |
指定服務器端口 |
6379 |
3 |
-s |
指定服務器 socket |
|
4 |
-c |
指定併發連接數 |
50 |
5 |
-n |
指定請求數 |
10000 |
6 |
-d |
以字節的形式指定 SET/GET 值的數據大小 |
3 |
7 |
-k |
1=keep alive 0=reconnect |
1 |
8 |
-r |
SET/GET/INCR 使用隨機 key, SADD 使用隨機值 |
|
9 |
-P |
通過管道傳輸 <numreq> 請求 |
1 |
10 |
-q |
強制退出 redis。僅顯示 query/sec 值 |
|
11 |
--csv |
以 CSV 格式輸出 |
|
12 |
-l |
生成循環,永久執行測試 |
|
13 |
-t |
僅運行以逗號分隔的測試命令列表。 |
|
14 |
-I |
Idle 模式。僅打開 N 個 idle 連接並等待。 |
|
簡單測試:
#測試:100個併發連接 100000請求
redis-benchmark -h localhost -p 6379 -c 100 -n 100000
基礎知識
redis默認有16個數據庫
默認使用的是第0個
可以使用select進行切換
redis-cli -p 6379
select 3
# 查看數據庫大小
dbsize
查看數據庫所有的key
keys *
清除當前數據庫
flushdb
清除全部數據庫的內容
flushall
Redis是單線程的!6.0開始支持多線程
Redis是C語言寫的,官方提供的數據爲100000+的QPS,完全不比同樣是使用key-value的Memecache差!
Redis爲什麼單線程還這麼快?
1、誤區1:高性能的服務器一定是多線程的?
2、誤區2:多線程(CPU上下文會切換!)一定比單線程效率高!
核心:redis是將所有的數據全部放在內存中的,所以使用單線程去操作效率就是最高的,多線程(CPU上下文會切換:耗時的操作!!!),對於內存系統來說,如果沒有上下文切換效率就是最高的!多次讀寫都是在一個CPU上的,在內存情況下,這個就是最佳的方案!