跟我一起從零開始學python(五)數(shù)據(jù)庫編程:Redis數(shù)據(jù)庫

前言

回顧之前講了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ù)以下學習路線展開講述身腻,由于內容較多,:

從零開始學python到高級進階路線圖

一丶服務端和客戶端基本操作命令

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 是有序集合的名稱,startend 分別表示要獲取的元素的起始位置和結束位置(從 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 是有序集合的名稱逊桦,minmax 分別表示要獲取的分數(shù)范圍的最小值和最大值眨猎,startnum 分別表示要獲取的元素的起始位置和數(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毕谴、redishiredis等距芬。其中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ù)具體應用需求進行選擇和使用。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末施无,一起剝皮案震驚了整個濱河市辉词,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌猾骡,老刑警劉巖瑞躺,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異兴想,居然都是意外死亡幢哨,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門襟企,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嘱么,“玉大人,你說我怎么就攤上這事顽悼÷瘢” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵蔚龙,是天一觀的道長冰评。 經(jīng)常有香客問我,道長木羹,這世上最難降的妖魔是什么甲雅? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮坑填,結果婚禮上抛人,老公的妹妹穿的比我還像新娘。我一直安慰自己脐瑰,他們只是感情好妖枚,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著苍在,像睡著了一般绝页。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上寂恬,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天续誉,我揣著相機與錄音,去河邊找鬼初肉。 笑死酷鸦,一個胖子當著我的面吹牛,可吹牛的內容都是我干的牙咏。 我是一名探鬼主播井佑,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼眠寿!你這毒婦竟也來了躬翁?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤盯拱,失蹤者是張志新(化名)和其女友劉穎盒发,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體狡逢,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡宁舰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了奢浑。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛮艰。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖雀彼,靈堂內的尸體忽然破棺而出壤蚜,到底是詐尸還是另有隱情即寡,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布袜刷,位于F島的核電站聪富,受9級特大地震影響,放射性物質發(fā)生泄漏著蟹。R本人自食惡果不足惜墩蔓,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望萧豆。 院中可真熱鬧奸披,春花似錦、人聲如沸涮雷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽份殿。三九已至膜钓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間卿嘲,已是汗流浹背颂斜。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留拾枣,地道東北人沃疮。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像梅肤,于是被迫代替她去往敵國和親司蔬。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內容