Python | Python學習之Redis互動詳解
前言
最近在學習scrapy redis,順便複習了redis。
本篇為redis篇,包含例項演示,主從服務配置,python互動等內容。
nosql與redis介紹
nosql資料庫:
-
不支援SQL語法
-
儲存結構跟傳統關係型資料庫中的那種關係表完全不同,nosql中儲存的資料都是KV形式
-
NoSQL的世界中沒有一種通用的語言,每種nosql資料庫都有自己的api和語法,以及擅長的業務場景
- NoSQL中的產品種類相當多:Mongodb,Redis,Hbase hadoop,Cassandra hadoop等等。
redi資料庫是一個開源的使用ANSI C語言編寫、支援網路、可基於記憶體亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API。
安裝與啟動
windows:
安裝redis:
安裝redis管理客戶端:
linux:
安裝:sudo apt-get -y install redis-server
連線redis:redis-cli
重要配置項說明:配置檔案位置:/etc/redis/redis.conf
bind ip 繫結ip以配置遠端訪問 port [num] 繫結埠 daemonize 是否以守護程序執行,推薦設定為yes,不會在命令列阻塞,類似於服務 dbfilename 資料檔名稱 dir /xx/xx/redis 設定資料檔案儲存的位置 log file /xx/xx/xx/redis-server.log 日誌檔案位置 slaveof ip port 主從複製的ip埠
啟動redis:sudo server redis start
停止redis:sudo server redis stop
重啟redis:sudo server redis restart
載入指定的redis配置啟動:sudo redis-server /etc/redis/redis.conf
檢視redis程序:ps-ef|grep redis
殺死程序:sudo kill -9 pid
redis資料結構與操作
redis資料結構
-
redis是key-value的資料結構,每條資料都是一個鍵值對
-
鍵的型別是字串,且鍵不能重複
- 值的型別分為五種:字串strin,雜湊hash,列表list,集合set,有序集合zset
redis資料操作
redis鍵命令
redis鍵命令對所有資料型別通用
查詢鍵:keys [正則表示式]
檢視全部鍵:keys *
判斷鍵是否存在:exists key
檢視鍵對應的值的型別:type key
刪除鍵對應的值的型別:del key1 key2 key3...
設定鍵的過期時間:expire key seconds
檢視鍵的有效時間:ttl key
string型別相關操作
字串型別是Redis中最為基礎的資料儲存型別,它在Redis中是二進位制安全的,這便意味著該型別可以接受任何格式的資料,如JPEG影象資料或Json物件描述資訊等。在Redis中字串型別的Value最多可以容納的資料長度是512M。
新增與更新
設定鍵值(當鍵存在即為更新值):set key value
舉個栗子:
# 設定鍵為xianyu值為plus的資料
set xianyu plus
設定鍵值以及過期時間:setex key seconds value
舉個栗子:
# 設定鍵為xianyu值為plus的資料,且3秒後過期
setex xianyu 3 plus
設定多個鍵值:mset key1 value1 key2 value2...
舉個栗子:
# 設定鍵為xianyu[n]值為plus[n]的資料
mset xianyu plus xianyu1 plus1 xianyu2 plus2
向現有的值追加其他值:append key value
舉個栗子:
# 向鍵名為xianyu的值中追加值1
append xianyu 1
檢視
檢視鍵值:get key
舉個栗子:
# 檢視xianyu的值
get xianyu
檢視多個鍵的值:mget key1 key2 key3...
舉個栗子:
# 檢視xianyu1,xianyu2,xianyu3的值
mget xianyu1 xianyu2 xianyu3
刪除
刪除鍵:del key
hash雜湊型別相關操作
hash型別的值的型別為string
新增與修改
設定單個值:hset key field value
舉個栗子:
# 設定鍵xianyu的name屬性的值為xianyuplus
hset xianyu name xianyuplus
設定多個值:hmset key field1 value1 field2 value2 ...
舉個栗子:
# 設定xianyu的name值為xianyuplus age值為23
hmset xianyu name xianyuplus age 23
獲取
獲取單個鍵的所有屬性:hkeys key
舉個栗子:
# 獲取xianyu的所有屬性
hkeys xianyu
獲取單個屬性的值:hget key field
舉個栗子:
# 獲取xianyu的name值
hget xianyu name
獲取多個屬性的值:hmget key field1 field2 ...
舉個栗子:
# 獲取xianyu的name值和age值
hmget xianyu name age
獲取所有屬性的值:hvals key
舉個栗子:
hvals xianyu
刪除
刪除單個鍵所有屬性和值:del key
刪除鍵的屬性(對應的值也會被清空):hdel field1 field2...
舉個栗子:
# 刪除xianyu的name和age
hdel xianyu name age
list列表型別相關操作
list型別的值為string,值按照插入順序排序
新增
在list左邊插入資料:lpush key value1 value2 value3...
舉個栗子:
#插入1,2,3,4,5,6,
lpush xianyu 1 2 3 4 5 6
在list右邊插入資料:rpush key value1 value2 value3...
舉個栗子:
#插入1,2,3,4,5,6,
rpush xianyu 1 2 3 4 5 6
在指定元素前或後插入資料:linsert key before/after 現有元素 新元素
舉個栗子:
# 在1的前面插入a
linsert xianyu before 1 a
獲取列表元素
獲取列表指定範圍內的值:lrange key start stop
注意:這裡的列表和python中的列表索引方式相同,從左往右以0開始,索引支援負數
舉個栗子:
# 獲取鍵為xianyu的列表0到6的全部元素
lrange xianyu 0 6
# 獲取鍵為xianyu的列表所有元素
lrange xianyu 0 -1
修改
設定指定索引位置的元素:lset key index value
舉個栗子:
lset xianyu 0 1
刪除
刪除指定元素:lrem key count value
將列表中前count次出現的值為value的元素移除
count > 0: 從頭往尾移除
count < 0: 從尾往頭移除
count = 0: 移除所有
舉個栗子:
# 刪除從頭往尾數的兩個1
lrem xianyu 2 1
set集合型別相關操作
-
無序集合
-
元素為string型別
-
元素具有唯一性,不重複
- 說明:對於集合沒有修改操作
新增
新增元素:sadd key member1 member2 ...
舉個栗子:
# 向鍵xianyu的集合中新增元素a,b,c
sadd xianyu a b c
獲取
獲取所有值:smembers key
舉個栗子:
# 獲取鍵xianyu的集合所有的值
smembers xianyu
刪除
刪除指定的元素:srem key member
舉個栗子:
# 刪除鍵xianyu的集合值指定的元素
srem xianyu a
zset有序集合相關操作
-
sorted set,有序集合
-
元素為string型別
-
元素具有唯一性,不重複
-
每個元素都會關聯一個double型別的score,表示權重,通過權重將元素從小到大排序
- 說明:沒有修改操作
新增
新增多個元素:zadd key score1 member1 score2 member2 ...
舉個栗子:
zadd xianyu 2 name 1 age
檢視
這裡的有序集合和列表相同都有索引值
檢視有序集合的值:zrange key start stop
舉個栗子:
# 獲取xianyu中0-6的值
zrange xianyu 0 6
# 獲取xianyu中所有的值
zrange xianyu 0 -1
# 獲取xianyu中權重最大最小中間的值
檢視集合權重在指定範圍內的值:zrangebyscore key min max
舉個栗子:
zrangebyscore xianyu min max
返回成員member的score值:zscore key member
舉個栗子:
zscore xianyu a
刪除
刪除指定元素:zrem key member1 member2 ...
舉個栗子:
zrem xianyu a
刪除權重在指定範圍的元素:zrem key min max
舉個栗子:
zrem xianyu 1 2
python與redis互動
安裝與匯入
安裝:pip install redis
匯入模組:from redis import *
建立StrictRedis
通過init建立物件,指定引數host、port與指定的伺服器和埠連線,host預設為localhost,port預設為6379,db預設為0,預設沒有密碼。
red = StrictRedis(host='localhost', port=6379, db=0)
方法與操作string例項(其他型別操作類似)
這裡不同型別擁有的方法和上面redis中講解的方法相同,這裡不再贅述。
舉個栗子:
# 連結redis,建立stricredis物件
from redis import *
if __name__=="__main__":
try:
#建立StrictRedis物件,與redis伺服器連線
redis=StrictRedis()
# 新增一個string型別
result=redis.set('name','xianyuplus')
# 成功列印True,失敗列印False
print(result)
#獲取鍵name的值
result = redis.get('name')
#輸出鍵的值,如果鍵不存在則返回None
print(result)
#設定鍵name的值,如果鍵已經存在則進行修改,如果鍵不存在則進行新增
result = redis.set('name','xianyu')
#輸出響應結果,如果操作成功則返回True,否則返回False
print(result)
result = redis.delete('name')
#輸出響應結果,如果刪除成功則返回受影響的鍵數,否則則返回0
print(result)
#獲取所有的鍵
result=sr.keys()
#輸出響應結果,所有的鍵構成⼀個列表,如果沒有鍵則返回空列表
print(result)
except Exception as e:
print(e)
redis搭建主從服務(ubuntu)
什麼是主從服務
-
一個master可以擁有多個slave,一個slave可以擁有多個slave,如此下去,形成了多級伺服器叢集架構
-
master用來寫資料,slave用來讀資料,經統計:網站的讀寫比率是10:1
-
通過主從配置可以實現讀寫分離
- master和slave都是一個redis例項(redis服務)
配置主
vim etc/redis/redis.conf
bind [本機ip]
sudo service redis stop
redis-server redis.conf
配置從
sudo cp redis.conf ./slave.conf
vim slave.conf
bind [主配置的ip]
slaveof [主配置的ip 埠號]
port 6378 --這個埠號不能和主配置的相同
sudo redis-server slave.conf
檢視主從關係
redis-cli -h [主配置的ip] info Replication
主從測試
主配置上寫入資料:set xianyu xianyuplus
從配置上讀取資料:get xianyu
尾言
以上就是關於redis的一些用法,重點部分還是各個資料型別的操作,一定要照著敲一次才能記得住哦。