前言
回顧之前講了python語法編程 睁冬,必修入門基礎和網(wǎng)絡編程镐确,多線程/多進程/協(xié)程等方面的內容祥诽,今天到了數(shù)據(jù)庫編程篇,前面MySQL已經(jīng)講完了前面沒看的也不用往前翻躺苦,系列文已經(jīng)整理好了:
1.跟我一起從零開始學python(一)編程語法必修
2.跟我一起從零開始學python(二)網(wǎng)絡編程
3.跟我一起從零開始學python(三)多線程/多進程/協(xié)程
4.跟我一起從零開始學python(四)數(shù)據(jù)庫編程:MySQL篇
本篇講:python數(shù)據(jù)庫編程:Redis數(shù)據(jù)庫
本系列文根據(jù)以下學習路線展開講述身腻,由于內容較多,:
一丶服務端和客戶端基本操作命令
Redis是一種基于內存的數(shù)據(jù)結構存儲系統(tǒng)匹厘,常用于緩存嘀趟、消息隊列、排行榜等場景愈诚。下面介紹一些Redis服務端和客戶端的基本操作命令她按。
1.服務端命令
啟動Redis服務
redis-server
關閉Redis服務
redis-cli shutdown
查看Redis服務狀態(tài)
redis-cli ping
查看Redis服務版本
redis-cli info server
查看Redis服務配置
redis-cli config get *
修改Redis服務配置
redis-cli config set <parameter> <value>
2.客戶端命令
連接Redis服務
redis-cli -h <host> -p <port> -a <password>
設置鍵值對
redis-cli set <key> <value>
獲取鍵值對
redis-cli get <key>
刪除鍵值對
redis-cli del <key>
判斷鍵是否存在
redis-cli exists <key>
設置鍵的過期時間
redis-cli expire <key> <seconds>
查看鍵的過期時間
redis-cli ttl <key>
查看所有鍵
redis-cli keys *
查看鍵的類型
redis-cli type <key>
列表操作
redis-cli lpush <key> <value> # 從左側插入元素
redis-cli rpush <key> <value> # 從右側插入元素
redis-cli lrange <key> <start> <stop> # 獲取列表元素
redis-cli lpop <key> # 從左側彈出元素
redis-cli rpop <key> # 從右側彈出元素
集合操作
redis-cli sadd <key> <value> # 添加元素
redis-cli smembers <key> # 獲取所有元素
redis-cli sismember <key> <value> # 判斷元素是否存在
redis-cli srem <key> <value> # 刪除元素
哈希表操作
redis-cli hset <key> <field> <value> # 設置字段值
redis-cli hget <key> <field> # 獲取字段值
redis-cli hgetall <key> # 獲取所有字段和值
redis-cli hdel <key> <field> # 刪除字段
有序集合操作
redis-cli zadd <key> <score> <value> # 添加元素
redis-cli zrange <key> <start> <stop> # 獲取元素
redis-cli zrem <key> <value> # 刪除元素
以上是Redis服務端和客戶端的基本操作命令,更多命令可以參考Redis官方文檔炕柔。
二丶數(shù)據(jù)操作
1.string
Redis是一種基于內存的數(shù)據(jù)存儲系統(tǒng)酌泰,支持多種數(shù)據(jù)結構,其中之一就是string匕累。在Python中陵刹,我們可以使用redis-py庫來操作Redis數(shù)據(jù)庫中的string數(shù)據(jù)類型。
以下是一些常用的Redis string操作命令:
①.set(key, value):設置key對應的value值
import redis
r = redis.Redis(host='localhost', port=6379, db=0)
r.set('name', 'Tom')
②.get(key):獲取key對應的value值
import redis
r = redis.Redis(host='localhost', port=6379, db=0)
name = r.get('name')
print(name)
③.mset(mapping):批量設置多個key-value對
import redis
r = redis.Redis(host='localhost', port=6379, db=0)
r.mset({'name': 'Tom', 'age': 18})
④.mget(keys):批量獲取多個key對應的value值
import redis
r = redis.Redis(host='localhost', port=6379, db=0)
values = r.mget(['name', 'age'])
print(values)
⑤.incr(key, amount=1):將key對應的value值增加amount
import redis
r = redis.Redis(host='localhost', port=6379, db=0)
r.set('count', 1)
r.incr('count')
⑥.decr(key, amount=1):將key對應的value值減少amount
import redis
r = redis.Redis(host='localhost', port=6379, db=0)
r.set('count', 10)
r.decr('count', 5)
⑦.append(key, value):將value追加到key對應的value值的末尾
import redis
r = redis.Redis(host='localhost', port=6379, db=0)
r.set('name', 'Tom')
r.append('name', ' Smith')
⑧.strlen(key):獲取key對應的value值的長度
import redis
r = redis.Redis(host='localhost', port=6379, db=0)
name_len = r.strlen('name')
print(name_len)
以上是Redis string數(shù)據(jù)類型的一些基本操作命令哩罪,可以根據(jù)實際需求進行使用授霸。
2.鍵命令
Redis中的鍵命令用于管理和操作鍵值對巡验。以下是一些常用的鍵命令:
- SET key value:設置鍵值對际插,如果鍵已經(jīng)存在,則覆蓋原有的值显设。
- GET key:獲取鍵對應的值框弛。
- DEL key:刪除指定的鍵值對。
- EXISTS key:檢查指定的鍵是否存在捕捂。
- KEYS pattern:查找所有符合給定模式的鍵瑟枫。
- TTL key:獲取鍵的過期時間,單位為秒指攒。
- EXPIRE key seconds:設置鍵的過期時間慷妙,單位為秒。
- PERSIST key:移除鍵的過期時間允悦,使其永久有效膝擂。
- TYPE key:獲取鍵對應的值的數(shù)據(jù)類型。
這些命令可以通過Python Redis模塊中的對應方法來調用,例如:
import redis
# 連接Redis數(shù)據(jù)庫
r = redis.Redis(host='localhost', port=6379, db=0)
# 設置鍵值對
r.set('name', 'Alice')
# 獲取鍵對應的值
name = r.get('name')
print(name)
# 刪除指定的鍵值對
r.delete('name')
# 檢查指定的鍵是否存在
exists = r.exists('name')
print(exists)
# 查找所有符合給定模式的鍵
keys = r.keys('*')
print(keys)
# 獲取鍵的過期時間
ttl = r.ttl('name')
print(ttl)
# 設置鍵的過期時間
r.expire('name', 60)
# 移除鍵的過期時間
r.persist('name')
# 獲取鍵對應的值的數(shù)據(jù)類型
type = r.type('name')
print(type)
3.hash
在 Redis 中架馋,Hash 是一個鍵值對集合狞山,其中鍵和值都是字符串類型。Hash 可以用于存儲對象叉寂,例如用戶信息萍启、商品信息等。
以下是 Python Redis 操作 Hash 的一些常用命令:
①.HSET(key, field, value):設置 Hash 中指定字段的值
redis_conn.hset('user:1', 'name', 'Alice')
②.HGET(key, field):獲取 Hash 中指定字段的值
redis_conn.hget('user:1', 'name')
③.HMSET(key, mapping):設置 Hash 中多個字段的值
redis_conn.hmset('user:1', {'age': 20, 'gender': 'female'})
④.HMGET(key, fields):獲取 Hash 中多個字段的值
redis_conn.hmget('user:1', 'name', 'age', 'gender')
⑤.HGETALL(key):獲取 Hash 中所有字段和值
redis_conn.hgetall('user:1')
⑥.HDEL(key, field):刪除 Hash 中指定字段
redis_conn.hdel('user:1', 'gender')
⑦.HEXISTS(key, field):判斷 Hash 中是否存在指定字段
redis_conn.hexists('user:1', 'gender')
⑧.HKEYS(key):獲取 Hash 中所有字段
redis_conn.hkeys('user:1')
⑨.HVALS(key):獲取 Hash 中所有值
redis_conn.hvals('user:1')
⑩.HLEN(key):獲取 Hash 中字段的數(shù)量
redis_conn.hlen('user:1')
以上是 Python Redis 操作 Hash 的一些常用命令屏鳍,可以根據(jù)實際需求選擇使用勘纯。
4.list
Redis中的List是一個雙向鏈表,支持在頭部和尾部進行插入和刪除操作钓瞭。List中的每個元素都是一個字符串屡律。
Python中可以使用redis-py庫來操作Redis數(shù)據(jù)庫中的List數(shù)據(jù)類型。
首先需要導入redis庫:
import redis
連接Redis數(shù)據(jù)庫:
r = redis.Redis(host='localhost', port=6379, db=0)
List操作
①. 插入元素
在List的頭部插入一個或多個元素:
r.lpush('list_key', 'value1', 'value2', 'value3')
在List的尾部插入一個或多個元素:
r.rpush('list_key', 'value4', 'value5', 'value6')
在指定元素前或后插入一個元素:
r.linsert('list_key', 'BEFORE', 'value2', 'new_value')
r.linsert('list_key', 'AFTER', 'value2', 'new_value')
②. 獲取元素
獲取List中指定范圍內的元素:
r.lrange('list_key', 0, -1) # 獲取所有元素
r.lrange('list_key', 0, 2) # 獲取前三個元素
r.lrange('list_key', -3, -1) # 獲取后三個元素
獲取List中指定索引的元素:
r.lindex('list_key', 0) # 獲取第一個元素
r.lindex('list_key', -1) # 獲取最后一個元素
③. 刪除元素
從List的頭部刪除一個元素:
r.lpop('list_key')
從List的尾部刪除一個元素:
r.rpop('list_key')
刪除List中指定的元素:
r.lrem('list_key', 0, 'value2') # 刪除所有值為value2的元素
r.lrem('list_key', 1, 'value2') # 刪除第一個值為value2的元素
r.lrem('list_key', -1, 'value2') # 刪除最后一個值為value2的元素
④. 其他操作
獲取List的長度:
r.llen('list_key')
將List中的最后一個元素移動到另一個List的頭部:
r.rpoplpush('list_key', 'new_list_key')
阻塞式地從一個List的尾部彈出一個元素降淮,并將其插入到另一個List的頭部:
r.brpoplpush('list_key', 'new_list_key', timeout=0)
以上就是Python中操作Redis數(shù)據(jù)庫中List數(shù)據(jù)類型的常用方法超埋。
5.set
Redis中的Set是一個無序的集合,它的作用和List類似佳鳖,都是用來存儲多個字符串元素的集合霍殴。但是Set不同于List的是,Set中不允許出現(xiàn)重復的元素系吩,而且Set中的元素是無序的来庭。
Python中操作Redis的Set可以使用redis模塊中的set方法。下面是一些常用的Set操作:
①.添加元素
import redis
r = redis.Redis(host='localhost', port=6379, db=0)
# 添加單個元素
r.sadd('set_key', 'value1')
# 添加多個元素
r.sadd('set_key', 'value2', 'value3', 'value4')
②.獲取元素
import redis
r = redis.Redis(host='localhost', port=6379, db=0)
# 獲取所有元素
members = r.smembers('set_key')
print(members)
# 判斷元素是否存在
is_member = r.sismember('set_key', 'value1')
print(is_member)
③.刪除元素
import redis
r = redis.Redis(host='localhost', port=6379, db=0)
# 刪除單個元素
r.srem('set_key', 'value1')
# 刪除多個元素
r.srem('set_key', 'value2', 'value3', 'value4')
# 刪除集合
r.delete('set_key')
④.集合運算
import redis
r = redis.Redis(host='localhost', port=6379, db=0)
# 求交集
r.sadd('set_key1', 'value1', 'value2', 'value3')
r.sadd('set_key2', 'value2', 'value3', 'value4')
intersection = r.sinter('set_key1', 'set_key2')
print(intersection)
# 求并集
union = r.sunion('set_key1', 'set_key2')
print(union)
# 求差集
difference = r.sdiff('set_key1', 'set_key2')
print(difference)
6.zset
在 Redis 中穿挨,ZSET(有序集合)是一種特殊的數(shù)據(jù)結構月弛,它是一個鍵值對集合,其中每個元素都關聯(lián)著一個浮點數(shù)分數(shù)科盛。這個分數(shù)被用來按照從最小值到最大值的順序排序元素帽衙。ZSET 的成員是唯一的,但分數(shù)(score)卻可以重復贞绵。
Python Redis 操作有序集合的方法:
①.添加元素
使用 zadd
命令向有序集合中添加元素厉萝,語法如下:
zadd(name, mapping)
其中,name
是有序集合的名稱榨崩,mapping
是一個字典谴垫,表示要添加的元素和它們的分數(shù)。例如:
redis.zadd('myzset', {'one': 1, 'two': 2, 'three': 3})
②.獲取元素
使用 zrange
命令獲取有序集合中指定范圍內的元素母蛛,語法如下:
zrange(name, start, end, withscores=False)
其中翩剪,name
是有序集合的名稱,start
和 end
分別表示要獲取的元素的起始位置和結束位置(從 0 開始計數(shù))彩郊,withscores
表示是否同時返回元素的分數(shù)前弯。例如:
redis.zrange('myzset', 0, -1, withscores=True)
③.獲取元素數(shù)量
使用 zcard
命令獲取有序集合中元素的數(shù)量舞肆,語法如下:
zcard(name)
其中,name
是有序集合的名稱博杖。例如:
redis.zcard('myzset')
④.獲取元素排名
使用 zrank
命令獲取有序集合中指定元素的排名椿胯,語法如下:
zrank(name, value)
其中,name
是有序集合的名稱剃根,value
是要獲取排名的元素哩盲。例如:
redis.zrank('myzset', 'two')
⑤.獲取元素分數(shù)
使用 zscore
命令獲取有序集合中指定元素的分數(shù),語法如下:
zscore(name, value)
其中狈醉,name
是有序集合的名稱廉油,value
是要獲取分數(shù)的元素。例如:
redis.zscore('myzset', 'two')
⑥.刪除元素
使用 zrem
命令從有序集合中刪除指定的元素苗傅,語法如下:
zrem(name, values)
其中抒线,name
是有序集合的名稱,values
是要刪除的元素渣慕。例如:
redis.zrem('myzset', 'two')
⑦.獲取指定分數(shù)范圍內的元素
使用 zrangebyscore
命令獲取有序集合中指定分數(shù)范圍內的元素嘶炭,語法如下:
zrangebyscore(name, min, max, start=None, num=None, withscores=False, score_cast_func=float)
其中,name
是有序集合的名稱逊桦,min
和 max
分別表示要獲取的分數(shù)范圍的最小值和最大值眨猎,start
和 num
分別表示要獲取的元素的起始位置和數(shù)量(從 0 開始計數(shù)),withscores
表示是否同時返回元素的分數(shù)强经,score_cast_func
表示分數(shù)的類型轉換函數(shù)睡陪。例如:
redis.zrangebyscore('myzset', 1, 2, withscores=True)
三丶python操作Redis
1.Redis庫
Redis是一個開源的內存數(shù)據(jù)結構存儲系統(tǒng),它支持多種數(shù)據(jù)結構匿情,包括字符串兰迫、哈希、列表炬称、集合和有序集合等汁果。Redis的特點是速度快、可靠性高转砖、支持豐富的數(shù)據(jù)結構和操作须鼎,因此被廣泛應用于緩存鲸伴、消息隊列府蔗、計數(shù)器、排行榜等場景汞窗。
Python是一種高級編程語言姓赤,它具有簡單易學、代碼簡潔仲吏、可讀性強等特點不铆,因此被廣泛應用于Web開發(fā)蝌焚、數(shù)據(jù)分析、人工智能等領域誓斥。Python提供了多種Redis客戶端庫只洒,可以方便地操作Redis數(shù)據(jù)庫。
Python操作Redis需要先安裝Redis客戶端庫劳坑,常用的有redis-py
毕谴、redis
、hiredis
等距芬。其中redis-py
是Redis官方推薦的Python客戶端庫涝开,支持Python 2和Python 3,提供了豐富的API框仔,使用方便舀武。
安裝redis-py庫可以使用pip命令:
pip install redis
安裝完成后,就可以在Python中使用redis-py
庫操作Redis數(shù)據(jù)庫了离斩。下面是一個簡單的示例:
import redis
# 連接Redis數(shù)據(jù)庫
r = redis.Redis(host='localhost', port=6379, db=0)
# 設置鍵值對
r.set('name', 'Tom')
# 獲取鍵值對
name = r.get('name')
print(name)
在上面的示例中银舱,首先使用redis.Redis()
方法連接Redis數(shù)據(jù)庫,然后使用r.set()
方法設置鍵值對跛梗,使用r.get()
方法獲取鍵值對纵朋。其中,host
參數(shù)指定Redis
服務器的IP
地址茄袖,port
參數(shù)指定Redis
服務器的端口號操软,db
參數(shù)指定Redis
數(shù)據(jù)庫的編號。如果沒有指定db
參數(shù)宪祥,則默認使用編號為0的數(shù)據(jù)庫聂薪。
除了set()
和get()
方法,redis-py
庫還提供了多種操作Redis數(shù)據(jù)庫的方法蝗羊,包括incr()
藏澳、decr()
、hset()
耀找、hget()
翔悠、lpush()
、rpush()
野芒、lrange()
蓄愁、sadd()
、smembers()
狞悲、zadd()
撮抓、zrange()
等
連接Redis數(shù)據(jù)庫:
import redis
# 連接Redis數(shù)據(jù)庫
r = redis.Redis(host='localhost', port=6379, db=0)
設置鍵值對:
# 設置鍵值對
r.set('name', 'Tom')
獲取鍵值對:
# 獲取鍵值對
name = r.get('name')
print(name)
刪除鍵值對:
# 刪除鍵值對
r.delete('name')
設置過期時間:
# 設置過期時間
r.setex('name', 10, 'Tom') # 10秒后過期
判斷鍵是否存在:
# 判斷鍵是否存在
if r.exists('name'):
print('name exists')
else:
print('name does not exist')
自增自減:
# 自增
r.incr('count')
# 自減
r.decr('count')
以上是Redis庫的基本操作
2.python-redis對string類型的操作
Redis是一種內存鍵值對存儲數(shù)據(jù)庫,支持不同類別的數(shù)據(jù)類型摇锋,其中之一是string類型丹拯。字符串類型是Redis中最基本的數(shù)據(jù)類型站超。下面是一些操作Redis中String類型的基本操作:
①.設置String
我們可以使用set()
方法設置String。如果鍵不存在乖酬,則創(chuàng)建一個新鍵并存儲字符串值死相。如果鍵已經(jīng)存在則覆蓋該鍵的舊值。例如:
import redis
r = redis.Redis(host='localhost', port=6379, db=0)
r.set('key', 'value')
這將在Redis中創(chuàng)建一個名為“key”的鍵咬像,并將其值設置為“value”媳纬。
②.獲取String
我們可以使用get()方法來獲取String的值。例如:
value = r.get('key')
這將返回名為“key”的鍵的當前值施掏。
③.刪除String
我們可以使用delete()
方法來刪除String钮惠。例如:
r.delete('key')
這將刪除名為“key”的鍵。
④.操作String
Redis還提供了許多其他操作String的方法七芭,例如:
-
append(key, value)
:將value附加到key的末尾素挽。 -
incr(key[, amount])
:遞增名為“key”的鍵的值,可加+1或加自定義數(shù)值amount狸驳。 -
decr(key[, amount])
:遞減名為“key”的鍵的值预明,可減-1或減自定義數(shù)值amount。 -
setnx(key, value)
:僅在鍵“key”不存在時設置鍵的值為“value”耙箍。 -
getset(key, value)
:將鍵“key”的值設置為“value”撰糠,并返回鍵“key”之前的值。
例如辩昆,增加"in_stock"鍵的值2:
r.set("in_stock",10)
r.incr("in_stock",2)
print(r.get("in_stock"))
這將返回12阅酪,因為"in_stock"
鍵的值從10增加了2。
這是Redis中一些對String類型基本的操作汁针,我們還可以使用其他方法术辐,根據(jù)具體應用需求進行選擇和使用。