網站首頁 編程語言 正文
python讀寫操作redis數據庫
redis有16個邏輯數據庫(編號db0到db15),每個邏輯數據庫數據是隔離的,默認db0。選擇第n個邏輯數據庫,命令select n?,python連接時可指定數據庫編號(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())
對redis數據庫進行讀寫操作
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 列表左側追加值
key = 'data'
redis_conn.lpush(key, 2020, 2021, 2022)
redis_conn.lpush(key, 2023)
如果換成右側追加,相當于尾部追加:
key = 'data'
redis_conn.rpush(key, 2020, 2021, 2022)
redis_conn.rpush(key, 2023)
lpushx(name, value),如果鍵name存在時候才追加,否則不會追加。
根據特定值位置位置插入新值
key = 'data'
redis_conn.rpush(key, 2020, 2021, 2022)
redis_conn.rpush(key, 2023)
print(redis_conn.llen(key)) # 列表長度
# AFTER,之后。BEFORE之前。
v = redis_conn.linsert(name=key, where='AFTER', refvalue=2020, value='1999')
print(v)
根據索引位置插入新值:
key = 'data'
redis_conn.rpush(key, 2020, 2021, 2022)
redis_conn.rpush(key, 2023)
print(redis_conn.llen(key)) # 列表長度
v = redis_conn.lset(name=key, index=2, value='1999')
print(v)
根據列表索引起始位置獲取值
key = 'data'
redis_conn.rpush(key, 2020, 2021, 2022)
redis_conn.rpush(key, 2023)
print(redis_conn.llen(key)) # 列表長度
v = redis_conn.lrange(name=key, start=1, end=3)
print(v)
輸出:
4
[b'2021', b'2022', b'2023']
刪除列表左側的一個值
lpop(name)
從左向右刪除列表中n個相同的值
lrem(name, value, num)
如果是從右向作,需要把num的值改為負數即可,比如-3,從右向左刪掉3個重復的value。
刪除列表范圍之外所有值
ltrim(name, start, end)
列表中最右邊的值刪除并放入到新列表中的最左邊
rpoplpush(src, dst)
brpoplpush(src, dst, timeout=0)
存儲哈希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的區分。name是作為在redis中的“大鍵”,key是在redis中存儲名為name的數據塊中的鍵。
存儲打包的哈希鍵值對
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}']
刪除鍵值對
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數據塊里面的my_key鍵值對
設置鍵值的過期時間,超過時間就自動刪除
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秒自動刪除。
全局查詢redis中是否有以name存儲的數據塊
v = redis_conn.exists('my_name')
重命名redis中的鍵名
rename(src, dst)
把某一鍵值移動到另外的redis邏輯庫
move(name, db)
類型判斷
type(name)
redis-sentinel哨兵模式下Python操作redis代碼實例
#redis-sentinel連接
'''
啟動redis服務端(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
啟動哨兵功能:
redis-sentinel redis_sentinel/redis-sentinel_26390.conf
redis-sentinel redis_sentinel/redis-sentinel_26391.conf
redis-sentinel redis_sentinel/redis-sentinel_26392.conf
'''
## 導入redis sentinel包
from redis.sentinel import Sentinel
#指定sentinel的地址和端口號(連接哨兵)
sentinel=Sentinel([('192.168.160.135',26390),('192.168.160.135',26391),('192.168.160.135',26392)],socket_timeout=0.1)
#測試,獲取以下主庫和從庫的信息:mymaster是哨兵配置文件中的指定的監控主庫
print(sentinel.discover_master('mymaster'))#主庫信息
print(sentinel.discover_slaves('mymaster'))#從庫信息
##配置讀寫分離
#寫節點:主庫
master=sentinel.master_for('mymaster',password=123456,socket_timeout=0.1)#注意主庫設置了安全模式有密碼
print(master)
#讀節點:從庫
slave=sentinel.slave_for('mymaster',password=123456,socket_timeout=0.1)#注意從庫設置了安全模式有密碼
print(slave)
#讀寫分離測試
print(master.dbsize())
print(master.keys())
print(slave.keys())
master.set('name4',4)
print(slave.keys())
print(slave.get('name4'))
redis-cluster(集群)模式下Python操作redis代碼實例
# redis-cluster集群:https://github.com/Grokzen/redis-py-cluster
# pip install redis-py-cluster
from rediscluster import StrictRedisCluster
#是少要鏈接集群中的一臺數據庫,可以是多臺,防止有的數據庫會掛掉
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'))
原文鏈接:https://blog.csdn.net/zhangphil/article/details/126640741
相關推薦
- 2022-12-05 python實現兩字符串映射_python
- 2023-05-29 Python常見異常的處理方式淺析_python
- 2022-08-11 GoFrame框架數據校驗之校驗結果Error接口對象_Golang
- 2022-08-06 C#讀取word中表格數據的方法實現_C#教程
- 2022-09-13 Android四大組件之Activity深入解讀生命周期_Android
- 2023-01-20 Python中用try-except-finally處理異常問題_python
- 2022-03-27 mongodb啟動方法小結_MongoDB
- 2022-05-15 go?RWMutex的實現示例_Golang
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支