日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

使用python来操作redis用法详解

發布時間:2024/9/5 python 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用python来操作redis用法详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、redis連接

redis提供兩個類Redis和StrictRedis用于實現Redis的命令,StrictRedis用于實現大部分官方的命令,并使用官方的語法和命令,Redis是StrictRedis的子類,用于向后兼容舊版本的redis-py。

redis連接實例是線程安全的,可以直接將redis連接實例設置為一個全局變量,直接使用。如果需要另一個Redis實例(or Redis數據庫)時,就需要重新創建redis連接實例來獲取一個新的連接。同理,python的redis沒有實現select命令。

安裝redis

pip install redis

連接redis,加上decode_responses=True,寫入的鍵值對中的value為str類型,不加這個參數寫入的則為字節類型。

import redis # 導入redis模塊,通過python操作redis 也可以直接在redis主機的服務端操作緩存數據庫r = redis.Redis(host='localhost', port=6379, decode_responses=True) # host是redis主機,需要redis服務端和客戶端都啟動 redis默認端口是6379 r.set('name', 'junxi') # key是"foo" value是"bar" 將鍵值對存入redis緩存 print(r['name']) print(r.get('name')) # 取出鍵name對應的值 print(type(r.get('name')))
2、連接池

redis-py使用connection pool來管理對一個redis server的所有連接,避免每次建立、釋放連接的開銷。默認,每個Redis實例都會維護一個自己的連接池。
可以直接建立一個連接池,然后作為參數Redis,這樣就可以實現多個Redis實例共享一個連接池

連接池

import redis # 導入redis模塊,通過python操作redis 也可以直接在redis主機的服務端操作緩存數據庫pool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True) # host是redis主機,需要redis服務端和客戶端都起著 redis默認端口是6379 r = redis.Redis(connection_pool=pool) r.set('gender', 'male') # key是"gender" value是"male" 將鍵值對存入redis緩存 print(r.get('gender')) # gender 取出鍵male對應的值
3、redis基本命令 String

set(name, value, ex=None, px=None, nx=False, xx=False)

在Redis中設置值,默認,不存在則創建,存在則修改
參數:
ex,過期時間(秒)
px,過期時間(毫秒)
nx,如果設置為True,則只有name不存在時,當前set操作才執行
xx,如果設置為True,則只有name存在時,當前set操作才執行

1.ex,過期時間(秒) 這里過期時間是3秒,3秒后p,鍵food的值就變成None

import redispool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True) r = redis.Redis(connection_pool=pool) r.set('food', 'mutton', ex=3) # key是"food" value是"mutton" 將鍵值對存入redis緩存 print(r.get('food')) # mutton 取出鍵food對應的值

2.px,過期時間(豪秒) 這里過期時間是3豪秒,3毫秒后,鍵foo的值就變成None

import redispool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True) r = redis.Redis(connection_pool=pool) r.set('food', 'beef', px=3) print(r.get('food'))

3.nx,如果設置為True,則只有name不存在時,當前set操作才執行 (新建)

import redispool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True) r = redis.Redis(connection_pool=pool) print(r.set('fruit', 'watermelon', nx=True)) # True--不存在 # 如果鍵fruit不存在,那么輸出是True;如果鍵fruit已經存在,輸出是None

4.xx,如果設置為True,則只有name存在時,當前set操作才執行 (修改)

print((r.set('fruit', 'watermelon', xx=True))) # True--已經存在 # 如果鍵fruit已經存在,那么輸出是True;如果鍵fruit不存在,輸出是None

5.setnx(name, value)
設置值,只有name不存在時,執行設置操作(添加)

print(r.setnx('fruit1', 'banana')) # fruit1不存在,輸出為True

6.setex(name, value, time)
設置值
參數:
time,過期時間(數字秒 或 timedelta對象)

import redis import timepool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True) r = redis.Redis(connection_pool=pool) r.setex("fruit2", "orange", 5) time.sleep(5) print(r.get('fruit2')) # 5秒后,取值就從orange變成None

7.psetex(name, time_ms, value)
設置值
參數:
time_ms,過期時間(數字毫秒 或 timedelta對象)

r.psetex("fruit3", 5000, "apple") time.sleep(5) print(r.get('fruit3')) # 5000毫秒后,取值就從apple變成None

8.mset(*args, **kwargs)
批量設置值
如:

r.mget({'k1': 'v1', 'k2': 'v2'}) r.mset(k1="v1", k2="v2") # 這里k1 和k2 不能帶引號 一次設置對個鍵值對 print(r.mget("k1", "k2")) # 一次取出多個鍵對應的值 print(r.mget("k1"))

9.mget(keys, *args)
批量獲取
如:

print(r.mget('k1', 'k2')) print(r.mget(['k1', 'k2'])) print(r.mget("fruit", "fruit1", "fruit2", "k1", "k2")) # 將目前redis緩存中的鍵對應的值批量取出來

10.getset(name, value)
設置新值并獲取原來的值

print(r.getset("food", "barbecue")) # 設置的新值是barbecue 設置前的值是beef

11.getrange(key, start, end)
獲取子序列(根據字節獲取,非字符)
參數:
name,Redis 的 name
start,起始位置(字節)
end,結束位置(字節)
如: "君惜大大" ,0-3表示 "君"

r.set("cn_name", "君惜大大") # 漢字 print(r.getrange("cn_name", 0, 2)) # 取索引號是0-2 前3位的字節 君 切片操作 (一個漢字3個字節 1個字母一個字節 每個字節8bit) print(r.getrange("cn_name", 0, -1)) # 取所有的字節 君惜大大 切片操作 r.set("en_name","junxi") # 字母 print(r.getrange("en_name", 0, 2)) # 取索引號是0-2 前3位的字節 jun 切片操作 (一個漢字3個字節 1個字母一個字節 每個字節8bit) print(r.getrange("en_name", 0, -1)) # 取所有的字節 junxi 切片操作

12.setrange(name, offset, value)
修改字符串內容,從指定字符串索引開始向后替換(新值太長時,則向后添加)
參數:
offset,字符串的索引,字節(一個漢字三個字節)
value,要設置的值

r.setrange("en_name", 1, "ccc") print(r.get("en_name")) # jccci 原始值是junxi 從索引號是1開始替換成ccc 變成 jccci

13.setbit(name, offset, value)
對name對應值的二進制表示的位進行操作
參數:
name,redis的name
offset,位的索引(將值變換成二進制后再進行索引)
value,值只能是 1 或 0

注:如果在Redis中有一個對應: n1 = "foo", 那么字符串foo的二進制表示為:01100110 01101111 01101111 所以,如果執行 setbit('n1', 7, 1),則就會將第7位設置為1, 那么最終二進制則變成 01100111 01101111 01101111,即:"goo"擴展,轉換二進制表示: source = "陳思維" source = "foo" for i in source: num = ord(i) print bin(num).replace('b','') 特別的,如果source是漢字 "陳思維"怎么辦? 答:對于utf-8,每一個漢字占 3 個字節,那么 "陳思維" 則有 9個字節 對于漢字,for循環時候會按照 字節 迭代,那么在迭代時,將每一個字節轉換 十進制數,然后再將十進制數轉換成二進制 11100110 10101101 10100110 11100110 10110010 10011011 11101001 10111101 10010000

14.getbit(name, offset)
獲取name對應的值的二進制表示中的某位的值 (0或1)

print(r.getbit("foo1", 0)) # 0 foo1 對應的二進制 4個字節 32位 第0位是0還是1

15.bitcount(key, start=None, end=None)
獲取name對應的值的二進制表示中 1 的個數
參數:
key,Redis的name
start 字節起始位置
end,字節結束位置

print(r.get("foo")) # goo1 01100111 print(r.bitcount("foo",0,1)) # 11 表示前2個字節中,1出現的個數

16.bitop(operation, dest, *keys)
獲取多個值,并將值做位運算,將最后的結果保存至新的name對應的值

參數:
operation,AND(并) 、 OR(或) 、 NOT(非) 、 XOR(異或)
dest, 新的Redis的name
*keys,要查找的Redis的name

如:

