python使用redis教程 敲黑板划重点
WIN7 python使用Redis
- 目標(biāo):
- 連接池連接redis:
- redis基本命令:
- String類型的處理命令
- hash類型的處理命令
- list類型的處理命令
- set類型的處理命令
- 有序set類型的處理命令
- 其他常用操作
- 管道(pipeline)
- redis總結(jié):
目標(biāo):
學(xué)會使用redis,使用python代碼又非常簡潔。劃重點(diǎn):原來這貨就這點(diǎn)知識。并不難。
原文教程太冗余了:詳細(xì)教程
java版教程:JAVA教程
# win7安裝redis:
win7安裝redis需要首先下載客戶端:提取碼1234
然后解壓,運(yùn)行文件夾中的以下服務(wù)端和客戶端:
然后在python終端或者anaconda終端,輸入:pip install redis安裝redis。
當(dāng)服務(wù)端出現(xiàn)以下界面,說明服務(wù)端已經(jīng)啟動了。端口號為6379.
1、 搭建 好 開發(fā)環(huán)境,就可以掌握以下知識就夠了。
連接池連接redis:
redis使用connection pool來管理對一個redis server的所有連接,避免每次單一連接建立、釋放連接的開銷。默認(rèn),每個Redis實(shí)例都會維護(hù)一個自己的連接池。 掌握直接建立一個連接池,然后作為參數(shù)Redis,可以實(shí)現(xiàn)多個Redis實(shí)例共享一個連接池 import redis # 導(dǎo)入redis 模塊 pool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True) r = redis.Redis(connection_pool=pool) r.set('name', 'runoob') # 設(shè)置 name 對應(yīng)的值 print(r.get('name')) # 取出鍵 name 對應(yīng)的值 print(pool)redis最常用的set和get方法已經(jīng)如上圖了。
redis基本命令:
掌握常用命令即可,不常用的用的時候再查。
String類型的處理命令
1.set(key, value),就是給name賦值為value。
r.set('name', 'runoob') # 設(shè)置 name 對應(yīng)的值2.setnx(key, value)
設(shè)置值,只有name不存在時,執(zhí)行設(shè)置操作。
3.一次性設(shè)置多個值mset,一次性獲取多個值mget。
r.mset({'k1': 'v1', 'k2': 'v2'}) print(r.mget("k1", "k2")) # 一次取出多個鍵對應(yīng)的值 print(r.mget("k1"))4、獲取指定序列字符串getrange(key, start, end),注意包含start和end,和python中的range函數(shù)不一樣。
r.set("en_name","luoji") # 字母 print(r.getrange("en_name", 0, 2)) # 取索引號是0-2 前3位的字節(jié)luo 切片操作 print(r.getrange("en_name", 0, -1)) # 取所有的字節(jié) luoji 切片操作5.計(jì)數(shù)函數(shù)(增加函數(shù))
增加incr(self, name, amount=1)
同incrbyfloat(self, name, amount=1.0)。
減少decr(self, name, amount=1)。
假定我們對統(tǒng)計(jì)網(wǎng)頁點(diǎn)擊次數(shù)。如果使用關(guān)系數(shù)據(jù)庫來存儲點(diǎn)擊,可能存在大量的行級鎖爭用。所以,點(diǎn)擊數(shù)的增加使用redis的INCR命令最好不過了。
輸出34636
6、append(key, value)
在redis name對應(yīng)的值后面追加內(nèi)容。
輸出:luojishuaige
hash類型的處理命令
1.hset(name, key,value),就是給name賦值為value。
hget(name,key)
2、hgetall(name)
獲取name對應(yīng)hash的所有鍵值
3、hlen(name)
獲取name對應(yīng)的hash中鍵值對的個數(shù).
4、hkeys(name)
獲取name對應(yīng)的hash中所有的key的值
5、hvals(name)
獲取name對應(yīng)的hash中所有的value的值
6、hexists(name, key)
檢查name對應(yīng)的hash是否存在當(dāng)前傳入的key
7、hdel(name,*keys)
將name對應(yīng)的hash中指定key的鍵值對刪除
8、hincrby(name, key, amount=1)
自增name對應(yīng)的hash中的指定key的值,不存在則創(chuàng)建key=amount
9、hscan_iter(name, match=None, count=None)
利用實(shí)現(xiàn)分批去redis中獲取數(shù)據(jù)
參數(shù):
match,匹配指定key,默認(rèn)None 表示所有的key
list類型的處理命令
1.lpush(listname,values)
在listname中添加最左邊添加元素。
對應(yīng)有rpush(listname,values)
在listname中添加最右邊添加元素。
2、r.lset(name, index, value)
對name對應(yīng)的list中的某一個索引位置重新賦值
3、刪除(指定值進(jìn)行刪除)
r.lrem(name, value, num)
在name對應(yīng)的list中刪除指定的值
參數(shù):
name,redis的name
value,要刪除的值
num, num=0,刪除列表中所有的指定值;
4、取值(根據(jù)索引號取值)
lindex(name, index)
在name對應(yīng)的列表中根據(jù)索引獲取列表元素
5.自定義增量迭代
由于redis類庫中沒有提供對列表元素的增量迭代,如果想要循環(huán)name對應(yīng)的列表的所有元素,那么就需要:
但是,如果列表非常大,那么就有可能在第一步時就將程序的內(nèi)存撐爆,所有有必要自定義一個增量迭代的功能:
def list_iter(name):"""自定義redis列表增量迭代:param name: redis中的name,即:迭代name對應(yīng)的列表: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)set類型的處理命令
1.新增
sadd(name,values)
name對應(yīng)的集合中添加元素
2.獲取元素個數(shù) 類似于len
scard(name)
獲取name對應(yīng)的集合中元素個數(shù)
3.獲取集合中所有的成員
smembers(name)
獲取name對應(yīng)的集合的所有成員
4、獲取集合中所有的成員,sscan(name)
返回一個元組,元組第二個成員是list的值。
輸出:(0, [‘33’, ‘44’, ‘55’, ‘66’])
5、list可以做差、交、并集,這里了解。
有序set類型的處理命令
Set操作,Set集合就是不允許重復(fù)的列表,本身是無序的。
有序集合,在集合的基礎(chǔ)上,為每元素排序;元素的排序需要根據(jù)另外一個值來進(jìn)行比較,
所以,對于有序集合,每一個元素有兩個值,即:值和權(quán)重,專門用來做排序。
1.新增
zadd(name, *args, **kwargs)
在name對應(yīng)的有序集合中添加元素
2.獲取有序集合元素個數(shù) 類似于len
zcard(name)
獲取name對應(yīng)的有序集合元素的數(shù)量
3、獲取有序集合的所有元素
r.zrange( name, start, end,
4、獲取所有元素–默認(rèn)按照分?jǐn)?shù)順序排序
zscan(name)
5 獲取所有元素–迭代器
zscan_iter(name)
6、刪除–指定值刪除
zrem(name, values)
刪除name對應(yīng)的有序集合中值是values的成員
其他常用操作
1.刪除
delete(names)
根據(jù)刪除redis中的任意數(shù)據(jù)類型(string、hash、list、set、有序set)
2.檢查名字是否存在
exists(name)
檢測redis的name是否存在,存在就是True,False 不存在
3.模糊匹配
keys(pattern=’’)
根據(jù)模型獲取redis的name
更多:
KEYS * 匹配數(shù)據(jù)庫中所有 key 。
4.獲取類型
type(name)
獲取name對應(yīng)值的類型
5.查看所有元素
scan(cursor=0, match=None, count=None)
需要分類型。這里注意
6.查看所有元素–迭代器,需要分類型。
scan_iter(name, count=None)
管道(pipeline)
redis默認(rèn)在執(zhí)行每次請求都會創(chuàng)建(連接池申請連接)和斷開(歸還連接池)一次連接操作,
如果想要在一次請求中執(zhí)行多個命令,則可以使用pipline實(shí)現(xiàn)一次請求指定多個命令,并且默認(rèn)情況下一次pipline 是原子性操作。
管道(pipeline)是redis在提供單個請求中緩沖多條服務(wù)器命令。減少服務(wù)器-客戶端之間反復(fù)的TCP數(shù)據(jù)庫包,從而大大提高了執(zhí)行批量命令的效率。
import redis import time pool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True) r = redis.Redis(connection_pool=pool) pipe = r.pipeline() # 創(chuàng)建一個管道pipe.set('name', 'jack') pipe.set('role', 'sb') pipe.sadd('faz', 'baz') pipe.incr('num') # 如果num不存在則vaule為1,如果存在,則value自增1 pipe.execute()print(r.get("name")) print(r.get("role")) print(r.get("num"))管道的命令可以寫在一起,如:
pipe.set('hello', 'redis').sadd('faz', 'baz').incr('num').execute()但是建議分開好看些。
redis總結(jié):
(Redis) 是key-value 存儲系統(tǒng),是跨平臺的非關(guān)系型數(shù)據(jù)庫。
Redis 是一個開源的使用 ANSI C 語言編寫、遵守 BSD 協(xié)議、支持網(wǎng)絡(luò)、可基于內(nèi)存、分布式、可選持久性的鍵值對(Key-Value)存儲數(shù)據(jù)庫,并提供多種語言的 API。
Redis 通常被稱為數(shù)據(jù)結(jié)構(gòu)服務(wù)器,因?yàn)橹?#xff08;value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等類型。
總結(jié)
以上是生活随笔為你收集整理的python使用redis教程 敲黑板划重点的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: StratifiedKFold和KFol
- 下一篇: python字典排序及字典集合去重高阶教