redis使用,python連線redis,nosql

2020-08-08 10:13:00

NoSQL介紹

1、NoSQL:一類新出現的數據庫(not only sql)

  • 泛指非關係型的數據庫
  • 不支援SQL語法
  • 儲存結構跟傳統關係型數據庫中的那種關係表完全不同,nosql中儲存的數據都是KV形式key:value),類似於字典從儲存方式,key:value
  • NoSQL的世界中沒有一種通用的語言,每種nosql數據庫都有自己的api和語法,以及擅長的業務場景
  • NoSQL中的產品種類相當多:
    • 1、Redis
    • 2、Mongodb
    • 3、Hbase hadoop
    • 4、Cassandra hadoop

2、NoSQL和SQL數據庫的比較:

  • 適用場景不同:sql數據庫適合用於關係特別複雜的數據查詢場景,nosql反之
  • 事務 特性的支援:sql對事務的支援非常完善,而nosql基本不支援事務
  • 兩者在不斷地取長補短,呈現融合趨勢

3、Redis介紹

3.1、Redis簡介

  • Redis是一個開源的使用ANSI C語言編寫、支援網路、可基於記憶體亦可持久化的日誌型、Key-Value數據庫,並提供多種語言的API。從2010年3月15日起,Redis的開發工作由VMware主持。從2013年5月開始,Redis的開發由Pivotal贊助。
  • RedisNoSQL技術陣營中的一員,它通過多種鍵值數據型別來適應不同場景下的儲存需求,藉助一些高層級的介面使用其可以勝任,如快取、佇列系統的不同角色

3.2、Redis特性

  • Redis 與其他 key - value 快取產品有以下三個特點:
  • Redis支援數據的持久化,可以將記憶體中的數據儲存在磁碟中,重新啓動的時候可以再次載入進行使用。
  • Redis不僅僅支援簡單的key-value型別的數據,同時還提供list,set,zset,hash等數據結構的儲存。
  • Redis支援數據的備份,即master-slave模式的數據備份。

3.3、Redis 優勢

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

3.4、Redis應用場景

  • 用來做快取(ehcache/memcached)——redis的所有數據是放在記憶體中的(記憶體數據庫)
  • 可以在某些特定應用場景下替代傳統數據庫——比如社交類的應用
  • 在一些大型系統中,巧妙地實現一些特定的功能:session共用、購物車
  • 只要你有豐富的想象力,redis可以用在可以給你無限的驚喜…….
  • 打車軟體的座標數據,使用的就是快取!凡無需永久儲存的時候,且該數據頻繁被新增和讀取

3.5、推薦閱讀

3.6、計算機的儲存

  • 永久儲存 —— 磁碟 —— 斷電不會丟失數據,IO慢(數據讀寫慢)
  • 快取 —— 記憶體條 —— 斷電丟失數據,IO快(讀寫很快)

3.7、數據庫儲存

  • 永久儲存庫:Mysql
  • 快取庫:Redis快取數據(用它來做快取,該數據庫也可以永久儲存數據)
  • 給永久儲存數據庫,架設快取層,來提高數據的讀取的效率;

4、Redis安裝!

4.1、使用包管理工具安裝

4.1.1、線上安裝

ubuntu裡apt-get就是包管理工具,官網提供的快速安裝應用的工具;

Mac裡brew;

RedHat裡yum;

sudo apt-get install redis-server

4.1.2、預設組態檔路徑

/etc/redis/redis.conf

4.1.3、包管理工具預設可執行程式儲存的路徑有些應用安裝路徑是在/usr/bin/

/usr/local/bin/redis-server
/usr/local/bin/redis-cli

4.2、自定義線下安裝(安裝包安裝)

4.2.1、下載安裝包

# 1、下載安裝包(選擇3.0.6版本):http://download.redis.io/releases/

4.2.2、把安裝包壓縮檔案拷貝到ubuntu虛擬機器桌面目錄下並解壓解壓安裝包

cd ~/Desktop
tar -zxvf redis-3.0.6.tar.gz

4.2.3、進入解壓後的安轉包目錄

cd redis-3.0.6

4.2.4、自行閱讀

自己閱讀安裝目錄下的README和INSTALL檔案
(一般的安裝包都提供該檔案,用於說明安裝和使用步驟的)

4.2.5、編譯c/c++語言原始碼

sudo make

4.2.6、把編譯之後的可執行檔案放入指定標準安裝目錄中

sudo make install

4.2.7、把預設提供的組態檔,拷貝到標準目錄中

sudo cp ./redis.conf /etc/redis/

4.2.8、補充

redis 線下安裝的原始碼和編譯獲取的可執行程式,都在src目錄中;

4.3、redis基本操作

4.3.1、指定組態檔啓動redis

sudo redis-server /etc/redis/redis.conf

4.3.2、關閉redis伺服器

redis-cli -h 127.0.0.1 -p 6379 shutdown

4.4、redis指令操作

4.4.1.、字串型別

# 4.4.1.1、設定鍵值對
set <key> <value>

# 4.4.1.2、獲取一個key的值
get <key>

