精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

一網(wǎng)打盡Redis Lua腳本并發(fā)原子組合操作

存儲 存儲軟件 Redis
Redis 是高性能的 KV 內(nèi)存數(shù)據(jù)庫,除了做緩存中間件的基本作用外還有很多用途。Redis 提供了豐富的命令來供我們使用以實現(xiàn)一些計算。

[[346975]]

1. 前言

Redis 是高性能的 KV 內(nèi)存數(shù)據(jù)庫,除了做緩存中間件的基本作用外還有很多用途。Redis 提供了豐富的命令來供我們使用以實現(xiàn)一些計算。Redis 的單個命令都是原子性的,有時候我們希望能夠組合多個 Redis 命令,并讓這個組合也能夠原子性的執(zhí)行,甚至可以重復使用。Redis 開發(fā)者意識到這種場景還是很普遍的,就在 2.6 版本中引入了一個特性來解決這個問題,這就是 Redis 執(zhí)行 Lua 腳本。

2. Lua

Lua 也算一門古老的語言了,玩魔獸世界的玩家應該對它不陌生,WOW 的插件就是用 Lua 腳本編寫的。在高并發(fā)的網(wǎng)絡游戲中 Lua 大放異彩被廣泛使用。

Lua 廣泛作為其它語言的嵌入腳本,尤其是 C/C++,語法簡單,小巧,源碼一共才 200 多 K,這可能也是 Redis 官方選擇它的原因。

另一款明星軟件 Nginx 也支持 Lua,利用 Lua 也可以實現(xiàn)很多有用的功能。

3. Lua 并不難

Redis 官方指南也指出不要在 Lua 腳本中編寫過于復雜的邏輯。

為了實現(xiàn)一個功能就要學習一門語言,這看起來就讓人有打退堂鼓的感覺。其實 Lua 并不難學,而且作為本文的場景來說我們不需要去學習 Lua 的完全特性,要在 Redis 中輕量級使用 Lua 語言。這對掌握了 Java 這種重量級語言的你來說根本不算難事。這里胖哥只對 Redis 中的涉及到的基本語法說一說。

Lua 的簡單語法

Lua 在 Redis 腳本中我個人建議只需要使用下面這幾種類型:

  1. nil 空
  2. boolean 布爾值
  3. number 數(shù)字
  4. string 字符串
  5. table 表

聲明類型

聲明類型非常簡單,不用攜帶類型。

  1. --- 全局變量 
  2. name = 'felord.cn' 
  3. --- 局部變量 
  4. local age = 18 

Redis 腳本在實踐中不要使用全局變量,局部變量效率更高。

table 類型

前面四種非常好理解,第五種table需要簡單說一下,它既是數(shù)組又類似 Java 中的HashMap(字典),它是 Lua 中僅有的數(shù)據(jù)結構。