bitop("AND", 'new_name', 'n1', 'n2', 'n3') 獲取Redis中n1,n2,n3對應的值,然后講所有的值做位運算(求并集),然后將結果保存 new_name 對應的值中 r.set("foo","1") # 0110001 r.set("foo1","2") # 0110010 print(r.mget("foo","foo1")) # ['goo1', 'baaanew'] print(r.bitop("AND","new","foo","foo1")) # "new" 0 0110000 print(r.mget("foo","foo1","new")) source = "12" for i in source: num = ord(i) print(num) # 打印每個字母字符或者漢字字符對應的ascii碼值 f-102-0b100111-01100111 print(bin(num)) # 打印每個10進制ascii碼值轉換成二進制的值 0b1100110(0b表示二進制) print bin(num).replace('b','') # 將二進制0b1100110替換成01100110

17.strlen(name)
返回name對應值的字節長度(一個漢字3個字節)

print(r.strlen("foo")) # 4 'goo1'的長度是4

18.incr(self, name, amount=1)
自增 name對應的值,當name不存在時,則創建name=amount,否則,則自增。
參數:
name,Redis的name
amount,自增數(必須是整數)
注:同incrby

r.set("foo", 123) print(r.mget("foo", "foo1", "foo2", "k1", "k2")) r.incr("foo", amount=1) print(r.mget("foo", "foo1", "foo2", "k1", "k2"))

應用場景 – 頁面點擊數
假定我們對一系列頁面需要記錄點擊次數。例如論壇的每個帖子都要記錄點擊次數,而點擊次數比回帖的次數的多得多。如果使用關系數據庫來存儲點擊,可能存在大量的行級鎖爭用。所以,點擊數的增加使用redis的INCR命令最好不過了。
當redis服務器啟動時,可以從關系數據庫讀入點擊數的初始值(12306這個頁面被訪問了34634次)

r.set("visit:12306:totals", 34634) print(r.get("visit:12306:totals"))

每當有一個頁面點擊,則使用INCR增加點擊數即可。

r.incr("visit:12306:totals") r.incr("visit:12306:totals")

頁面載入的時候則可直接獲取這個值

print(r.get("visit:12306:totals"))

19.incrbyfloat(self, name, amount=1.0)
自增 name對應的值,當name不存在時,則創建name=amount,否則,則自增。
參數:
name,Redis的name
amount,自增數(浮點型)

r.set("foo1", "123.0") r.set("foo2", "221.0") print(r.mget("foo1", "foo2")) r.incrbyfloat("foo1", amount=2.0) r.incrbyfloat("foo2", amount=3.0) print(r.mget("foo1", "foo2"))

20.decr(self, name, amount=1)
自減 name對應的值,當name不存在時,則創建name=amount,否則,則自減。
參數:
name,Redis的name
amount,自減數(整數)

r.decr("foo4", amount=3) # 遞減3 r.decr("foo1", amount=1) # 遞減1 print(r.mget("foo1", "foo4"))

21.append(key, value)
在redis name對應的值后面追加內容
參數:
key, redis的name
value, 要追加的字符串

r.append("name", "haha") # 在name對應的值junxi后面追加字符串haha print(r.mget("name"))
4、redis基本命令 hash

1.單個增加--修改(單個取出)--沒有就新增,有的話就修改
hset(name, key, value)
name對應的hash中設置一個鍵值對(不存在,則創建;否則,修改)
參數:
name,redis的name
key,name對應的hash中的key
value,name對應的hash中的value
注:
hsetnx(name, key, value),當name對應的hash中不存在當前key時則創建(相當于添加)

import redis import timepool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True) r = redis.Redis(connection_pool=pool) r.hset("hash1", "k1", "v1") r.hset("hash1", "k2", "v2") print(r.hkeys("hash1")) # 取hash中所有的key print(r.hget("hash1", "k1")) # 單個取hash的key對應的值 print(r.hmget("hash1", "k1", "k2")) # 多個取hash的key對應的值 r.hsetnx("hash1", "k2", "v3") # 只能新建 print(r.hget("hash1", "k2"))

2 批量增加(取出)
hmset(name, mapping)
在name對應的hash中批量設置鍵值對
參數:
name,redis的name
mapping,字典,如:{'k1':'v1', 'k2': 'v2'}
如:

r.hmset("hash2", {"k2": "v2", "k3": "v3"})

hget(name,key)
在name對應的hash中獲取根據key獲取value
hmget(name, keys, *args)
在name對應的hash中獲取多個key的值
參數:
name,reids對應的name
keys,要獲取key集合,如:['k1', 'k2', 'k3']
*args,要獲取的key,如:k1,k2,k3
如:

print(r.hget("hash2", "k2")) # 單個取出"hash2"的key-k2對應的value print(r.hmget("hash2", "k2", "k3")) # 批量取出"hash2"的key-k2 k3對應的value --方式1 print(r.hmget("hash2", ["k2", "k3"])) # 批量取出"hash2"的key-k2 k3對應的value --方式2

3.取出所有的鍵值對
hgetall(name)
獲取name對應hash的所有鍵值

print(r.hgetall("hash1"))

4.得到所有鍵值對的格式 hash長度
hlen(name)
獲取name對應的hash中鍵值對的個數

print(r.hlen("hash1"))

5.得到所有的keys(類似字典的取所有keys)
hkeys(name)
獲取name對應的hash中所有的key的值

print(r.hkeys("hash1"))

6.得到所有的value(類似字典的取所有value)
hvals(name)
獲取name對應的hash中所有的value的值

print(r.hvals("hash1"))

7.判斷成員是否存在(類似字典的in)
hexists(name, key)
檢查name對應的hash是否存在當前傳入的key

print(r.hexists("hash1", "k4")) # False 不存在 print(r.hexists("hash1", "k1")) # True 存在

8.刪除鍵值對
hdel(name,*keys)
將name對應的hash中指定key的鍵值對刪除

print(r.hgetall("hash1")) r.hset("hash1", "k2", "v222") # 修改已有的key k2 r.hset("hash1", "k11", "v1") # 新增鍵值對 k11 r.hdel("hash1", "k1") # 刪除一個鍵值對 print(r.hgetall("hash1"))

9.自增自減整數(將key對應的value--整數 自增1或者2,或者別的整數 負數就是自減)
hincrby(name, key, amount=1)
自增name對應的hash中的指定key的值,不存在則創建key=amount
參數:
name,redis中的name
key, hash對應的key
amount,自增數(整數)

r.hset("hash1", "k3", 123) r.hincrby("hash1", "k3", amount=-1) print(r.hgetall("hash1")) r.hincrby("hash1", "k4", amount=1) # 不存在的話,value默認就是1 print(r.hgetall("hash1"))

10.自增自減浮點數(將key對應的value--浮點數 自增1.0或者2.0,或者別的浮點數 負數就是自減)
hincrbyfloat(name, key, amount=1.0)
自增name對應的hash中的指定key的值,不存在則創建key=amount
參數:
name,redis中的name
key, hash對應的key
amount,自增數(浮點數)
自增name對應的hash中的指定key的值,不存在則創建key=amount

r.hset("hash1", "k5", "1.0") r.hincrbyfloat("hash1", "k5", amount=-1.0) # 已經存在,遞減-1.0 print(r.hgetall("hash1")) r.hincrbyfloat("hash1", "k6", amount=-1.0) # 不存在,value初始值是-1.0 每次遞減1.0 print(r.hgetall("hash1"))

11.取值查看--分片讀取
hscan(name, cursor=0, match=None, count=None)
增量式迭代獲取,對于數據大的數據非常有用,hscan可以實現分片的獲取數據,并非一次性將數據全部獲取完,從而放置內存被撐爆
參數:
name,redis的name
cursor,游標(基于游標分批取獲取數據)
match,匹配指定key,默認None 表示所有的key
count,每次分片最少獲取個數,默認None表示采用Redis的默認分片個數
如:
第一次:cursor1, data1 = r.hscan('xx', cursor=0, match=None, count=None)
第二次:cursor2, data1 = r.hscan('xx', cursor=cursor1, match=None, count=None)
...
直到返回值cursor的值為0時,表示數據已經通過分片獲取完畢