# 4.4.1.3、設定鍵值對的同時指定有效期
setex <key> <有效期,秒> <value>

# 4.4.1.4、一次設定多個鍵值對
mset <key1> <value1> <key2> <value2> .... <keyN> <valueN>
# 4.4.1.5、一次獲取多個鍵的值
mget <key1> <key2> ... <keyN>

# 4.4.1.5、檢視當前庫有哪些key
# 此處正則只支援「*」、「[]」和「?」三種;
# 「*」匹配任意字元
# 「[]」匹配指定字元
# 「?」匹配任意一個字元
keys <正則表達式>

4.4.2.、hash型別數據操作

# 4.4.2.1、新建只有一個屬性的雜湊
hset <key> <field> <value>

# 4.4.2.2、新建有多個屬性的雜湊
hmset <key> <field1> <value1> <field2> <value2> ...

# 4.4.2.3、獲取一個雜湊的所有鍵
hkeys <key>

# 4.4.2.4、獲取一個雜湊的一個屬性值
hget <key> <field>

# 4.4.2.5、獲取一個雜湊的多個屬性值
hmget <key> <field1> <field2>...

# 4.4.2.5、刪除一個雜湊中的屬性
hdel <key> <field1> <field2>...
# 注意:如果使用"del <key>"命令會把整個雜湊刪除

4.4.3、list列表型別數據操作

# 4.4.3.1、列表左側插入
lpush <key> <value1> <value2>...

# 4.4.3.2、列表右側插入
rpush <key> <value1> <value2>...

# 4.4.3.3、列表指定位置插入(在xxx之前插入)
linsert <key> before <xxx> <value>

# 4.4.3.4、列表指定位置插入(在xxx之後插入)
linsert <key> after <xxx> <value>

# 4.4.3.5、列表成員獲取
# 整數代表下表,和python列表下標類似
# 索引從左側開始,第⼀個元素爲0
# 索引可以是負數,表示從尾部開始計數,如-1表示最後⼀個元素
lrange <key> 0 -1 # [0,-1]獲取所有
lrange <key> 0 2 # [0,2]獲取下標0,1,2三個值

# 4.4.3.6、修改指定下標位置的值
lset <key> <index> <新值>

# 4.4.3.7、刪除列表中的一個成員
# 1、其中count爲0,代表刪除所有相同的值
# 2、其中count爲n(正整數),代表從左到右遍歷刪除相同的值
# 3、其中count爲-n(負整數),代表從右到左遍歷刪除相同的值
lrem <key> <count> <value>

# 4.4.3.8、列表的擷取
# 擷取下標[start,end]範圍類的數據
# 注意:直接操作原列表;
ltrim <key> <start> <end>

4.4.4、set集合型別

特徵:

  • 成員無序
  • 值的型別爲string
  • 成員不能重複,具備唯一性
  • 集合成員沒有修改操作
# 4.4.4.1、新增集合成員
sadd <key> <member1> <member2> <member3>...

# 4.4.4.2、檢視集閤中的所有成員
smembers <key>

# 4.4.4.3、刪除指定成員
srem <key> <member>

4.4.5、zset有序集合

所謂有序集合,就是在原有集合set基礎上,給每一個成員新增一個分值/權重值來記錄每個成員的順序!

  • 使用分值/權重值記錄順序,故有序
  • 成員數據型別爲string
  • 成員唯一
  • 分值/權重值是一個浮點數
# 4.4.5.1、新增成員
zadd <key> <score1> <member1> <score2> <member2> ...

# 4.4.5.2、根據下標獲取有續整合員
# 預設有序集合順序是按照分值生序排列
# 以下,獲取[start, stop]下標範圍內的成員
# 索引從左側開始,第⼀個元素爲0
# 索引可以是負數,表示從尾部開始計數,如-1表示最後⼀個元素
zrange <key> <start> <stop>

# 4.4.5.3、返回分值範圍內的成員: min_scoer <= 分值 <= max_score
zrangebyscore <key> <min_score> <max_score>

# 4.4.5.4、刪除指定成員
zrem <key> <member1> <member2> ...

# 4.4.5.5、刪除指定分值範圍內的成員
zremrangebyscore <key> <min_score> <max_score>

5、Redis的python用戶端的使用

from redis.client import StrictRedis

# 1、新建用戶端鏈接物件
conn = StrictRedis(
	host='127.0.0.1',
  port=6379
)

# 2、通過用戶端物件中的實體方法對redis進行增刪改查操作
# set name haige
conn.set("name", "haige")
# get name
conn.get("name")
# zadd book_count 99 西遊記 88 紅樓夢 77 三國演義
# 注意:在較新的redis用戶端版本中,有續集的新增操作中,成員及分值是以python字典形式傳入函數中 —— 成員爲key,分值爲value
conn.zadd("book_count", {"西遊記":99, "紅樓夢":88, "三國演義":77})

6、結語:

個人記錄,新手入門,多多學習,歡迎大家交流探討!
個人網站: http://106.54.78.238/
song_of _sea的個人網站 http://106.54.78.238/