1. 程式人生 > >Flask 修煉-Redis&Git!

Flask 修煉-Redis&Git!



內容概述:
Redis、Git

Redis

NoSQL 介紹

一類新出現的資料庫(not only sql)

  • 泛指非關係型的資料庫
  • 不支援 SQL 語法
  • 儲存結構跟傳統關係型資料庫中的那種關係表完全不同, nosql 中儲存的資料都是 KV 形式。
  • NoSQL 的世界中沒有一種通用的語言,每種 nosql 資料庫都有自己的 api 和語法,以及擅長的業務場景
  • NoSQL 中的產品種類相當多,例如:Mongoddb、Redis、Hbase hadoop、Cassandra hadoop




NoSQL 和 SQL 資料庫的比較

使用場景不同:sql 資料庫適合用於關係特別複雜的資料查詢場景,nosql 反之;

“事務” 特性的支援:sql 對事務的支援非常完善,而 nosql 基本不支援事務;

兩者在不斷地取長補短,呈現融合趨勢。




Redis 特性

Redis 與其他 key - value 快取產品有以下三個特點:

Redis 支援資料的持久化,可以將記憶體中的資料儲存在磁碟中,重啟的時候可以再次載入進行使用;

Redis 不僅僅支援簡單的 key - value 型別的資料,同時還提供 String、hash、list、set、zset 等資料結構的儲存;

Redis 支援資料的備份,即 master - slave 模式的資料備份




Redis 優勢

  • 效能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s 。
  • 豐富的資料型別 – Redis支援二進位制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 資料型別操作。
  • 原子 – Redis的所有操作都是原子性的,同時Redis還支援對幾個操作合併後的原子性執行。
  • 豐富的特性 – Redis還支援 publish/subscribe, 通知, key 過期等等特性。




資料操作

資料型別:

String(字串)、hash(雜湊)、list(列表)、set(集合)、zset(有序集合)




String

如果設定的鍵不存在則為新增,如果設定的鍵已經存在則修改

get 獲取值時,鍵不存在不會報錯

設定值:set 鍵名 值 EX 過期時間(單位:秒)

**設定鍵值及過期時間,以秒為單位:**setex key seconds value

獲取值:get 鍵名

設定多個值:mset 鍵1 值1 鍵2 值2 。。。

獲取多個值: mget 鍵1 鍵2 。。。

**追加:**append 鍵 值




鍵命令

檢視鍵: keys 正則 keys * (檢視所有鍵)

判斷鍵是否存在: exists key

**檢視鍵的型別: ** type key

刪除對應的值: del key

設定 key 過期的時間: expire key 時間




hash

hash⽤於儲存物件,物件的結構為屬性、值

值的型別為string

**設定:**hset key(鍵名) field(欄位) value(值)

獲取指定鍵所有的屬性: hkeys key

**獲取一個屬性的值:**hget key field

**獲取多個屬性的值:**hmget key field1 field2 …

獲取所有屬性的值: hvals key

**刪除:**刪除整個hash鍵及值,使⽤del命令;刪除屬性,屬性對應的值會被⼀起刪除

hdel key field1 field2 …




list

列表的元素型別為string

按照插⼊順序排序

增加

左側新增: lpush key value1 value2

右側新增: rpush key value1 value2

**在指定位置前或後插入元素:**linsert key before或after 現有元素 新元素

**獲取: **lrange key start stop

修改: lset key index value

刪除: lrem key count value(指定的值)

count 是指定的數字:小於 0 ,從尾往頭刪;大於 0 ,從頭到尾;等於 0 ,清空




set
  • ⽆序集合
  • 元素為string型別
  • 元素具有唯⼀性,不重複
  • 說明:對於集合沒有修改操作

新增元素: sadd key member1 member2 …

獲取: smembers key

刪除: srem key




zset
  • sorted set,有序集合
  • 元素為string型別
  • 元素具有唯⼀性,不重複
  • 每個元素都會關聯⼀個double型別的score,表示權重,通過權重將元素從⼩到⼤排序
  • 說明:沒有修改操作

