python連接讀寫操作redis的完整代碼實(shí)例
python讀寫操作redis數(shù)據(jù)庫
redis有16個(gè)邏輯數(shù)據(jù)庫(編號(hào)db0到db15),每個(gè)邏輯數(shù)據(jù)庫數(shù)據(jù)是隔離的,默認(rèn)db0。選擇第n個(gè)邏輯數(shù)據(jù)庫,命令select n ,python連接時(shí)可指定數(shù)據(jù)庫編號(hào)(0~15)。
為python安裝支持庫:
pip install redis
連接redis
第一種方式,直連:
import redis def redis_opt(): redis_conn = redis.Redis(host='127.0.0.1', port=6379, password='', db=6) print(redis_conn.client_id())
第二種方式,連接池:
import redis def redis_opt(): redis_pool = redis.ConnectionPool(host='127.0.0.1', port=6379, password='', db=6) redis_conn = redis.Redis(connection_pool=redis_pool) print(redis_conn.client_id())
對(duì)redis數(shù)據(jù)庫進(jìn)行讀寫操作
import redis def redis_opt(): redis_pool = redis.ConnectionPool(host='127.0.0.1', port=6379, password='', db=6) redis_conn = redis.Redis(connection_pool=redis_pool) key = 'data' my_data = {"name": 'fly', 'year': 2022} redis_conn.set(key, str(my_data)) print(redis_conn.get(key))
如圖:
更新操作:
key = 'data' my_data = {'name': 'fly', 'year': 2022} redis_conn.set(key, str(my_data)) my_data = {'name': 'phil', 'year': 2020} redis_conn.getset(key, str(my_data))
追加操作:
redis_pool = redis.ConnectionPool(host='127.0.0.1', port=6379, password='', db=6) redis_conn = redis.Redis(connection_pool=redis_pool) key = 'data' redis_conn.set(key, 'hello,') redis_conn.append(key, 'world')
lpush 列表左側(cè)追加值
key = 'data' redis_conn.lpush(key, 2020, 2021, 2022) redis_conn.lpush(key, 2023)
如果換成右側(cè)追加,相當(dāng)于尾部追加:
key = 'data' redis_conn.rpush(key, 2020, 2021, 2022) redis_conn.rpush(key, 2023)
lpushx(name, value),如果鍵name存在時(shí)候才追加,否則不會(huì)追加。
根據(jù)特定值位置位置插入新值
key = 'data' redis_conn.rpush(key, 2020, 2021, 2022) redis_conn.rpush(key, 2023) print(redis_conn.llen(key)) # 列表長(zhǎng)度 # AFTER,之后。BEFORE之前。 v = redis_conn.linsert(name=key, where='AFTER', refvalue=2020, value='1999') print(v)
根據(jù)索引位置插入新值:
key = 'data' redis_conn.rpush(key, 2020, 2021, 2022) redis_conn.rpush(key, 2023) print(redis_conn.llen(key)) # 列表長(zhǎng)度 v = redis_conn.lset(name=key, index=2, value='1999') print(v)
根據(jù)列表索引起始位置獲取值
key = 'data' redis_conn.rpush(key, 2020, 2021, 2022) redis_conn.rpush(key, 2023) print(redis_conn.llen(key)) # 列表長(zhǎng)度 v = redis_conn.lrange(name=key, start=1, end=3) print(v)
輸出:
4 [b'2021', b'2022', b'2023']
刪除列表左側(cè)的一個(gè)值
lpop(name)
從左向右刪除列表中n個(gè)相同的值
lrem(name, value, num)
如果是從右向作,需要把num的值改為負(fù)數(shù)即可,比如-3,從右向左刪掉3個(gè)重復(fù)的value。
刪除列表范圍之外所有值
ltrim(name, start, end)
列表中最右邊的值刪除并放入到新列表中的最左邊
rpoplpush(src, dst) brpoplpush(src, dst, timeout=0)
存儲(chǔ)哈希Map鍵值
key = 'data' redis_conn.hset(key, 'name', 'fly') redis_conn.hset(key, 'year', 2022) print(redis_conn.hget(key, 'year'))
輸出:
b'2022'
以下注意name和key的區(qū)分。name是作為在redis中的“大鍵”,key是在redis中存儲(chǔ)名為name的數(shù)據(jù)塊中的鍵。
存儲(chǔ)打包的哈希鍵值對(duì)
my_name = 'my_data' my_key = 'my_key' val = {'name': 'fly', 'year': 2022} json_val = json.dumps(val) redis_conn.hset(name=my_name, key=my_key, value=json_val) print(redis_conn.hgetall(my_name)) print(redis_conn.hkeys(my_name)) print(redis_conn.hvals(my_name))
輸出:
{b'my_key': b'{"name": "fly", "year": 2022}'} [b'my_key'] [b'{"name": "fly", "year": 2022}']
刪除鍵值對(duì)
my_name = 'my_data' my_key = 'my_key' val = {'name': 'fly', 'year': 2022} json_val = json.dumps(val) redis_conn.hset(name=my_name, key=my_key, value=json_val) print(redis_conn.hgetall(my_name)) print(redis_conn.hkeys(my_name)) print(redis_conn.hvals(my_name)) print(redis_conn.hexists(name=my_name, key=my_key)) print(redis_conn.hdel(my_name, my_key)) #刪除my_name數(shù)據(jù)塊里面的my_key鍵值對(duì)
設(shè)置鍵值的過期時(shí)間,超過時(shí)間就自動(dòng)刪除
my_name = 'my_data' my_key = 'my_key' val = {'name': 'fly', 'year': 2022} json_val = json.dumps(val) redis_conn.hset(name=my_name, key=my_key, value=json_val) print(redis_conn.hgetall(my_name)) redis_conn.expire(name=my_name, time=5) # 超過5秒自動(dòng)刪除。
全局查詢r(jià)edis中是否有以name存儲(chǔ)的數(shù)據(jù)塊
v = redis_conn.exists('my_name')
重命名redis中的鍵名
rename(src, dst)
把某一鍵值移動(dòng)到另外的redis邏輯庫
move(name, db)
類型判斷
type(name)
redis-sentinel哨兵模式下Python操作redis代碼實(shí)例
#redis-sentinel連接 ''' 啟動(dòng)redis服務(wù)端(6390主庫): redis-server msconf/redis-6390.conf redis-server msconf/redis-6391.conf redis-server msconf/redis-6392.conf redis-server msconf/redis-6393.conf 啟動(dòng)哨兵功能: redis-sentinel redis_sentinel/redis-sentinel_26390.conf redis-sentinel redis_sentinel/redis-sentinel_26391.conf redis-sentinel redis_sentinel/redis-sentinel_26392.conf ''' ## 導(dǎo)入redis sentinel包 from redis.sentinel import Sentinel #指定sentinel的地址和端口號(hào)(連接哨兵) sentinel=Sentinel([('192.168.160.135',26390),('192.168.160.135',26391),('192.168.160.135',26392)],socket_timeout=0.1) #測(cè)試,獲取以下主庫和從庫的信息:mymaster是哨兵配置文件中的指定的監(jiān)控主庫 print(sentinel.discover_master('mymaster'))#主庫信息 print(sentinel.discover_slaves('mymaster'))#從庫信息 ##配置讀寫分離 #寫節(jié)點(diǎn):主庫 master=sentinel.master_for('mymaster',password=123456,socket_timeout=0.1)#注意主庫設(shè)置了安全模式有密碼 print(master) #讀節(jié)點(diǎn):從庫 slave=sentinel.slave_for('mymaster',password=123456,socket_timeout=0.1)#注意從庫設(shè)置了安全模式有密碼 print(slave) #讀寫分離測(cè)試 print(master.dbsize()) print(master.keys()) print(slave.keys()) master.set('name4',4) print(slave.keys()) print(slave.get('name4'))
redis-cluster(集群)模式下Python操作redis代碼實(shí)例
# redis-cluster集群:https://github.com/Grokzen/redis-py-cluster # pip install redis-py-cluster from rediscluster import StrictRedisCluster #是少要鏈接集群中的一臺(tái)數(shù)據(jù)庫,可以是多臺(tái),防止有的數(shù)據(jù)庫會(huì)掛掉 startup_nodes = [{"host": "192.168.160.135", "port": "7000"}, {"host": "192.168.160.135", "port": "7001"}, {"host": "192.168.160.135", "port": "7002"}, {"host": "192.168.160.135", "port": "7003"}, {"host": "192.168.160.135", "port": "7004"}, {"host": "192.168.160.135", "port": "7005"} ] rc = StrictRedisCluster(startup_nodes=startup_nodes,password=123456, decode_responses=True) rc.set('name1',1234) print(rc.keys()) print(rc.dbsize()) print(rc.get('name1'))
以上就是python連接讀寫操作redis的完整代碼實(shí)例的詳細(xì)內(nèi)容,更多關(guān)于python讀寫redis的代碼實(shí)例的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!,希望大家以后多多支持腳本之家!
相關(guān)文章
Python交換字典鍵值對(duì)的四種方法實(shí)例
字典中有成對(duì)出現(xiàn)的鍵和值,但是字典中的鍵值對(duì)不是都能修改的,只有值才能修改,下面這篇文章主要給大家介紹了關(guān)于Python交換字典鍵值對(duì)的四種方法,需要的朋友可以參考下2022-12-12Python構(gòu)造自定義方法來美化字典結(jié)構(gòu)輸出的示例
這篇文章主要介紹了用Python構(gòu)造自定義方法來美化字典結(jié)構(gòu)輸出的示例,原理就是利用遞歸法來拼接字符串,需要的朋友可以參考下2016-06-06解決python父線程關(guān)閉后子線程不關(guān)閉問題
這篇文章主要介紹了解決python父線程關(guān)閉后子線程不關(guān)閉問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-04-04python機(jī)器學(xué)習(xí)基礎(chǔ)K近鄰算法詳解KNN
這篇文章主要為大家介紹了python機(jī)器學(xué)習(xí)基礎(chǔ)K近鄰算法詳解有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2021-11-11Python實(shí)現(xiàn)爬取騰訊招聘網(wǎng)崗位信息
這篇文章主要介紹了如何用python爬取騰訊招聘網(wǎng)崗位信息保存到表格,并做成簡(jiǎn)單可視化。文中的示例代碼對(duì)學(xué)習(xí)Python有一定的幫助,感興趣的可以了解一下2022-01-01Django?ORM?事務(wù)和查詢優(yōu)化的操作方法
這篇文章主要介紹了Django?ORM?事務(wù)和查詢優(yōu)化,包括事務(wù)操作、ORM 惰性查詢及only與defer相關(guān)知識(shí),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09