Redis 概述
1. Redis 以及常用網站
- Redis 是一個開源的 Key-value 資料庫。
- 它又被經常認為是一個資料結構伺服器,因為它的 value 不止隻有 string (字元串) 類型,還包括:
- list(清單)
- set(集合)
- zset(有序集合)
- hash(哈希)
- 這些資料類型支援:push、pop、add、remove、交集、并集、差集、排序等 豐富的操作,而且這些操作都是原子性的。在此基礎上 Redis 還支援各種方式的排序。
- 說到排序,需要了解隊列和棧的操作
- 隊列是先進先出,1234的1先進1先出。打個比方,比如說一隊人,在一個單人通過的小胡同裡,第一個人進去也是第一個先走出胡同。
- 棧是先進後出,1234的1先進4先出。相當于一隊人通過一個胡同,第一個人走到底發現是一個死胡同,但是這一隊人已經跟進來了,先進去的人堵在裡面,想出來隻能大家一起向後轉,一個一個,最後一個人先出去。
- 原子操作:
- 将整個操作視作一個整體是原子性的核心特征
- 可以是一個步驟,也可以是多個操作步驟,但是其順序不可以被打亂,也不可以被切割而隻執行其中的一部分
- 不會被線程排程機制打斷的操作,一旦開始就一直運作到結束
- Redis 與 Memcached 的異同
- 都有自加、自減等指令。不過 Memcached 的 value 類型隻包括 string 類型,遠遠沒有 Redis 的 value 類型豐富。
- 和 Memcached 一樣,為了性能, Redis 的資料通常存放在記憶體中。存在記憶體中有優勢又有劣勢,優勢是存取速度快。記憶體的速度大概是 5400轉硬碟的 60-150 倍,是固态硬碟的 10-20 倍。快有快的優點,也有缺點。如果斷電,資料會馬上消失、無法進行複原。當然 Redis 可以每隔一段時間将記憶體中的資料寫入磁盤,以防止資料的丢失。同時 Redis 也支援主從複制、以及簡單的事務處理等。
- Redis 常用的網站
- Redis 官網:https://redis.io
- Redis 中文官網:http://www.redis.cn
- Redis 菜鳥教程:https://www.runoob.com/redis/
2. NoSQL 和 SQL 的異同
- 什麼是 NoSQL、SQL
- SQL 就是關系型資料庫。舉例說明:MySQL、SQL Server 等。
- NoSQL 就是 Not Only SQL,指的是非關系型資料庫。常見的有:MongoDB、Redis、CouchDB。
- NoSQL、SQL異同
- 存儲方式:在 SQL 中,資料是存在特定結構的表中。而 NoSQL 的存儲方式更加的靈活,可以存在 json 文檔中、哈希表中、或其他的方式。
- 資料關系:在 SQL 中,必須先定義好表和字段結構才能添加資料。而在 NoSQL 中,資料可以在任何時候、任何地方添加。不需要預先定義。
- 外部存儲資料:在 SQL 中,如果要增加關聯外部資料的話,一般是在原表中增加一個外鍵關聯外部資料,而在 NoSQL 中,一般是把資料直接放在原資料集中,以提高查詢的效率。
- JOIN 查詢:在 SQL 中,可以使用正表連接配接的方式将多個關系表中的資料用一條簡單的 JOIN 指令查詢出來,NoSQL 暫未提供這樣的查詢方式對多個表中的資料集進行查詢。
- 事務處理:在 SQL 中,如果多張表同批次被更新,這種場景一般是通過事務更新進行實作的,也就是說其中一張表更新失敗,其它表也不會更新成功。但是在 NoSQL 中沒有事務這個概念,所有的資料集操作都是原子級别的。
- 文法:由于 NoSQL 和 SQL 的差別,其查詢方式、存儲方式、資料結構等都不同,也就造成了他們的文法的不同。
- NoSQL 的優勢和缺點
- 優勢:1. 靈活的可擴充性。以前大多數通過購買大型的伺服器來提高負載的方式進行擴充。由于資料可用性的增加,資料庫正在遷往雲端或者虛拟化的環境發展。通過購買大型伺服器來提高負荷的方式逐漸被淘汰。現階段大多數通過多台主機增加負載的方式來提高網站負載、經濟優勢不言而喻。
- 2. 大資料的處理能力。過去幾年通過資料的發展,資料的量和類型發生了翻天覆地的變化。需要存儲的資料量發生了急劇的膨脹。為了滿足資料量增長的需要,關系型資料庫的容量也在增加,但是關系型資料庫都有自己的上限。現在,大量的大資料正在充斥着,很多大型的網站都是通過 NoSQL 系統來處理完成大量增長的大資料。NoSQL 所能處理的資料量遠遠超過最大型關系型資料庫所能處理的上限。
- 3. 低廉的維護成本。SQL 的供應商在可管理性能方面做出了很大的改進。但是高昂的系統維護費用一直是他們收入的主要管道之一。而 NoSQL 資料庫一開始就為了降低管理方面的要求所設計的。從理論上來說,自動修複、資料配置設定、簡單的資料模型、可以在資料管理和優化方面節省很多的費用。
- 4. 資料存儲的成本。NoSQL 資料庫通常是使用廉價的商業伺服器叢集來管理膨脹的資料。而關系型資料庫通常需要依靠昂貴的專業伺服器和存儲系統來做到這一點。使用 NoSQL 每 GB 的存儲成本、每秒處理事務的成本都比使用關系型資料庫的成本要少很多很多。
- 5. 靈活的資料模型。對于大型的關系型資料庫來說,變更管理是一件很令人頭痛的事情,即使隻對一個關系型資料庫的模型做一個很小很小的改動,也需要十分小心的管理和維護。而 NoSQL 資料庫在資料模型限制方面,就顯得更加的寬松,這也讓程式的疊代更加的快速靈活。但是也存在明顯的限制和不良的條件,那就是無法維護資料的完整性。
- 缺陷:1. 單産品的成熟度不夠。關系型資料庫已經發展可很長時間了。對于大多數關系型資料庫來說,它們的代名詞就是更加的穩定、功能更加的豐富。相比之下,NoSQL 資料庫大多數都是實驗版本,許多關鍵性的功能還有待實作。
- 後續技術支援後勁不足。由于關系型資料庫都是有商業背景的。而大多數的 NOSQL 資料庫都是開源項目、也就是免費的。對于每個 NoSQL 資料庫來說,通常會有一個或多個公司對它們提供支援。但是這些公司通常都是一些小型的創業公司,在支援的範圍、資金和可行度方面和那些大型的商業公司無法相提并論。
- 分析能力和商業智能化略顯單薄。NoSQL 資料庫已經實作了插入、讀取、更新、删除等功能,但是對于中到大型企業來說,商業的智能化以及後期的資料挖掘一直是一個至關重要的無問題。而 NoSQL 資料庫幾乎沒有什麼專業的工具用來查詢和分析,即便一個簡單的查詢,也需要操作者需要較高的程式設計技術。而對商業智能化軟體的對接,NoSQL 幾乎無法進行連接配接。
- 高精尖專業人才缺乏。全世界數百萬開發者他們對關系型資料庫的概念、程式設計方式是很熟悉的。相反每一位 NoSQL 的開發者都處于學習當中。
3. Linux 環境下安裝 Redis
- 相關内容:Linux下安裝Redis
4. Redis 資料庫的增删改查操作
-
key:設定資料set
-
key:查詢資料get
-
key:删除資料del
-
key:修改資料getset
-
key:驗證是否存在exists
# 開啟 Redis 服務端
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
# 登入用戶端
redis-cli -p 6379
# 輸入密碼(如果有的話)
auth asdf
# 指令示範
set name wdm # 設定資料,傳回 OK
get name # 查詢,傳回 "wdm"
getset name www # 修改操作,傳回 "wdm"(注意:修改成功也是傳回原來的值)
get name # 查詢,傳回 "www"(說明上面用 getset 指令修改成功)
exists name # 驗證鍵值是否存在,傳回 (integer) 1(如果傳回 0 代表不存在,傳回 1 代表存在)
exists keys # 傳回 (integer) 0
del name # 删除鍵值(key 和 value 一并删除),傳回(integer) 1,說明删除成功(傳回 0 說明删除失敗)
- 更多相關: Redis資料類型及操作