文章目錄
Redis簡介
- NoSQL,全名爲Not Only SQL,指的是非關係型的數據庫
- 隨着訪問量的上升,網站的數據庫性能出現了問題,於是NoSQL被設計出來
簡介
Redis是一個開源的使用ANSI C語言編寫、支持網絡、可基於內存亦可持久化的日誌型、Key-Value數據庫,並提供多種語言的API並提供多種語言的 API的非關係型數據庫。
Github 源碼:https://github.com/antirez/redis
Redis 官網:https://redis.io/
優點/缺點
優點:
- 高可擴展性 分佈式計算 低成本
- 架構的靈活性,半結構化數據 沒有複雜的關係
缺點:
- 沒有標準化
- 有限的查詢功能
- 最終一致是不直觀的程序
功能
Redis支持的數據類型
String字符串:set key value
- string類型是二進制安全的。意思是redis的string可以包含任何數據。比如jpg圖片或者序列化的對象 。
- string類型是Redis最基本的數據類型,一個鍵最大能存儲512MB。
Hash(哈希) hmset name key1 value1 key2 value2
- Redis hash 是一個鍵值(key=>value)對集合。
- Redis hash是一個string類型的field和value的映射表,hash特別適合用於存儲對象。
List(列表)set key List
Redis 列表是簡單的字符串列表,按照插入順序排序。你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)
lpush name value: 在 key 對應 list 的頭部添加字符串元素
rpush name value: 在 key 對應 list 的尾部添加字符串元素
lrem name index: key 對應 list 中刪除 count 個和 value 相同的元素
llen name : 返回 key 對應 list 的長度
Set(集合): sadd name value
集合是通過哈希表實現的,所以添加,刪除,查找的複雜度都是O(1)。
zset(sorted set:有序集合): zadd name score value
每個元素都會關聯一個double類型的分數。redis正是通過分數來爲集合中的成員進行從小到大的排序。zset的成員是唯一的,但分數(score)卻可以重複。
Redis持久化
Redis 是一個內存數據庫,與傳統的MySQL,Oracle等關係型數據庫直接將內容保存到硬盤中相比,內存數據庫的讀寫效率比傳統數據庫要快的多(內存的讀寫效率遠遠大於硬盤的讀寫效率)。但是保存在內存中也隨之帶來了一個缺點,一旦斷電或者宕機,那麼內存數據庫中的數據將會全部丟失。
目標: 持久化就是把內存的數據寫到磁盤中去,防止服務宕機了內存數據丟失。
Redis 提供了兩種持久化方式:RDB(默認) 和AOF
Redis持久化: RDB
RDB是Redis用來進行持久化的一種方式,是把當前內存中的數據集快照寫入磁盤,也就是 Snapshot 快照(數據庫中所有鍵值對數據)。恢復時是將快照文件直接讀到內存裏。
Redis持久化: AOF
- RDB 持久化存在一個缺點是一定時間內做一次備份,如果redis意外down掉的話,就會丟失最後一次快照後的所有修改(數據有丟失)。
- 持久化方式 AOF 則是通過保存Redis服務器所執行的寫命令來記錄數據庫狀態。
Redis安裝與配置
Redis的安裝
1.首先上官網下載Redis 壓縮包,地址 http://redis.io/download
2. 壓縮包執行解壓操作並進行編譯
tar xzf redis-x.x.x.tar.gz
cd redis-x.x.x/
make && make install
Redis的部署
1.執行Redis-server 命令,啓動Redis 服務
./redis-server
2.客戶端redisClient
redis-cli # 登錄redis
> set 'a' '123
3.當添加鍵值後,發現在當前運行的目錄下,創建了一個文件:dump.rdb,這個文件用於將數據持久化存儲
Redis架構模式
單機版
特點:簡單
問題:1、內存容量有限 2、處理能力有限 3、無法高可用。
主從複製
Redis 的複製(replication)功能允許用戶根據一個 Redis 服務器來創建任意多個該服務器的複製品,其中被複制的服務器爲主服務器(master),而通過複製創建出來的服務器複製品則爲從服務(slave)。只要主從服務器之間的網絡連接正常,主從服務器兩者會具有相同的數據,主服務器就會一直將發生在自己身上的數據更新同步 給從服務器,從而一直保證主從服務器的數據相同。
特點:
1.master/slave 角色
2.master/slave 數據相同
3.降低 master 讀壓力在轉交從庫
問題:
1.無法保證高可用
2.沒有解決 master 寫的壓力
Python與Redis
封裝
- 連接redis服務器部分是一致的
- 將string類型的讀寫進行封裝