print(r.hscan("hash1"))

12.hscan_iter(name, match=None, count=None)
利用yield封裝hscan創建生成器,實現分批去redis中獲取數據
參數:
match,匹配指定key,默認None 表示所有的key
count,每次分片最少獲取個數,默認None表示采用Redis的默認分片個數
如:

for item in r.hscan_iter('hash1'):print(item) print(r.hscan_iter("hash1")) # 生成器內存地址
5、redis基本命令 list

1.增加(類似于list的append,只是這里是從左邊新增加)--沒有就新建
lpush(name,values)
在name對應的list中添加元素,每個新的元素都添加到列表的最左邊
如:

import redis import timepool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True) r = redis.Redis(connection_pool=pool) r.lpush("list1", 11, 22, 33) print(r.lrange('list1', 0, -1))

保存順序為: 33,22,11

擴展:

r.rpush("list2", 11, 22, 33) # 表示從右向左操作 print(r.llen("list2")) # 列表長度 print(r.lrange("list2", 0, 3)) # 切片取出值,范圍是索引號0-3

2.增加(從右邊增加)--沒有就新建

r.rpush("list2", 44, 55, 66) # 在列表的右邊,依次添加44,55,66 print(r.llen("list2")) # 列表長度 print(r.lrange("list2", 0, -1)) # 切片取出值,范圍是索引號0到-1(最后一個元素)

3.往已經有的name的列表的左邊添加元素,沒有的話無法創建
lpushx(name,value)
在name對應的list中添加元素,只有name已經存在時,值添加到列表的最左邊
更多:

r.lpushx("list10", 10) # 這里list10不存在 print(r.llen("list10")) # 0 print(r.lrange("list10", 0, -1)) # [] r.lpushx("list2", 77) # 這里"list2"之前已經存在,往列表最左邊添加一個元素,一次只能添加一個 print(r.llen("list2")) # 列表長度 print(r.lrange("list2", 0, -1)) # 切片取出值,范圍是索引號0到-1(最后一個元素

4.往已經有的name的列表的右邊添加元素,沒有的話無法創建

r.rpushx("list2", 99) # 這里"foo_list1"之前已經存在,往列表最右邊添加一個元素,一次只能添加一個 print(r.llen("list2")) # 列表長度 print(r.lrange("list2", 0, -1)) # 切片取出值,范圍是索引號0到-1(最后一個元素)

5.新增(固定索引號位置插入元素)
linsert(name, where, refvalue, value))
在name對應的列表的某一個值前或后插入一個新值
參數:
name,redis的name
where,BEFORE或AFTER
refvalue,標桿值,即:在它前后插入數據
value,要插入的數據

r.linsert("list2", "before", "11", "00") # 往列表中左邊第一個出現的元素"11"前插入元素"00" print(r.lrange("list2", 0, -1)) # 切片取出值,范圍是索引號0-最后一個元素

6.修改(指定索引號進行修改)
r.lset(name, index, value)
對name對應的list中的某一個索引位置重新賦值
參數:
name,redis的name
index,list的索引位置
value,要設置的值

r.lset("list2", 0, -11) # 把索引號是0的元素修改成-11 print(r.lrange("list2", 0, -1))

7.刪除(指定值進行刪除)
r.lrem(name, value, num)
在name對應的list中刪除指定的值
參數:
name,redis的name
value,要刪除的值
num, num=0,刪除列表中所有的指定值;
num=2,從前到后,刪除2個; num=1,從前到后,刪除左邊第1個
num=-2,從后向前,刪除2個

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))

8.刪除并返回
lpop(name)
在name對應的列表的左側獲取第一個元素并在列表中移除,返回值則是第一個元素
更多:
rpop(name) 表示從右向左操作

r.lpop("list2") # 刪除列表最左邊的元素,并且返回刪除的元素 print(r.lrange("list2", 0, -1)) r.rpop("list2") # 刪除列表最右邊的元素,并且返回刪除的元素 print(r.lrange("list2", 0, -1))

9.刪除索引之外的值
ltrim(name, start, end)
在name對應的列表中移除沒有在start-end索引之間的值
參數:
name,redis的name
start,索引的起始位置
end,索引結束位置

r.ltrim("list2", 0, 2) # 刪除索引號是0-2之外的元素,值保留索引號是0-2的元素 print(r.lrange("list2", 0, -1))

10.取值(根據索引號取值)
lindex(name, index)
在name對應的列表中根據索引獲取列表元素

print(r.lindex("list2", 0)) # 取出索引號是0的值

11.移動 元素從一個列表移動到另外一個列表
rpoplpush(src, dst)
從一個列表取出最右邊的元素,同時將其添加至另一個列表的最左邊
參數:
src,要取數據的列表的name
dst,要添加數據的列表的name

r.rpoplpush("list1", "list2") print(r.lrange("list2", 0, -1))

12.移動 元素從一個列表移動到另外一個列表 可以設置超時
brpoplpush(src, dst, timeout=0)
從一個列表的右側移除一個元素并將其添加到另一個列表的左側
參數:
src,取出并要移除元素的列表對應的name
dst,要插入元素的列表對應的name
timeout,當src對應的列表中沒有數據時,阻塞等待其有數據的超時時間(秒),0 表示永遠阻塞

r.brpoplpush("list1", "list2", timeout=2) print(r.lrange("list2", 0, -1))

13.一次移除多個列表
blpop(keys, timeout)
將多個列表排列,按照從左到右去pop對應列表的元素
參數:
keys,redis的name的集合
timeout,超時時間,當元素所有列表的元素獲取完之后,阻塞等待列表內有數據的時間(秒), 0 表示永遠阻塞
更多:
r.brpop(keys, timeout) 同blpop,將多個列表排列,按照從右像左去移除各個列表內的元素

r.lpush("list10", 3, 4, 5) r.lpush("list11", 3, 4, 5) while True: r.blpop(["list10", "list11"], timeout=2) print(r.lrange("list10", 0, -1), r.lrange("list11", 0, -1))