數(shù)組不分具體類型,演示如下

  1. Lua 5.1.5  Copyright (C) 1994-2012 Lua.org, PUC-Rio 
  2. > arr_table = {'felord.cn','Felordcn',1} 
  3. > print(arr_table[1]) 
  4. felord.cn 
  5. > print(arr_table[3]) 
  6. > print(#arr_table) 

作為字典:

  1. Lua 5.1.5  Copyright (C) 1994-2012 Lua.org, PUC-Rio 
  2. > arr_table = {name = 'felord.cn', age = 18} 
  3. > print(arr_table['name']) 
  4. felord.cn 
  5. > print(arr_table.name
  6. felord.cn 
  7. > print(arr_table[1]) 
  8. nil 
  9. > print(arr_table['age']) 
  10. 18 
  11. > print(#arr_table) 

混合模式:

  1. Lua 5.1.5  Copyright (C) 1994-2012 Lua.org, PUC-Rio 
  2. > arr_table = {'felord.cn','Felordcn',1,age = 18,nil} 
  3. > print(arr_table[1]) 
  4. felord.cn 
  5. > print(arr_table[4]) 
  6. nil 
  7. > print(arr_table['age']) 
  8. 18 
  9. > print(#arr_table) 

 # 取 table 的長度不一定精準,慎用。同時在 Redis 腳本中避免使用混合模式的 table,同時元素應該避免包含空值nil。在不確定元素的情況下應該使用循環(huán)來計算真實的長度。

判斷

判斷非常簡單,格式為:

  1. local a = 10 
  2. if a < 10  then 
  3.  print('a小于10'
  4. elseif a < 20 then 
  5.  print('a小于20,大于等于10'
  6. else 
  7.  print('a大于等于20'
  8. end 

數(shù)組循環(huán)

  1. local arr = {1,2,name='felord.cn'
  2.  
  3. for i, v in ipairs(arr) do 
  4.     print('i = '..i) 
  5.     print('v = '.. v) 
  6. end 
  7.  
  8. print('-------------------'
  9.  
  10. for i, v in pairs(arr) do 
  11.     print('p i = '..i) 
  12.     print('p v = '.. v) 
  13. end 

打印結果:

  1. i = 1 
  2. v = 1 
  3. i = 2 
  4. v = 2 
  5. ----------------------- 
  6. p i = 1 
  7. p v = 1 
  8. p i = 2 
  9. p v = 2 
  10. p i = name 
  11. p v = felord.cn 

返回值

像 Python 一樣,Lua 也可以返回多個返回值。不過在 Redis 的 Lua 腳本中不建議使用此特性,如果有此需求請封裝為數(shù)組結構。在 Spring Data Redis 中支持腳本的返回值規(guī)則可以從這里分析:

  1. public static ReturnType fromJavaType(@Nullable Class<?> javaType) { 
  2.  
  3.    if (javaType == null) { 
  4.       return ReturnType.STATUS; 
  5.    } 
  6.    if (javaType.isAssignableFrom(List.class)) { 
  7.       return ReturnType.MULTI; 
  8.    } 
  9.    if (javaType.isAssignableFrom(Boolean.class)) { 
  10.       return ReturnType.BOOLEAN; 
  11.    } 
  12.    if (javaType.isAssignableFrom(Long.class)) { 
  13.       return ReturnType.INTEGER
  14.    } 
  15.    return ReturnType.VALUE; 

胖哥在實踐中會使用 List、Boolean、Long三種,避免出現(xiàn)幺蛾子。

到此為止 Redis Lua 腳本所需要知識點就完了,其它的函數(shù)、協(xié)程等特性也不應該在 Redis Lua 腳本中出現(xiàn),用到內(nèi)置函數(shù)的話搜索查詢一下就行了。

在接觸一門新的技術時先要中規(guī)中矩的使用,如果你想玩花活就意味著更高的學習成本。

4. Redis 中的 Lua

接下來就是 Redis Lua 腳本的實際操作了。

EVAL 命令

Redis 中使用EVAL命令來直接執(zhí)行指定的 Lua 腳本。

  1. EVAL luascript numkeys key [key ...] arg [arg ...] 
  • EVAL 命令的關鍵字。
  • luascript Lua 腳本。
  • numkeys 指定的 Lua 腳本需要處理鍵的數(shù)量,其實就是 key數(shù)組的長度。
  • key 傳遞給 Lua 腳本零到多個鍵,空格隔開,在 Lua 腳本中通過 KEYS[INDEX]來獲取對應的值,其中1 <= INDEX <= numkeys。
  • arg是傳遞給腳本的零到多個附加參數(shù),空格隔開,在 Lua 腳本中通過ARGV[INDEX]來獲取對應的值,其中1 <= INDEX <= numkeys。

接下來我簡單來演示獲取鍵hello的值得簡單腳本:

  1. 127.0.0.1:6379> set hello world 
  2. OK 
  3. 127.0.0.1:6379> get hello 
  4. "world" 
  5. 127.0.0.1:6379> EVAL "return redis.call('GET',KEYS[1])" 1 hello 
  6. "world" 
  7. 127.0.0.1:6379> EVAL "return redis.call('GET','hello')" 
  8. (error) ERR wrong number of arguments for 'eval' command 
  9. 127.0.0.1:6379> EVAL "return redis.call('GET','hello')" 0 
  10. "world" 

從上面的演示代碼中發(fā)現(xiàn),KEYS[1]可以直接替換為hello,但是 Redis 官方文檔指出這種是不建議的,目的是在命令執(zhí)行前會對命令進行分析,以確保 Redis Cluster 可以將命令轉(zhuǎn)發(fā)到適當?shù)募汗?jié)點。

numkeys無論什么情況下都是必須的命令參數(shù)。

call 函數(shù)和 pcall 函數(shù)

在上面的例子中我們通過redis.call()來執(zhí)行了一個SET命令,其實我們也可以替換為redis.pcall()。它們唯一的區(qū)別就在于處理錯誤的方式,前者執(zhí)行命令錯誤時會向調(diào)用者直接返回一個錯誤;而后者則會將錯誤包裝為一個我們上面講的table表格:

 

  1. 127.0.0.1:6379> EVAL "return redis.call('no_command')" 0 
  2. (error) ERR Error running script (call to f_1e6efd00ab50dd564a9f13e5775e27b966c2141e): @user_script:1: @user_script: 1: Unknown Redis command called from Lua script 
  3. 127.0.0.1:6379> EVAL "return redis.pcall('no_command')" 0 
  4. (error) @user_script: 1: Unknown Redis command called from Lua script 

這就像 Java 遇到一個異常,前者會直接拋出一個異常;后者會把異常處理成 JSON 返回。

值轉(zhuǎn)換

由于在 Redis 中存在 Redis 和 Lua 兩種不同的運行環(huán)境,在 Redis 和 Lua 互相傳遞數(shù)據(jù)時必然發(fā)生對應的轉(zhuǎn)換操作,這種轉(zhuǎn)換操作是我們在實踐中不能忽略的。例如如果 Lua 腳本向 Redis 返回小數(shù),那么會損失小數(shù)精度;如果轉(zhuǎn)換為字符串則是安全的。

 

  1. 127.0.0.1:6379> EVAL "return 3.14" 0 
  2. (integer) 3 
  3. 127.0.0.1:6379> EVAL "return tostring(3.14)" 0 
  4. "3.14" 

根據(jù)胖哥經(jīng)驗傳遞字符串、整數(shù)是安全的,其它需要你去仔細查看官方文檔并進行實際驗證。

原子執(zhí)行

Lua 腳本在 Redis 中是以原子方式執(zhí)行的,在 Redis 服務器執(zhí)行EVAL命令時,在命令執(zhí)行完畢并向調(diào)用者返回結果之前,只會執(zhí)行當前命令指定的 Lua 腳本包含的所有邏輯,其它客戶端發(fā)送的命令將被阻塞,直到EVAL命令執(zhí)行完畢為止。因此 LUA 腳本不宜編寫一些過于復雜了邏輯,必須盡量保證 Lua 腳本的效率,否則會影響其它客戶端。

腳本管理

SCRIPT LOAD

加載腳本到緩存以達到重復使用,避免多次加載浪費帶寬,每一個腳本都會通過 SHA 校驗返回唯一字符串標識。需要配合EVALSHA命令來執(zhí)行緩存后的腳本。

 

  1. 127.0.0.1:6379> SCRIPT LOAD "return 'hello'" 
  2. "1b936e3fe509bcbc9cd0664897bbe8fd0cac101b" 
  3. 127.0.0.1:6379> EVALSHA 1b936e3fe509bcbc9cd0664897bbe8fd0cac101b 0 
  4. "hello" 

SCRIPT FLUSH

既然有緩存就有清除緩存,但是遺憾的是并沒有根據(jù) SHA 來刪除腳本緩存,而是清除所有的腳本緩存,所以在生產(chǎn)中一般不會再生產(chǎn)過程中使用該命令。

SCRIPT EXISTS

以 SHA 標識為參數(shù)檢查一個或者多個緩存是否存在。

 

  1. 127.0.0.1:6379> SCRIPT EXISTS 1b936e3fe509bcbc9cd0664897bbe8fd0cac101b  1b936e3fe509bcbc9cd0664897bbe8fd0cac1012 
  2. 1) (integer) 1 
  3. 2) (integer) 0 

SCRIPT KILL

終止正在執(zhí)行的腳本。但是為了數(shù)據(jù)的完整性此命令并不能保證一定能終止成功。如果當一個腳本執(zhí)行了一部分寫的邏輯而需要被終止時,該命令是不湊效的。需要執(zhí)行SHUTDOWN nosave在不對數(shù)據(jù)執(zhí)行持久化的情況下終止服務器來完成終止腳本。

其它一些要點

了解了上面這些知識基本上可以滿足開發(fā)一些簡單的 Lua 腳本了。但是實際開發(fā)中還是有一些要點的。

  • 務必對 Lua 腳本進行全面測試以保證其邏輯的健壯性,當 Lua 腳本遇到異常時,已經(jīng)執(zhí)行過的邏輯是不會回滾的。
  • 盡量不使用 Lua 提供的具有隨機性的函數(shù),參見相關官方文檔。
  • 在 Lua 腳本中不要編寫function函數(shù),整個腳本作為一個函數(shù)的函數(shù)體。
  • 在腳本編寫中聲明的變量全部使用local關鍵字。
  • 在集群中使用 Lua 腳本要確保邏輯中所有的key分到相同機器,也就是同一個插槽(slot)中,可采用Redis Hash Tag技術。
  • 再次重申 Lua 腳本一定不要包含過于耗時、過于復雜的邏輯。

5. 總結

 

本文對 Redis Lua 腳本的場景以及編寫 Redis Lua 腳本所需要的 Lua 編程語法進行了詳細的講解和演示,也對 Redis Lua 腳本在實際開發(fā)中需要注意的一些要點進行了分享。希望能夠幫助你掌握此技術。今天的分享就到這里,下次我將分享如何在實際 Redis 開發(fā)中使用 Lua 腳本,所以這一篇一定要進行掌握。

本文轉(zhuǎn)載自微信公眾號「碼農(nóng)小胖哥」,可以通過以下二維碼關注。轉(zhuǎn)載本文請聯(lián)系碼農(nóng)小胖哥公眾號。

 

責任編輯:武曉燕 來源: 碼農(nóng)小胖哥
相關推薦

2024-04-26 00:25:52

Rust語法生命周期

2021-08-05 06:54:05

流程控制default

2024-02-27 10:11:36

前端CSS@規(guī)則

2021-10-11 07:55:42

瀏覽器語法Webpack

2011-12-02 09:22:23

網(wǎng)絡管理NetQos

2010-08-25 01:59:00

2025-01-13 07:30:00

SQL開發(fā)組合查詢

2013-08-02 10:52:10

Android UI控件

2024-08-26 10:01:50

2024-06-12 00:00:05

2024-04-07 08:41:34

2024-06-24 12:51:50

2013-10-16 14:18:02

工具圖像處理

2023-04-06 09:08:41

BPM流程引擎

2023-09-26 00:29:40

CSS布局標簽

2023-04-03 08:30:54

項目源碼操作流程

2009-04-02 10:17:00

交換機產(chǎn)品選購

2024-05-27 00:27:59

WinForm線程應用程序

2021-05-20 11:17:49

加密貨幣區(qū)塊鏈印度

2019-07-24 15:30:00

SQL注入數(shù)據(jù)庫
點贊
收藏

51CTO技術棧公眾號

91视频一区二区三区| www.国产精品一区| 国产精品网站导航| 亚洲a中文字幕| 久久黄色免费视频| 日韩深夜福利| 欧美男同性恋视频网站| 小泽玛利亚av在线| 香蕉视频免费看| 美女www一区二区| www.成人在线| k8久久久一区二区三区| 欧美壮男野外gaytube| 正在播放国产对白害羞| 亚洲码欧美码一区二区三区| 色婷婷香蕉在线一区二区| 丰满女人性猛交| 午夜18视频在线观看| 久久99热狠狠色一区二区| 久久久久九九九九| 亚洲视频重口味| 亚洲美女久久| 日韩欧美国产一二三区| 国产成人综合一区| 大菠萝精品导航| 国产精品理论片在线观看| 岛国视频一区| 国产精品福利电影| 三级一区在线视频先锋| 欧美精品第一页在线播放| 国精产品一区一区三区有限在线| 91亚洲一线产区二线产区| av在线播放一区| 欧美日韩美女在线观看| 18视频在线观看娇喘| 黄色大片在线免费观看| 波多野结衣亚洲一区| 成人国产精品免费视频| 日韩综合在线观看| 99视频精品| 色综合视频一区中文字幕| 亚洲av无一区二区三区| 国产亚洲电影| 亚洲精品资源美女情侣酒店| 国产大尺度视频| 久久久精品区| 欧美精品777| 97超碰成人在线| 日韩毛片一区| 欧美午夜一区二区| 亚洲精品高清无码视频| 亚洲欧美在线成人| 色88888久久久久久影院野外 | 成人啪啪18免费游戏链接| www一区二区三区| 欧美军同video69gay| 中文字幕第88页| 成人国产在线| 欧美日韩精品免费观看视频| 免费看污污网站| yy6080久久伦理一区二区| 在线视频一区二区三区| 妓院一钑片免看黄大片| 成人不卡视频| 91精品国产综合久久久蜜臀粉嫩| 亚洲高清视频免费| 日韩中文一区二区| 欧美成人r级一区二区三区| 潘金莲一级淫片aaaaa| 懂色av一区二区| 亚洲精品在线免费观看视频| 亚洲性图第一页| 精品亚洲免a| 日韩成人网免费视频| 国产精品无码永久免费不卡| 欧美日韩伦理在线免费| 日韩中文字幕免费视频| 男女做暖暖视频| 日韩视频二区| 国产精品高潮呻吟久久av野狼| 怡春院在线视频| 国产乱对白刺激视频不卡| 成人自拍网站| 黄色电影免费在线看| 最新日韩av在线| 美脚丝袜脚交一区二区| av资源亚洲| 欧美人与禽zozo性伦| 男人的天堂免费| 日韩精品免费一区二区三区竹菊| 一区二区日韩精品| 日本妇女毛茸茸| 久久国产福利| 成人性教育视频在线观看| 欧美 日韩 人妻 高清 中文| 久久精品一区四区| 国产一区一区三区| 天堂av在线网| 制服丝袜亚洲精品中文字幕| 亚洲综合自拍网| 97精品中文字幕| 98精品在线视频| 亚洲一区在线观| 99热这里都是精品| 一本一生久久a久久精品综合蜜| 黄色成人在线网| 欧美性色aⅴ视频一区日韩精品| 能看毛片的网站| heyzo久久| 性色av一区二区咪爱| 96亚洲精品久久久蜜桃| 久久综合999| 日韩不卡视频一区二区| 亚洲www.| 亚洲精品久久久久中文字幕欢迎你| 免费看一级黄色| 国产精品尤物| 国产成人精品免费视频大全最热| www.亚洲.com| 欧美日韩国产中文精品字幕自在自线| 91小视频在线播放| 欧美男同视频网| 8090成年在线看片午夜| 99久久精品日本一区二区免费 | 欧美一个色资源| 久久久无码人妻精品一区| 午夜精品偷拍| 国产精品夜间视频香蕉| 男人av在线| 激情久久av一区av二区av三区| 污视频在线观看免费网站| 欧美三级美国一级| 日本精品视频在线观看| 五月天婷婷在线观看| 一区二区国产盗摄色噜噜| 色呦色呦色精品| 日韩精品久久| 国产精品久久久久91| 免费人成黄页在线观看忧物| 精品久久久久久久久久久久| 国产人妻黑人一区二区三区| 国模吧视频一区| 99中文字幕| 污视频网站在线免费| 欧美精品一二三区| 日韩欧美视频免费观看| 免费久久99精品国产| 日韩av一级大片| 日韩中文影院| 国产亚洲美女精品久久久| 日韩人妻精品中文字幕| 久久久久免费观看| 密臀av一区二区三区| 国产成人影院| 国产福利成人在线| 国产在线三区| 欧美色精品天天在线观看视频| 少妇特黄一区二区三区| 久久亚洲风情| 亚洲精品中文综合第一页| 伊人久久高清| 日韩中文字幕视频| 99热精品在线播放| 一区二区在线观看免费视频播放 | 欧美人一级淫片a免费播放| 久久久久国产精品麻豆| 久久久久免费精品| 偷拍欧美精品| 国产精品免费一区二区三区观看| bl视频在线免费观看| 精品久久久久久久久久久院品网| 国产无遮挡免费视频| 久久综合九色综合欧美亚洲| 日韩中文字幕组| 91视频精品| 99国产在线观看| 女人高潮被爽到呻吟在线观看 | 男女做爰猛烈刺激| 蜜桃av噜噜一区| 日韩中文在线字幕| 欧美精品密入口播放| 国产精品69久久| 成人短视频在线| 亚洲激情第一页| 奴色虐av一区二区三区| 亚洲日本青草视频在线怡红院| www.17c.com喷水少妇| 日韩不卡一二三区| 国产91在线亚洲| 国产一区二区三区日韩精品| 亚洲aⅴ日韩av电影在线观看| 超碰在线视屏| 色av中文字幕一区| 五月激情六月婷婷| 欧美精品123区| 在线观看国产亚洲| 中文字幕一区二区三区不卡| 成熟妇人a片免费看网站| 日韩高清在线不卡| 农民人伦一区二区三区| 日韩精品网站| 久99久在线| 999精品嫩草久久久久久99| 久久久久久久久久国产| 91精品国产综合久久久久久豆腐| 精品sm捆绑视频| 亚洲一二区视频| 欧美性极品xxxx做受| 黄色一级片中国| 国产婷婷一区二区| 日韩精品一区二区三区高清免费| 经典一区二区三区| 日韩一级免费在线观看| 亚洲精品视频啊美女在线直播| 亚洲一区二区三区涩| 亚洲成在人线免费观看| 99在线视频播放| 99精品国产九九国产精品| 日韩在线观看一区二区| 一区国产精品| 制服丝袜日韩| 国产一区不卡在线观看| 日韩影片在线观看| 91精品久久久久久久久不口人| 中文在线最新版地址| 欧美激情精品久久久久| 黄色视屏免费在线观看| 中文字幕日韩专区| 大片免费播放在线视频| 亚洲美女福利视频网站| 欧美一级淫片免费视频魅影视频| 日韩亚洲欧美成人一区| 91女人18毛片水多国产| 欧美视频在线观看一区二区| 亚洲成人第一网站| 欧美三级免费观看| 91国产丝袜播放在线| 亚洲成av人片在线观看| 麻豆亚洲av熟女国产一区二| 亚洲欧美在线aaa| 日日操免费视频| 国产精品久久久久天堂| 国产综合精品在线| 亚洲国产成人一区二区三区| 色一情一交一乱一区二区三区 | 国产精品va在线观看视色| 中文字幕日韩精品有码视频| 在线免费观看黄色av| 中文字幕一区二区三区电影| 69av亚洲| 日韩视频亚洲视频| 国产素人视频在线观看| 久久综合网hezyo| 成人在线视频亚洲| 久久久免费高清电视剧观看| 国模雨婷捆绑高清在线| 国产69精品久久久久99| 草草在线视频| 18性欧美xxxⅹ性满足| 制服丝袜专区在线| 国产精品久久久久77777| 五月天色综合| 91九色蝌蚪嫩草| 国产丝袜一区| 欧美性天天影院| 欧美hd在线| 伊人再见免费在线观看高清版| 欧美精品99| 国产午夜大地久久| 日韩黄色免费电影| 天堂在线一区二区三区| 成人网页在线观看| 女~淫辱の触手3d动漫| 国产精品毛片久久久久久| 亚洲一级生活片| 亚洲第一在线综合网站| 人妻丰满熟妇av无码区| 欧美日韩精品专区| 亚洲伦理在线观看| 亚洲欧美制服综合另类| 巨大荫蒂视频欧美大片| 久久久久久av| 成人性片免费| 大波视频国产精品久久| jlzzjlzz亚洲女人| 黄网站色视频免费观看| 免费国产自线拍一欧美视频| 亚洲视频一二三四| 成人av片在线观看| 俄罗斯毛片基地| 亚洲高清不卡在线观看| 国产情侣免费视频| 精品日韩99亚洲| 国产福利在线看| 欧美第一黄色网| 99久久精品一区二区成人| 超碰在线97av| 日韩精品影视| 国产精品333| 久久99蜜桃精品| 精品夜夜澡人妻无码av | 中文字幕国内精品| 欧美男男video| 国产精品综合不卡av| 精品中国亚洲| 精品91一区二区三区| 亚洲欧美视频| 欧美一级片在线免费观看| 欧美国产综合色视频| 全部毛片永久免费看| 日韩区在线观看| 在线观看h片| 国产91成人在在线播放| 中文字幕一区二区三区中文字幕| 亚洲开发第一视频在线播放| 一区二区日韩免费看| 性xxxxxxxxx| 国产精品久久毛片a| www.色国产| 日韩成人在线视频| 日本在线观看大片免费视频| 国产一区二区丝袜| 黑人操亚洲人| 久久久久久久久久久视频| 成人午夜短视频| 青青草偷拍视频| 制服丝袜亚洲色图| 免费黄色在线观看| 国产精品入口免费视| 亚洲电影一级片| 色欲色香天天天综合网www| 国产高清亚洲一区| 精品国产视频一区二区三区| 欧美日韩一区二区三区视频| 国产在线视频福利| 国产91在线播放| 免费一区二区三区视频导航| 乱妇乱女熟妇熟女网站| 成人黄色小视频在线观看| 欧美色图亚洲天堂| 日韩亚洲国产中文字幕欧美| 毛片在线播放a| 国产主播欧美精品| 91综合久久| 三区视频在线观看| 亚洲精品网站在线观看| 国产高清视频免费| 欧美高清无遮挡| 成人激情自拍| 波多野结衣家庭教师在线| 成人av免费在线| 天天综合网久久综合网| 亚洲精品综合精品自拍| 婷婷午夜社区一区| 日本不卡一区| 免费在线观看日韩欧美| 91ts人妖另类精品系列| 欧美精品tushy高清| 污污的网站在线免费观看| 国产欧美日韩视频一区二区三区| 亚洲国产片色| 中文字幕第4页| 欧美日韩三级视频| 国产激情小视频在线| 国产精品日韩欧美一区二区三区 | 美女毛片一区二区三区四区最新中文字幕亚洲| 少妇人妻无码专区视频| 久久久久亚洲蜜桃| 一级特黄aaa| 欧美人与性动交a欧美精品| 美女视频免费精品| 黄色一级二级三级| 国产精品电影院| 性一交一乱一精一晶| 91极品视频在线| 青青一区二区三区| 午夜性福利视频| 欧美性猛交xxxx乱大交3| 阿v免费在线观看| 91成人免费观看| 国产日韩欧美高清免费| 亚洲欧美日韩第一页| 日韩女优视频免费观看| 久九九久频精品短视频| 在线视频亚洲自拍| 不卡一区二区在线| 中文字幕av免费观看| 九九热这里只有在线精品视| 日韩美脚连裤袜丝袜在线| 中文字幕22页| 午夜视频一区在线观看| 都市激情一区| 不卡视频一区二区| 视频一区二区三区中文字幕| 九九热这里有精品视频| 一区二区三区四区视频| 永久免费精品视频| 欧美女同在线观看| 午夜精品视频在线观看| 麻豆传媒在线观看|