**新增:**zadd key score1 member1 score2 member2 …

**獲取:**zrange key start stop

  • 返回指定範圍內的元素
  • start、stop為元素的下標索引
  • 索引從左側開始,第⼀個元素為0
  • 索引可以是負數,表示從尾部開始計數,如-1表示最後⼀個元素

刪除指定元素: zrem key member1 member2 …

**刪除權重在指定範圍的元素:**zremrangebyscore key min max

與 python 互動
from redis import StrictRedis


def demo():
    # 建立物件,與 redis 伺服器建立連線
    sr = StrictRedis(host='127.0.0.1')

    try:
        result = sr.set('name', 'xiaohei')
        print(result)
    except Exception as e:
        print(e)


if __name__ == '__main__':
    demo()




主從伺服器

根據教程搭建即可

(error) NOAUTH Authentication required.

這是認證,輸入密碼即可

使用命令: auth "yourpassword"




搭建叢集

在 Ubuntu 中搭建:

cd ~/Desktop/Flask
makdir conf
touch 7000.conf /  7001.conf  /  7002.conf
gedit 7000.conf /  7001.conf  /  7002.conf

輸入內容: 
port 7000
bind 192.168.195.133
daemonize yes
pidfile 7000.pid
cluster-enabled yes
cluster-config-file 7000_node.conf
cluster-node-timeout 15000
appendonly yes

對對應的檔案修改埠,  這幾個是主伺服器

啟動伺服器:
redis-server 7000.conf
redis-server 7001.conf
redis-server 7002.conf

配置從伺服器:
touch 7003.conf /  7004.conf  /  7005.conf
gedit 7003.conf /  7004.conf  /  7005.conf

輸入內容:
port 7003
bind 192.168.195.133
daemonize yes
pidfile 7003.pid
cluster-enabled yes
cluster-config-file 7003_node.conf
cluster-node-timeout 15000
appendonly yes

對對應的檔案修改埠,  這幾個是從伺服器

啟動伺服器:
redis-server 7003.conf
redis-server 7004.conf
redis-server 7005.conf

建立叢集:

將 redis-trib.rb 命令加到命令資料夾中
sudo cp /usr/share/doc/redis-tools/examples/redis-trib.rb /usr/local/bin/

安裝 ruby
sudo apt-get install ruby

-- 先檢視⾃⼰的 gem 源是什麼地址
gem source -l      -- 如果是https://rubygems.org/ 就需要更換
-- 更換指令為
gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
-- 通過 gem 安裝 redis 的相關依賴
sudo gem install redis
-- 然後執⾏指令
redis-trib.rb create --replicas 1 192.168.195.133:7000 192.168.195.133:7001  192.168.195.133:7002  192.168.195.133:7003 192.168.195.133:7004  192.168.195.133:7005  

輸入 yes, 提示完成,搭建叢集成功。

加引數 c 表示連線到叢集

redis-cli -h 192.168.195.133 -c -p 7000




與 python 互動

下載庫 :

pip install redis-py-cluster

# 匯入 redis 叢集庫
from rediscluster import StrictRedisCluster


def demo():
    # 存入叢集資訊
    startup_nodes = [
        {'host': '192.168.195.133', 'port': 7000},
        {'host': '192.168.195.133', 'port': 7001},
        {'host': '192.168.195.133', 'port': 7002}
    ]

    # 建立物件,與 redis 叢集進行連線
    src = StrictRedisCluster(startup_nodes=startup_nodes, decode_responses=True)

    try:
        result = src.set('name', 'goudan')  # 叢集會隨機寫入值
        print(result)
        print(src.get('name'))
    except Exception as e:
        print(e)


if __name__ == '__main__':
    demo()




Git

Git 之前研究了一下,做了筆記,比較多,不方便直接放上了,放上 GitHub 的地址,有興趣的可以下載去看。

Git 學習筆記