<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Python 要使用 redis,需要先安裝 redis 模組:
pip install redis
測試安裝:
redis 取出的結果預設是位元組,我們可以設定 decode_responses=True 改成字串
r = redis.Redis(host='localhost', port=6379, decode_responses=True) r.set('name', 'dahezhiquan') # 設定 name 對應的值 print(r['name']) # dahezhiquan print(r.get('name')) # dahezhiquan print(type(r.get('name'))) # <class 'str'>
redis-py 使用 connection pool 來管理對一個 redis server 的所有連線,避免每次建立、釋放連線的開銷。
預設,每個Redis範例都會維護一個自己的連線池。可以直接建立一個連線池,然後作為引數 Redis,這樣就可以實現多個 Redis 範例共用一個連線池。
redis.ConnectionPool(host='localhost', port=6379, decode_responses=True) r = redis.Redis(host='localhost', port=6379, decode_responses=True) r.set('name', 'dahe') print(r.get('name')) # dahe
set,在 Redis 中設定值,預設,不存在則建立,存在則修改:
語法:
set(name, value, ex=None, px=None, nx=False, xx=False)
引數:
案例1:(3秒後,name的值就會變為None)
redis.ConnectionPool(host='localhost', port=6379, decode_responses=True) r = redis.Redis(host='localhost', port=6379, decode_responses=True) r.set('name', 'xiaoqian', ex=3) # 設定過期時間為3秒 print(r.get('name')) # xiaoqian
三秒後再次獲取name的值:
print(r.get('name')) # None
mset,批次獲取值:
redis.ConnectionPool(host='localhost', port=6379, decode_responses=True) r = redis.Redis(host='localhost', port=6379, decode_responses=True) r.set("name1", "xiaoqian") r.set("name2", "xiaoguo") print(r.mget('name1', 'name2')) # ['xiaoqian', 'xiaoguo']
getset(name, value),設定新值並獲取原來的值:
redis.ConnectionPool(host='localhost', port=6379, decode_responses=True) r = redis.Redis(host='localhost', port=6379, decode_responses=True) print(r.getset("name1", "heihei")) # xiaoqian print(r.get("name1")) # heihei
strlen(name),返回name對應值的位元組長度(一個漢字3個位元組):
print(r.strlen("name"))
incr(name, amount=1),自增 name 對應的值,當 name 不存在時,則建立 name=amount,否則,則自增:
引數:
redis.ConnectionPool(host='localhost', port=6379, decode_responses=True) r = redis.Redis(host='localhost', port=6379, decode_responses=True) r.set("like", 521) r.incr("like", amount=1) print(r.get("like")) # 522
可以使用incrbyfloat方法自增浮點數型別
使用decr進行自減操作
append(key, value),在redis name對應的值後面追加內容:
引數:
r.append("name1", "world") print(r.get("name1"))
hset(name, key, value),單個增加–修改:
name對應的hash中設定一個鍵值對(不存在,則建立;否則,修改)
引數:
redis.ConnectionPool(host='localhost', port=6379, decode_responses=True) r = redis.Redis(host='localhost', port=6379, decode_responses=True) r.hset("dahe", "name", "guo") r.hset("dahe", "age", 28) # 獲取dahe的所有key print(r.hkeys("dahe")) # ['name', 'age'] print(r.hget("dahe", "name")) # guo print(r.hmget("dahe", "name", "age")) # ['guo', '28']
hmset(name, mapping),在name對應的hash中批次設定鍵值對:
redis.ConnectionPool(host='localhost', port=6379, decode_responses=True) r = redis.Redis(host='localhost', port=6379, decode_responses=True) r.hmset("hash1", {"k1": "v1", "k2": "v2", "k3": "v3"}) print(r.hmget("hash1", "k1", "k2", "k3")) # ['v1', 'v2', 'v3']
hgetall(name),取出所有的鍵值對:
print(r.hgetall("dahe")) # {'name': 'guo', 'age': '28'}
hvals(name),得到所有的value:
print(r.hvals("dahe")) # ['guo', '28']
hdel(name,*keys),將name對應的hash中指定key的鍵值對刪除:
r.hdel("hash1", "k1") print(r.hgetall("hash1")) # {'k2': 'v2', 'k3': 'v3'}
hincrby(name, key, amount=1),自增自減整數:
引數:
name - redis中的name
key - hash對應的key
amount - 自增數(整數,負數表示自減)
hincrbyfloat(name, key, amount=1.0)表示自增自減浮點數
lpush(name,values),增加:
在name對應的list中新增元素,每個新的元素都新增到列表的最左邊
redis.ConnectionPool(host='localhost', port=6379, decode_responses=True) r = redis.Redis(host='localhost', port=6379, decode_responses=True) r.lpush("score", 10, 20, 30, 40) print(r.lrange("score", 0, -1)) # ['40', '30', '20', '10']
rpush表示從右邊增加
r.lset(name, index, value),對name對應的list中的某一個索引位置重新賦值:
引數:
redis.ConnectionPool(host='localhost', port=6379, decode_responses=True) r = redis.Redis(host='localhost', port=6379, decode_responses=True) r.lset("score", 0, 521) print(r.lrange("score", 0, 4)) # ['521', '30', '20', '10', '40']
r.lrem(name, value, num),刪除:
引數:
name - redis的name
value - 要刪除的值
num - num=0,刪除列表中所有的指定值;
r.lrem("list2", "11", 1) # 將列表中左邊第一次出現的"11"刪除 print(r.lrange("list2", 0, -1)) r.lrem("list2", "99", -1) # 將列表中右邊第一次出現的"99"刪除 print(r.lrange("list2", 0, -1)) r.lrem("list2", "22", 0) # 將列表中所有的"22"刪除 print(r.lrange("list2", 0, -1))
lindex(name, index),取值:
print(r.lindex("list2", 0)) # 取出索引號是0的值
自定義增量迭代:
由於redis類庫中沒有提供對列表元素的增量迭代,如果想要回圈name對應的列表的所有元素,那麼就需要獲取name對應的所有列表。
但是,如果列表非常大,那麼就有可能在第一步時就將程式的內容撐爆,所有有必要自定義一個增量迭代的功能:
def list_iter(name): """ 自定義redis列表增量迭代 :param name: redis中的name,即:迭代name對應的列表 :return: yield 返回 列表元素 """ list_count = r.llen(name) for index in range(list_count): yield r.lindex(name, index) # 使用 for item in list_iter('list2'): # 遍歷這個列表 print(item)
sadd(name,values),新增:
pool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True) r = redis.Redis(connection_pool=pool) r.sadd("set1", 33, 44, 55, 66) # 往集合中新增元素 print(r.scard("set1")) # 4(集合長度) print(r.smembers("set1")) # {'66', '44', '55', '33'}(取出集合所有元素)
srem(name, values),在name對應的集合中刪除某些值:
r.srem("set1", 66) print(r.smembers("set1")) # {'44', '33', '55'}
python-redis set支援集合的所有操作,請參考官方檔案
delete(*names),刪除:
根據刪除redis中的任意資料型別(string、hash、list、set、有序set)
pool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True) r = redis.Redis(connection_pool=pool) r.delete("set2")
expire(name ,time),為某個redis的某個name設定超時時間:
r.expire("set1", time=3)
rename(src, dst),重新命名:
r.rename("dahe", "dahe-1")
redis預設在執行每次請求都會建立(連線池申請連線)和斷開(歸還連線池)一次連線操作,如果想要在一次請求中指定多個命令,則可以使用pipline實現一次請求指定多個命令,並且預設情況下一次pipline是原子性操作
範例:
pool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True) r = redis.Redis(connection_pool=pool) pipe = r.pipeline() # 建立一個管道 pipe.set('name', 'jack') pipe.set('role', 'sb') pipe.sadd('age', '18') pipe.execute()
以上就是Python redis模組的使用教學指南的詳細內容,更多關於Python redis模組的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45