14.自定義增量迭代
由于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)
    6、redis基本命令 set

    1.新增
    sadd(name,values)
    name對應的集合中添加元素

    r.sadd("set1", 33, 44, 55, 66) # 往集合中添加元素 print(r.scard("set1")) # 集合的長度是4 print(r.smembers("set1")) # 獲取集合中所有的成員

    2.獲取元素個數 類似于len
    scard(name)
    獲取name對應的集合中元素個數

    print(r.scard("set1")) # 集合的長度是4

    3.獲取集合中所有的成員
    smembers(name)
    獲取name對應的集合的所有成員

    print(r.smembers("set1")) # 獲取集合中所有的成員

    獲取集合中所有的成員--元組形式
    sscan(name, cursor=0, match=None, count=None)

    print(r.sscan("set1"))

    獲取集合中所有的成員--迭代器的方式
    sscan_iter(name, match=None, count=None)
    同字符串的操作,用于增量迭代分批獲取元素,避免內存消耗太大

    for i in r.sscan_iter("set1"):print(i)

    4.差集
    sdiff(keys, *args)
    在第一個name對應的集合中且不在其他name對應的集合的元素集合

    r.sadd("set2", 11, 22, 33) print(r.smembers("set1")) # 獲取集合中所有的成員 print(r.smembers("set2")) print(r.sdiff("set1", "set2")) # 在集合set1但是不在集合set2中 print(r.sdiff("set2", "set1")) # 在集合set2但是不在集合set1中

    5.差集--差集存在一個新的集合中
    sdiffstore(dest, keys, *args)
    獲取第一個name對應的集合中且不在其他name對應的集合,再將其新加入到dest對應的集合中

    r.sdiffstore("set3", "set1", "set2") # 在集合set1但是不在集合set2中 print(r.smembers("set3")) # 獲取集合3中所有的成員

    6.交集
    sinter(keys, *args)
    獲取多一個name對應集合的交集

    print(r.sinter("set1", "set2")) # 取2個集合的交集

    7.交集--交集存在一個新的集合中
    sinterstore(dest, keys, *args)
    獲取多一個name對應集合的并集,再將其加入到dest對應的集合中

    print(r.sinterstore("set3", "set1", "set2")) # 取2個集合的交集 print(r.smembers("set3"))

    并集
    sunion(keys, *args)
    獲取多個name對應的集合的并集

    print(r.sunion("set1", "set2")) # 取2個集合的并集

    并集--并集存在一個新的集合
    sunionstore(dest,keys, *args)
    獲取多一個name對應的集合的并集,并將結果保存到dest對應的集合中

    print(r.sunionstore("set3", "set1", "set2")) # 取2個集合的并集 print(r.smembers("set3"))

    8.判斷是否是集合的成員 類似in
    sismember(name, value)
    檢查value是否是name對應的集合的成員,結果為True和False

    print(r.sismember("set1", 33)) # 33是集合的成員 print(r.sismember("set1", 23)) # 23不是集合的成員

    9.移動
    smove(src, dst, value)
    將某個成員從一個集合中移動到另外一個集合

    r.smove("set1", "set2", 44) print(r.smembers("set1")) print(r.smembers("set2"))

    10.刪除--隨機刪除并且返回被刪除值
    spop(name)
    從集合移除一個成員,并將其返回,說明一下,集合是無序的,所有是隨機刪除的

    print(r.spop("set2")) # 這個刪除的值是隨機刪除的,集合是無序的 print(r.smembers("set2"))

    11.刪除--指定值刪除
    srem(name, values)
    在name對應的集合中刪除某些值

    print(r.srem("set2", 11)) # 從集合中刪除指定值 11 print(r.smembers("set2"))
    7、redis基本命令 有序set

    Set操作,Set集合就是不允許重復的列表,本身是無序的
    有序集合,在集合的基礎上,為每元素排序;元素的排序需要根據另外一個值來進行比較,
    所以,對于有序集合,每一個元素有兩個值,即:值和分數,分數專門用來做排序。

    1.新增
    zadd(name, *args, **kwargs)
    在name對應的有序集合中添加元素
    如:

    import redis import timepool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True) r = redis.Redis(connection_pool=pool) r.zadd("zset1", n1=11, n2=22) r.zadd("zset2", 'm1', 22, 'm2', 44) print(r.zcard("zset1")) # 集合長度 print(r.zcard("zset2")) # 集合長度 print(r.zrange("zset1", 0, -1)) # 獲取有序集合中所有元素 print(r.zrange("zset2", 0, -1, withscores=True)) # 獲取有序集合中所有元素和分數

    2.獲取有序集合元素個數 類似于len
    zcard(name)
    獲取name對應的有序集合元素的數量

    print(r.zcard("zset1")) # 集合長度

    3.獲取有序集合的所有元素
    r.zrange( name, start, end, desc=False, withscores=False, score_cast_func=float)
    按照索引范圍獲取name對應的有序集合的元素
    參數:
    name,redis的name
    start,有序集合索引起始位置(非分數)
    end,有序集合索引結束位置(非分數)
    desc,排序規則,默認按照分數從小到大排序
    withscores,是否獲取元素的分數,默認只獲取元素的值
    score_cast_func,對分數進行數據轉換的函數

    3-1 從大到小排序(同zrange,集合是從大到小排序的)
    zrevrange(name, start, end, withscores=False, score_cast_func=float)

    print(r.zrevrange("zset1", 0, -1)) # 只獲取元素,不顯示分數 print(r.zrevrange("zset1", 0, -1, withscores=True)) # 獲取有序集合中所有元素和分數,分數倒序

    3-2 按照分數范圍獲取name對應的有序集合的元素
    zrangebyscore(name, min, max, start=None, num=None, withscores=False, score_cast_func=float)

    for i in range(1, 30): element = 'n' + str(i) r.zadd("zset3", element, i) print(r.zrangebyscore("zset3", 15, 25)) # # 在分數是15-25之間,取出符合條件的元素 print(r.zrangebyscore("zset3", 12, 22, withscores=True)) # 在分數是12-22之間,取出符合條件的元素(帶分數)

    3-3 按照分數范圍獲取有序集合的元素并排序(默認從大到小排序)
    zrevrangebyscore(name, max, min, start=None, num=None, withscores=False, score_cast_func=float)

    print(r.zrevrangebyscore("zset3", 22, 11, withscores=True)) # 在分數是22-11之間,取出符合條件的元素 按照分數倒序

    3-4 獲取所有元素--默認按照分數順序排序
    zscan(name, cursor=0, match=None, count=None, score_cast_func=float)

    print(r.zscan("zset3"))

    3-5 獲取所有元素--迭代器
    zscan_iter(name, match=None, count=None,score_cast_func=float)

    for i in r.zscan_iter("zset3"): # 遍歷迭代器print(i)

    4.zcount(name, min, max)
    獲取name對應的有序集合中分數 在 [min,max] 之間的個數

    print(r.zrange("zset3", 0, -1, withscores=True)) print(r.zcount("zset3", 11, 22))

    5.自增
    zincrby(name, value, amount)
    自增name對應的有序集合的 name 對應的分數

    r.zincrby("zset3", "n2", amount=2) # 每次將n2的分數自增2 print(r.zrange("zset3", 0, -1, withscores=True))

    6.獲取值的索引號
    zrank(name, value)
    獲取某個值在 name對應的有序集合中的索引(從 0 開始)
    更多:
    zrevrank(name, value),從大到小排序

    print(r.zrank("zset3", "n1")) # n1的索引號是0 這里按照分數順序(從小到大) print(r.zrank("zset3", "n6")) # n6的索引號是1 print(r.zrevrank("zset3", "n1")) # n1的索引號是29 這里安照分數倒序(從大到小)

    7.刪除--指定值刪除
    zrem(name, values)
    刪除name對應的有序集合中值是values的成員

    r.zrem("zset3", "n3") # 刪除有序集合中的元素n3 刪除單個 print(r.zrange("zset3", 0, -1))

    8.刪除--根據排行范圍刪除,按照索引號來刪除
    zremrangebyrank(name, min, max)
    根據排行范圍刪除

    r.zremrangebyrank("zset3", 0, 1) # 刪除有序集合中的索引號是0, 1的元素 print(r.zrange("zset3", 0, -1))

    9.刪除--根據分數范圍刪除
    zremrangebyscore(name, min, max)
    根據分數范圍刪除

    r.zremrangebyscore("zset3", 11, 22) # 刪除有序集合中的分數是11-22的元素 print(r.zrange("zset3", 0, -1))

    10.獲取值對應的分數
    zscore(name, value)
    獲取name對應有序集合中 value 對應的分數

    print(r.zscore("zset3", "n27")) # 獲取元素n27對應的分數27
    8、其他常用操作

    1.刪除
    delete(*names)
    根據刪除redis中的任意數據類型(string、hash、list、set、有序set)

    r.delete("gender") # 刪除key為gender的鍵值對

    2.檢查名字是否存在
    exists(name)
    檢測redis的name是否存在,存在就是True,False 不存在

    print(r.exists("zset1"))

    3.模糊匹配
    keys(pattern='')
    根據模型獲取redis的name
    更多:
    KEYS * 匹配數據庫中所有 key 。
    KEYS h?llo 匹配 hello , hallo 和 hxllo 等。
    KEYS hllo 匹配 hllo 和 heeeeello 等。
    KEYS h[ae]llo 匹配 hello 和 hallo ,但不匹配 hillo

    print(r.keys("foo*"))

    4.設置超時時間
    expire(name ,time)
    為某個redis的某個name設置超時時間

    r.lpush("list5", 11, 22) r.expire("list5", time=3) print(r.lrange("list5", 0, -1)) time.sleep(3) print(r.lrange("list5", 0, -1))

    5.重命名
    rename(src, dst)
    對redis的name重命名

    r.lpush("list5", 11, 22) r.rename("list5", "list5-1")

    6.隨機獲取name
    randomkey()
    隨機獲取一個redis的name(不刪除)

    print(r.randomkey())

    7.獲取類型
    type(name)
    獲取name對應值的類型

    print(r.type("set1")) print(r.type("hash2"))

    8.查看所有元素
    scan(cursor=0, match=None, count=None)

    print(r.hscan("hash2")) print(r.sscan("set3")) print(r.zscan("zset2")) print(r.getrange("foo1", 0, -1)) print(r.lrange("list2", 0, -1)) print(r.smembers("set3")) print(r.zrange("zset3", 0, -1)) print(r.hgetall("hash1"))

    9.查看所有元素--迭代器
    scan_iter(match=None, count=None)

    for i in r.hscan_iter("hash1"):print(i)for i in r.sscan_iter("set3"): print(i) for i in r.zscan_iter("zset3"): print(i)

    other 方法

    print(r.get('name')) # 查詢key為name的值 r.delete("gender") # 刪除key為gender的鍵值對 print(r.keys()) # 查詢所有的Key print(r.dbsize()) # 當前redis包含多少條數據 r.save() # 執行"檢查點"操作,將數據寫回磁盤。保存時阻塞 # r.flushdb() # 清空r中的所有數據

    管道(pipeline)
    redis默認在執行每次請求都會創建(連接池申請連接)和斷開(歸還連接池)一次連接操作,
    如果想要在一次請求中指定多個命令,則可以使用pipline實現一次請求指定多個命令,并且默認情況下一次pipline 是原子性操作。

    管道(pipeline)是redis在提供單個請求中緩沖多條服務器命令的基類的子類。它通過減少服務器-客戶端之間反復的TCP數據庫包,從而大大提高了執行批量命令的功能。

    import redis import timepool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True) r = redis.Redis(connection_pool=pool) # pipe = r.pipeline(transaction=False) # 默認的情況下,管道里執行的命令可以保證執行的原子性,執行pipe = r.pipeline(transaction=False)可以禁用這一特性。 # pipe = r.pipeline(transaction=True) pipe = r.pipeline() # 創建一個管道 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() print(r.get("name")) print(r.get("role")) print(r.get("num"))

    作者:君惜丶
    鏈接:https://www.jianshu.com/p/2639549bedc8
    來源:簡書
    簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權并注明出處。

    轉載于:https://www.cnblogs.com/sundahua/p/10247814.html

    總結

    以上是生活随笔為你收集整理的使用python来操作redis用法详解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    女人久久久久 | 日韩午夜电影网 | 四虎影视8848dvd | 精品日韩在线 | 在线国产99 | 天天摸天天舔 | 丝袜美腿在线播放 | 色多多视频在线 | 91精品在线看 | 国产小视频在线看 | 欧美日韩精品在线一区二区 | 91麻豆免费视频 | 久久久久国产一区二区三区四区 | 午夜精品一区二区三区在线观看 | 免费黄色a网站 | 久久久久久高潮国产精品视 | 久久久久久久久久亚洲精品 | 天天干,天天射,天天操,天天摸 | 亚洲久草视频 | 午夜av免费观看 | 午夜美女福利 | 玖玖在线看 | 中文字幕成人网 | 亚洲 综合 专区 | 精品一二三四视频 | 国内久久精品 | 日韩精品一区二区三区电影 | 久久久久夜色 | 三日本三级少妇三级99 | 亚洲黄色激情小说 | 97国产在线 | 激情偷乱人伦小说视频在线观看 | 激情久久久久久久久久久久久久久久 | 一区二区视频在线播放 | 国产精品激情 | 99免费在线 | av中文字幕在线免费观看 | 91免费观看视频网站 | 国产日韩精品在线 | 日本爱爱免费 | 久久999精品 | 国产精品亚洲视频 | 黄色一区三区 | 摸bbb搡bbb搡bbbb| 国产高清在线观看 | 免费看一及片 | 欧美亚洲专区 | 2021av在线 | 97超碰色偷偷 | 99精品国产在热久久下载 | 久久免费在线观看视频 | av一区在线播放 | 九九热在线播放 | 亚洲一区二区高潮无套美女 | 久久91久久久久麻豆精品 | 成全在线视频免费观看 | 97视频在线观看播放 | 国产精品久久久久久久久久久久久久 | 久久精品3 | 久久艹在线观看 | 免费看的黄网站 | 久久久免费精品国产一区二区 | 国产精品美女久久久久久网站 | 亚洲综合五月天 | 久久久久成 | 在线成人高清电影 | 69久久夜色精品国产69 | 狠狠色伊人亚洲综合网站色 | www久久com| 国产一级片在线播放 | 黄色三级av | 亚洲午夜久久久久久久久久久 | 国产精品高清免费在线观看 | 一区二区在线影院 | 中文字幕91在线 | 国产精品一区二区三区在线看 | 91在线日韩| 天堂av网站| 免费欧美高清视频 | 97热在线观看 | 综合婷婷丁香 | 国产成人久 | 日本黄色大片免费 | 丁香激情五月婷婷 | 久久艹免费 | 911精品视频 | 色中色资源站 | 婷婷综合亚洲 | 黄色av电影网 | 久久在线免费观看 | 国产精品自产拍在线观看 | 日韩丝袜视频 | 一区中文字幕 | 欧美一级激情 | 91麻豆文化传媒在线观看 | 天天干天天干天天操 | 国产高清av | 欧美一性一交一乱 | 欧美一区中文字幕 | 91精品国产99久久久久久红楼 | 久久免费福利视频 | 精久久久久 | 天堂va欧美va亚洲va老司机 | 亚洲日韩欧美视频 | 超碰免费观看 | 国产日韩欧美在线影视 | 特级黄色片免费看 | 天天干天天爽 | 四虎影视国产精品免费久久 | 国产三级精品在线 | 久久久国产一区二区 | 久久高清免费观看 | 成人在线播放免费观看 | 在线免费观看欧美日韩 | 欧美精品乱码99久久影院 | 亚洲天堂网站视频 | 久久另类小说 | 久久国产影院 | 91精品专区 | 91精品国产入口 | 99久久精品免费看国产一区二区三区 | 久久人视频 | 免费色婷婷 | 天天射日 | 亚洲国产日韩一区 | 婷婷综合在线 | 国产精品99精品久久免费 | 日韩在线字幕 | 丁香午夜婷婷 | 中文字幕在 | 国产一级二级三级在线观看 | 色综合久久久久网 | 亚洲精品456在线播放乱码 | 中文字幕一二 | 免费久久视频 | 日韩激情视频在线观看 | 一区二区三区免费在线观看视频 | 综合网中文字幕 | 黄色网www | 成人国产精品久久久春色 | 亚洲精品国产精品乱码不99热 | 久久国产精品电影 | 蜜桃av综合网 | 久久久精品亚洲 | 国产二级视频 | 伊人五月 | 亚洲欧美一区二区三区孕妇写真 | 黄色小说视频网站 | 碰碰影院 | 日韩一二三区不卡 | 在线观看视频国产 | 国产精品久久网站 | 久久精品精品 | av再线观看 | 日韩免费在线看 | 91最新地址永久入口 | 国产一区二区久久久久 | 综合网婷婷 | 狠狠色丁香婷婷综合视频 | 日韩美女免费线视频 | 久久久久亚洲最大xxxx | 伊人看片 | 中文字幕免费成人 | 精品亚洲免费 | 欧美久久久久久 | 黄色影院在线免费观看 | 亚洲国产欧美在线看片xxoo | 久久精品中文字幕少妇 | 在线观看久 | 欧美三级高清 | 啪啪免费视频网站 | 亚洲免费av电影 | 精品亚洲一区二区 | 欧美日韩调教 | 96国产精品视频 | 97品白浆高清久久久久久 | 天天射天天舔天天干 | 91在线视频免费播放 | 在线视频福利 | 成人中文字幕+乱码+中文字幕 | 午夜av在线电影 | 免费av网站观看 | 深爱五月激情五月 | 亚洲精品黄色 | 久久经典视频 | 色综合www | 夜夜躁狠狠躁日日躁 | 天天插天天射 | 91九色网站 | 国产 亚洲 欧美 在线 | 国产网红在线 | 国产在线视频导航 | 成人午夜性影院 | 麻豆成人在线观看 | 国产成人61精品免费看片 | 日韩高清网站 | 337p欧美 | 国产一区二区中文字幕 | 国产激情免费 | 欧美精品午夜 | 91精品黄色 | 天天色天天操综合网 | 99久久影院| 国产精品白虎 | 欧美日韩视频在线 | 国产福利av在线 | 国产小视频网站 | 国产精品嫩草影院99网站 | 米奇狠狠狠888 | 草久久精品 | 亚洲人久久久 | 黄色在线观看www | 麻豆传媒视频在线 | 国产黄色网 | 999国内精品永久免费视频 | 午夜精品久久久久久久99 | 久久精品亚洲一区二区三区观看模式 | 人人看人人草 | 亚洲乱亚洲乱亚洲 | 国产福利专区 | 最近中文字幕完整高清 | 国产护士在线 | 韩国av电影网 | 丁香婷婷激情 | 欧美一区二区在线免费看 | 91免费高清观看 | 免费观看成人网 | 国产精品久久久一区二区三区网站 | 国产美女视频免费观看的网站 | 久久草精品 | 婷婷久久网 | 嫩草av影院 | 日韩中文字幕免费看 | 人人爽人人爽人人爽人人爽 | 一区二区三区高清在线 | 国产精品福利在线观看 | 免费在线观看国产精品 | 国产精彩在线视频 | 欧美日韩亚洲在线观看 | 欧美色黄 | 香蕉国产91 | 中文字幕一区二区三区四区 | 激情综合婷婷 | 中文字幕黄色av | 免费成人av在线看 | 一区二区三区免费在线观看视频 | 久久激情久久 | 久久久国产视频 | 黄色软件在线观看 | 夜夜爽天天爽 | 波多野结衣网址 | 久久久久久久久久久精 | 亚洲国产精品成人女人久久 | 久久国产精品久久w女人spa | 在线中文视频 | 欧美在线a视频 | 九九免费在线观看视频 | 黄色av电影在线 | 国产999精品久久久影片官网 | 99爱在线 | 国产色妞影院wwwxxx | 日韩精品视频免费在线观看 | 99精品免费视频 | 亚洲一区二区视频在线 | 香蕉国产91 | 一区二区三区中文字幕在线 | www.夜夜骑.com | 国产三级精品在线 | 热久在线| 中文字幕乱码亚洲精品一区 | 啪啪免费试看 | 波多野结衣视频一区二区 | 色www免费视频 | 一级成人网 | 美女视频黄,久久 | 国产99re | 亚洲精品白浆高清久久久久久 | 日韩精品久久久久久久电影99爱 | 国产国产人免费人成免费视频 | 人人爽影院 | 狠狠色丁香婷婷综合欧美 | 国语麻豆 | 97视频在线免费播放 | 久久综合毛片 | 中文视频在线看 | 国产精品久久99 | 亚洲成av人片在线观看香蕉 | 久久免费观看视频 | 亚洲精品456在线播放第一页 | 日本精品视频免费观看 | 九色免费视频 | 在线成人性视频 | 日日操网 | 精品久久久久久亚洲综合网站 | 免费看黄电影 | 国产精品久久久久久久99 | 午夜色站| 999久久国产精品免费观看网站 | 婷婷激情欧美 | 在线视频观看成人 | 天天操夜夜曰 | 色网站免费在线观看 | 超碰人人在线观看 | 97视频中文字幕 | 久久精品看 | 国产精品久久久777 成人手机在线视频 | 久久久久国产成人精品亚洲午夜 | 玖玖玖精品 | 五月天色丁香 | 久久高清国产视频 | www最近高清中文国语在线观看 | 国产一区二区三区午夜 | 99精品久久99久久久久 | 成人免费观看av | 在线播放国产一区二区三区 | www免费在线观看 | 超碰国产97 | 草莓视频在线观看免费观看 | 久久久精品在线观看 | 免费福利小视频 | 国产电影黄色av | 免费a一级| 99久热在线精品视频观看 | 深夜国产福利 | 国产视频中文字幕在线观看 | 最近更新的中文字幕 | 国产中文字幕在线 | 欧美极品一区二区三区 | 免费国产黄线在线观看视频 | 免费av在线| 黄网站色成年免费观看 | 亚洲视频免费视频 | 福利网在线 | 久久99久久99精品免观看粉嫩 | 天天操夜夜操夜夜操 | 麻豆免费在线视频 | 五月天国产 | www.亚洲精品在线 | 久热av在线| 免费在线观看成人小视频 | 丁香影院在线 | 中文字幕一区二区三区四区在线视频 | 黄色a在线 | 成人av动漫在线 | 色播六月天 | 中午字幕在线观看 | 夜色成人网 | 四虎永久国产精品 | 天天操天天添 | 免费成人av在线 | 国产视频一区二区在线播放 | 91热爆视频 | 日韩亚洲国产中文字幕 | 91在线日韩| 成人av电影免费观看 | 久草a在线| 97色免费视频 | 91网站观看| 国产精品免费久久久久影院仙踪林 | 日韩欧美网址 | www.看片网站 | 麻豆免费在线视频 | www.成人精品 | 国产高清av免费在线观看 | 久久免费视频2 | 免费看黄网站在线 | 成年人视频在线免费观看 | 在线免费观看视频a | 99久久国产免费,99久久国产免费大片 | 日韩理论在线视频 | 亚洲综合小说电影qvod | 欧美资源| av千婊在线免费观看 | 日本韩国在线不卡 | 最新色站 | 国产精品久久久久影视 | jizz18欧美18| 国产区高清在线 | 天天操夜夜操国产精品 | 成 人 黄 色 免费播放 | 免费成视频 | 久久久一本精品99久久精品 | 999视频网| 日本最新一区二区三区 | 久久综合九色综合欧美狠狠 | 天天射天天色天天干 | 中文字幕欧美日韩va免费视频 | 婷婷久久一区二区三区 | 91资源在线 | 91亚洲精品乱码久久久久久蜜桃 | 色婷婷天天干 | 国产在线精品一区二区不卡了 | 国产视频在线一区二区 | 草久草久 | 毛片精品免费在线观看 | 亚洲精品影视在线观看 | 亚洲黄色高清 | 婷婷丁香色 | 国产精品成人在线 | 国产 日韩 欧美 自拍 | 成人性生交大片免费看中文网站 | 日韩激情中文字幕 | 国产高清第一页 | 国内精品久久久久影院优 | 日韩大片在线观看 | 狠狠综合久久av | 色婷婷综合激情 | 色永久免费视频 | 精品亚洲成a人在线观看 | 黄色小网站在线观看 | 草莓视频在线观看免费观看 | 黄色亚洲精品 | 国产中文视频 | 精品久久久久久亚洲综合网站 | 亚洲久草在线视频 | 成人网444ppp| 国产高清日韩欧美 | 久久久天堂 | 国产看片免费 | 97超碰人人澡人人爱学生 | 婷色在线 | 国产美女网 | 夜夜爽88888免费视频4848 | 国产色视频一区二区三区qq号 | 国产视频久久久 | 色九九影院 | 91桃色免费视频 | 亚洲综合欧美激情 | 亚州性色 | 9999国产| 国产精品一区二区三区在线播放 | 91精品国产综合久久福利 | 视频一区在线免费观看 | www免费视频com━ | 日韩欧美一区二区三区视频 | 欧美日韩亚洲在线观看 | 国产传媒一区在线 | 一区二区三区高清在线 | 欧美视频xxx | 亚洲91av | 天天做夜夜做 | 亚洲第一区在线播放 | 成人网中文字幕 | 奇米影视在线99精品 | 四虎在线观看网址 | 中文字幕在线成人 | 91高清免费| 在线免费观看羞羞视频 | 视频一区二区在线观看 | 久草在线观看资源 | 日本三级全黄少妇三2023 | 亚州欧美精品 | 深爱婷婷久久综合 | 五月婷婷丁香色 | 91豆麻精品91久久久久久 | 丁香导航 | 久久免费国产电影 | 婷婷激情小说网 | 久草在线免费色站 | 久草视频在线新免费 | 中文字幕一区二区三区久久 | 久久国产影院 | 久久国产成人午夜av影院宅 | 97国产大学生情侣酒店的特点 | 国产成人精品在线观看 | 久久综合狠狠综合久久狠狠色综合 | 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 久久久麻豆视频 | 亚洲免费成人av电影 | 精品久久久久久综合日本 | a在线免费观看视频 | 欧美大片大全 | 人人草天天草 | 亚洲精品tv久久久久久久久久 | 国产黄色精品在线 | 精品国产一区二区三区男人吃奶 | 欧洲激情综合 | 一级性视频 | 国产一线在线 | 亚洲精品视频在线观看免费视频 | 91chinesexxx | 久久九精品 | 成年人免费看 | 1024手机基地在线观看 | 日韩午夜在线观看 | 911久久香蕉国产线看观看 | 国产精品精品国产色婷婷 | 99久久网站 | 蜜臀一区二区三区精品免费视频 | 激情文学丁香 | 中文字幕观看视频 | 欧美日韩xx | 久久五月精品 | 五月天婷婷免费视频 | 国产精品久久久av | 国产在线久草 | 久久天堂影院 | 四虎影视成人永久免费观看亚洲欧美 | 91| 国产成人99av超碰超爽 | 精品视频免费久久久看 | 精品国产伦一区二区三区观看方式 | 91精品视频在线看 | 国产精品露脸在线 | 狠狠狠干 | 亚洲精品视频免费 | 91福利视频免费观看 | 欧美婷婷色 | 九九在线国产视频 | 97超碰在线久草超碰在线观看 | 午夜久久电影网 | 久久精品久久精品久久 | 国产视频在线观看一区 | 98精品国产自产在线观看 | 操操日日 | 成人免费亚洲 | 天天做天天射 | 欧美另类一二三四区 | 亚洲成人av在线电影 | 五月婷婷开心中文字幕 | 国产精品久久 | 国偷自产视频一区二区久 | 国产99久久九九精品免费 | 色综合人人 | 人人讲下载 | 久久久片| 亚洲成人资源在线观看 | 中文视频在线看 | 成人久久18免费 | 午夜电影一区 | 97色在线观看免费视频 | 国模视频一区二区 | 国产xx在线 | 91精品在线观看视频 | 中文字幕成人网 | av在线网站免费观看 | 人人超在线公开视频 | 日韩免费播放 | 伊人色**天天综合婷婷 | 欧美先锋影音 | 久久女教师 | 国产成人av电影在线观看 | 成人av电影在线观看 | 丝袜美女在线观看 | 色视频在线免费观看 | 69成人在线 | 欧美成人tv | 中国一 片免费观看 | 国产精品久久久久久久午夜 | 91桃色在线免费观看 | 国产在线观看免 | 久草干| 亚洲欧洲日韩 | 日韩精品在线看 | 综合成人在线 | 国产午夜精品av一区二区 | 欧美日韩免费在线观看视频 | 亚洲最快最全在线视频 | 欧美一级黄大片 | 中文在线字幕免 | 狠狠狠狠狠操 | 美女精品网站 | 久久精品婷婷 | 毛片一级免费一级 | 精品国模一区二区三区 | 国产91亚洲 | 国产做aⅴ在线视频播放 | 成人免费共享视频 | 亚洲精品在线观看不卡 | 手机成人av在线 | 亚洲综合视频在线播放 | 成人久久国产 | 中文字幕久久精品亚洲乱码 | 在线国产高清 | 在线看片一区 | 久久久免费看视频 | 日一日操一操 | 在线免费观看亚洲视频 | 亚洲视频在线看 | 天天操天天操天天 | 亚洲精品乱码久久久久久9色 | 91中文字幕在线播放 | av电影一区二区三区 | 国产精品久久久久久久久久久久午 | 国产精品五月天 | 国产福利91精品一区二区三区 | 狂野欧美激情性xxxx | 新版资源中文在线观看 | 中文不卡视频 | 天天伊人网| 丝袜美腿在线视频 | 国产91综合一区在线观看 | 麻豆免费在线视频 | 亚洲人成精品久久久久 | 九九爱免费视频在线观看 | 亚洲专区欧美专区 | 黄色免费网 | 婷婷激情小说网 | 久久伊人爱| 91精品天码美女少妇 | 国产色视频网站2 | 成人小视频在线免费观看 | 国产香蕉在线 | 国产福利电影网址 | 96av视频| 日本三级大片 | 99久免费精品视频在线观看 | 国内精品久久天天躁人人爽 | 啪啪av在线| av成人动漫| 中文字幕五区 | 中文字幕在线观看免费高清完整版 | 国产精品免费视频观看 | 天天操天天操天天操天天操天天操天天操 | 国产一在线精品一区在线观看 | www.在线观看视频 | 美女在线免费观看视频 | 亚洲午夜精品久久久久久久久 | 乱男乱女www7788 | 国内揄拍国产精品 | 亚洲综合色视频在线观看 | 亚洲精品福利视频 | 91免费视频黄 | 中文在线字幕免 | 在线观看91网站 | 国产麻豆传媒 | 久久一区二区三区超碰国产精品 | 日韩电影黄色 | 夜夜夜精品| 国产精品嫩草在线 | 中文字幕av专区 | 久久精彩 | www.精选视频.com | 久久综合久久综合这里只有精品 | 欧美日韩中文国产一区发布 | 国产精品美女免费视频 | 免费在线观看av的网站 | 91桃色在线观看视频 | 久久草视频 | 亚洲精品中文字幕在线观看 | 91av在线精品 | www欧美色 | 精品无人国产偷自产在线 | 久久免费视频这里只有精品 | 日韩高清免费在线观看 | 亚洲高清视频一区二区三区 | 欧美视频二区 | 日韩久久久久久 | 国产一级特黄毛片在线毛片 | 一区二区三区日韩视频在线观看 | 欧美精品久久久久久久亚洲调教 | 国产精品一区二区三区在线 | 亚洲无吗视频在线 | 91成人在线视频 | 国产国产人免费人成免费视频 | 狠狠干综合网 | 国产中文a | 国产精品9区 | 欧美另类高潮 | 四季av综合网站 | 波多野结衣电影一区 | av中文字幕免费在线观看 | 亚洲国产精品成人精品 | 日本精品久久久久久 | 久久dvd| 久草干| 久久免费电影 | 国产网红在线观看 | 欧美午夜理伦三级在线观看 | 国产精品久久精品 | 欧美日韩中文另类 | 中文字幕一区二区三区视频 | 国产一区二区三区四区在线 | 91精品国产高清 | 亚洲天堂精品 | 在线观看黄网站 | 97超碰人人澡 | av免费网站 | 天天插天天射 | 亚洲精品自拍视频在线观看 | 日批在线观看 | 亚洲成av片人久久久 | 激情视频一区 | 久久综合久久综合久久综合 | 欧美日韩精品在线视频 | 亚洲精品影视在线观看 | 欧美激情综合五月色丁香小说 | 亚欧日韩av | 一级做a爱片性色毛片www | 午夜少妇一区二区三区 | 亚洲精品久久久久中文字幕二区 | 丰满少妇在线观看资源站 | 视频一区二区在线观看 | 久久久在线视频 | 久久综合五月天婷婷伊人 | 91av在线看 | 亚洲一区久久久 | 国产系列在线观看 | 不卡的av| 日韩电影在线观看中文字幕 | 97电影在线 | 在线观看国产高清视频 | 国产一区二区三区在线 | 国产日本在线观看 | 成人福利在线播放 | 91日韩精品 | 亚洲国产精品久久久久婷婷884 | 色噜噜日韩精品一区二区三区视频 | 国产亚洲精品美女 | 国产精品久久久久久久久久免费 | 91看片在线免费观看 | 人人舔人人干 | 国产成人一区二区三区 | 国产精品久一 | 国产一级二级在线播放 | 成 人 黄 色视频免费播放 | 免费视频一级片 | 国产色道 | 欧美日韩中文字幕在线视频 | 久久精品精品电影网 | 性色av免费看 | 亚洲精品中文字幕视频 | 黄色亚洲| 狠狠干五月天 | 日韩亚洲国产中文字幕 | 成人试看120秒 | 欧美成年网站 | 午夜成人影视 | 久久精品资源 | 国产丝袜网站 | 国产黄色av影视 | 黄色小网站免费看 | a在线一区 | 久久久久久久久影院 | 久久久久久欧美二区电影网 | 国产专区免费 | 国产色妞影院wwwxxx | 四虎在线视频 | 中文在线免费看视频 | 久久久福利影院 | 欧美巨大荫蒂茸毛毛人妖 | 久久久久欠精品国产毛片国产毛生 | 国产精品久久久av久久久 | 国产在线传媒 | www视频免费在线观看 | 成人污视频在线观看 | 亚洲精品乱码白浆高清久久久久久 | 国产精品久久久久久久久久99 | 人人澡视频 | 亚洲精品97 | 亚洲精品国产精品99久久 | 久久成人资源 | 黄色免费观看视频 | 成年人视频在线免费播放 | 99久久999久久久精玫瑰 | 午夜黄网 | 在线观看岛国av | 久久综合久久八八 | 欧美精品网站 | 91免费的视频在线播放 | 超碰在线公开免费 | 成人午夜免费福利 | 国产 日韩 欧美 自拍 | 国产午夜在线 | 日韩在线视频播放 | 最近中文字幕免费大全 | 成人av中文字幕在线观看 | 国产精品理论视频 | 久久国产精品99久久久久久进口 | 狠狠色免费 | 国产精品一区二区三区在线播放 | 久久不卡av| 日韩系列 | a色网站| 国产97av | 成人黄色在线观看视频 | 国内精品久久久久久久影视麻豆 | 欧洲av不卡 | 国产男女无遮挡猛进猛出在线观看 | 91人人在线 | 成人 亚洲 欧美 | 精品亚洲一区二区 | 91福利视频一区 | 四虎国产免费 | 国产破处在线播放 | 在线观看免费色 | 99视频黄 | 免费福利在线视频 | 国产精品久久久久久一区二区三区 | 日韩69视频 | 91精品国产一区二区在线观看 | 中文字幕 国产 一区 | 天天射,天天干 | 久草视频视频在线播放 | 六月色丁香 | 国产福利一区二区三区在线观看 | 夜夜爱av| 国产综合福利在线 | 欧美淫aaa免费观看 日韩激情免费视频 | 欧美日韩国产一区二区三区在线观看 | 久久久成人精品 | 国产日韩在线观看一区 | 久久免费毛片 | 国产黄色片久久久 | 在线高清一区 | 夜夜躁狠狠躁日日躁视频黑人 | 中文字幕在线播放视频 | 久久婷婷五月综合色丁香 | 国产成人精品免高潮在线观看 | 欧美成人精品欧美一级乱黄 | 2019天天干夜夜操 | 亚洲草视频 | 97小视频| 天堂av免费在线 | 天堂视频中文在线 | 久久人人97超碰国产公开结果 | 国产一级视频 | 精品国产自在精品国产精野外直播 | 成年人黄色免费网站 | 久久精品国产99国产 | 国产精品久久在线观看 | 性色av免费在线观看 | 国产免费人人看 | 青草视频在线 | 激情五月视频 | 96av视频 | 在线岛国av| 成人黄色小说在线观看 | 国产在线播放一区 | 国产不卡精品 | 国产高清成人av | 日本xxxx.com | 欧美成人在线免费 | 亚洲欧美日韩国产一区二区 | 精品免费一区 | 狠狠躁日日躁狂躁夜夜躁av | 麻豆国产精品永久免费视频 | 天天夜夜亚洲 | 久久99亚洲精品久久久久 | 亚洲国产免费看 | 黄色软件在线观看 | 国产麻豆精品久久 | 亚洲一区av | 四虎精品成人免费网站 | 亚洲国产片色 | 久久怡红院 | 激情欧美xxxx | 在线欧美国产 | 国产一区二区三区免费在线观看 | 天天射天天做 | 久爱精品在线 | 日韩中文字幕免费在线观看 | 精品国产一区二区三区av性色 | 中文字幕在线看人 | 亚洲精品成人 | 国产一二区视频 | 九九九免费视频 | 亚洲精品小视频在线观看 | 四虎在线免费观看 | 黄色国产区 | 国产资源网 | 精品xxx | 又粗又长又大又爽又黄少妇毛片 | 国产剧情一区二区在线观看 | 91精选 | 中文字幕在线观看一区 | 夜夜夜夜操 | 在线免费性生活片 | 婷婷干五月 | 在线看小早川怜子av | 婷婷开心久久网 | 免费看黄在线看 | 久久九九网站 | 亚洲涩涩一区 | 91视频在线免费看 | 激情综合网在线观看 | 久久黄色成人 | 91视视频在线直接观看在线看网页在线看 | 黄色国产精品 | 亚欧日韩成人h片 | 成人午夜电影网站 | 99色| 日韩中文在线观看 | 久草精品资源 | 黄色电影网站在线观看 | 亚洲精品黄网站 | 欧美一级性视频 | 国产中文字幕在线播放 | 在线观看日本韩国电影 | 亚洲热久久 | 亚洲精品五月天 | 九九色网 | 精品免费99久久 | 91在线视频免费播放 | 精品久久九九 | 黄色三级网站 | 91精品老司机久久一区啪 | 色99之美女主播在线视频 | 国产精品无av码在线观看 | 日韩精品中文字幕一区二区 | 天天天综合网 | 最近中文国产在线视频 | 国产久视频 | 久久免费视频播放 | 久久国产精品免费看 | 黄色av网站在线免费观看 | 五月天最新网址 | 久久久精品 | 探花视频在线版播放免费观看 | 91网址在线| 欧美日韩高清国产 | 操操操干干干 | 日韩一级电影在线观看 | 日韩在线视频看看 | 国产啊v在线观看 | 日本不卡一区二区 | 最近免费观看的电影完整版 | 一区二区三区四区五区在线视频 | 一本一本久久a久久精品综合小说 | 成人免费网视频 | 国产精品久久久久久久久久久不卡 | 超碰在线公开 | 日本xxxx.com| 成人va天堂| 国产在线2020 | 欧美国产视频在线 | 天天色天天操天天爽 | 这里只有精品视频在线观看 | 99久久婷婷国产一区二区三区 | 日韩免费观看一区二区 | 91九色网址| 在线日本看片免费人成视久网 | 五月天com | 欧美成人xxxxx | 亚洲一区 av | 丰满少妇一级片 | 天天天天射 | 在线中文字幕一区二区 | 午夜精品电影一区二区在线 | 成人毛片一区 | 免费看在线看www777 | 天天夜操 | av超碰在线 | 成人a在线观看高清电影 | 欧美色图p | 福利视频| 国产精品18久久久久久久 | 成人免费av电影 | 日韩激情视频 | 国内精品小视频 | www.久草.com | 欧美激情精品久久久久 | 久久国产精品99久久人人澡 | 麻豆成人网 | 黄色精品在线看 | 成人av直播 | 伊人干综合 | 91视频免费国产 | 国产网红在线观看 | 久久久久久久看片 | 日韩一区二区三区在线观看 | 日韩视频一区二区三区在线播放免费观看 | 麻豆影视在线免费观看 | 91超在线 | 久久精品久久精品久久 | 亚洲午夜精品一区 | 一区二区在线不卡 | 18av在线视频| 国产精品午夜免费福利视频 | 亚洲精品视频在线免费播放 | 一性一交视频 | 久久久精品国产一区二区 | av在线电影网站 | 2021久久| 国产特级毛片aaaaaa | 一区二区国产精品 | 美女在线观看av | 伊人中文在线 | 超碰在线资源 | 毛片一级免费一级 | 中文字幕黄网 | 一区二区三区在线视频观看58 | 免费在线日韩 | 久草免费在线观看 | 国产剧情一区二区 | 亚洲精品乱码久久久久久蜜桃动漫 | 国产精久久久久久妇女av | 欧美另类重口 | 久久婷婷亚洲 | 精品国产日本 | 欧美 国产 视频 | 狠狠色丁香婷婷综合久久片 | 国产乱码精品一区二区蜜臀 | 国产一区二区久久久 | 欧美日韩另类视频 | 欧美另类重口 | 精品国产区 | 欧美日韩久 |