精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

麻豆成全视频免费观看在线看| 国产精品av在线播放| 91亚洲国产成人精品性色| 精人妻一区二区三区| 中文在线免费观看| 里番精品3d一二三区| 亚洲欧美偷拍另类a∨色屁股| 国产91露脸中文字幕在线| 日韩黄色一区二区| 东京一区二区| 久久众筹精品私拍模特| 97久久超碰福利国产精品…| 成人免费播放视频| 久久黄色美女电影| 欧美精品久久久久久| 午夜精品视频在线观看| 99在线观看视频| 天天干中文字幕| 24小时成人在线视频| 国产精品盗摄一区二区三区| 国产精品久久色| 在线小视频你懂的| 91精品影视| 国产日韩欧美一区二区三区综合| 国产91精品久久久久久久| japanese在线观看| 僵尸再翻生在线观看免费国语| 不卡在线观看av| 国产91成人在在线播放| 91人妻一区二区三区蜜臀| 国产电影一区| 亚洲精品国产a久久久久久| 91福利视频导航| 欧美精品99久久久| 韩国女主播一区二区三区| 亚洲成人av电影在线| 精品欧美国产一区二区三区不卡| 三级黄色在线视频| 精品日本12videosex| 日韩欧美成人午夜| 成人中文字幕在线播放| 黄色毛片在线看| 久久国产尿小便嘘嘘| 欧美裸身视频免费观看| 国产黑丝在线观看| 欧美大片91| 欧美日韩国产一区二区| 午夜视频久久久| 精品国产无码一区二区| 99av国产精品欲麻豆| 国产一区二区三区在线视频| www,av在线| 人人草在线视频| 亚洲第一精品在线| 久久这里只有精品23| 美州a亚洲一视本频v色道| 麻豆国产欧美日韩综合精品二区| 欧美自拍大量在线观看| 国产精品嫩草影院俄罗斯| 日韩在线二区| 亚洲精品在线免费播放| 日韩一级免费在线观看| 2021国产在线| 国产日韩欧美精品在线| 欧美一区二区福利| 精品国产伦一区二区三区| 国产精品一级片在线观看| 日产日韩在线亚洲欧美| 日韩不卡视频在线| 一区二区三区四区电影| 亚洲色图五月天| 在线观看中文av| 国产区一区二| 精品国产电影一区二区| 国产成人av无码精品| 性人久久久久| 日韩精品专区在线影院重磅| 少妇熟女视频一区二区三区| 福利视频亚洲| 欧美午夜女人视频在线| 青青视频免费在线观看| 成人影视在线播放| av中文字幕亚洲| 亚洲最大的网站| 欧美视频一二区| 韩国三级在线一区| 国产精品高潮呻吟久久av黑人| 国产在线视频在线观看| 999视频精品| 国产一区二区日韩| 日本xxx在线播放| 成人av影音| 日韩精品中文字幕一区| aaaa黄色片| 动漫视频在线一区| 亚洲香蕉成人av网站在线观看| 国精产品视频一二二区| 精品国产一区二区三区四区| 久久九九全国免费精品观看| 久操视频在线观看免费| 自拍偷拍精品| 亚洲免费高清视频| 在线观看国产三级| 97精品一区| 欧美性受xxxx白人性爽| 一卡二卡在线视频| 另类专区欧美蜜桃臀第一页| 成人三级在线| 亚洲AV无码一区二区三区性| 国产一区二区在线影院| 成人网欧美在线视频| 11024精品一区二区三区日韩| 粉嫩高潮美女一区二区三区| 91久色国产| 九一国产在线| 亚洲国产欧美一区二区三区丁香婷| 妓院一钑片免看黄大片| 成人在线网站| 亚洲国产精品福利| 人妻丰满熟妇aⅴ无码| 欧美日韩一本| 亚洲片在线观看| 国产午夜精品无码一区二区| 美女精品自拍一二三四| 国产精品视频免费观看www| 空姐吹箫视频大全| 91在线精品一区二区三区| 老司机精品福利在线观看| 韩国三级av在线免费观看| 亚洲综合丝袜美腿| 5月婷婷6月丁香| 一区二区中文字幕在线观看| 日韩电影中文字幕一区| 亚洲AV无码国产成人久久| 国产亚洲精品美女久久久久久久久久| 亚洲人在线视频| 国产做受高潮漫动| 国产精品一区二区黑丝| 大桥未久一区二区| 91在线超碰| 91国产免费观看| 天天干天天av| 91精品导航| 欧美精品免费看| 国产在线观看黄色| 久久99精品久久久久久动态图| 97碰碰视频| 久热国产在线| 91精品国产91热久久久做人人| 国产人妻黑人一区二区三区| 欧美伊人久久| 国产91色在线免费| 免费在线视频你懂得| 粉嫩av一区二区三区免费野| av鲁丝一区鲁丝二区鲁丝三区| 亚洲精品色图| 国产人妖伪娘一区91| 日韩性xxxx| 精品成人久久av| 涩多多在线观看| 一区二区三区四区在线观看国产日韩| 91欧美精品成人综合在线观看| 黄色网页在线观看| 欧美videos中文字幕| 日本黄色小视频在线观看| 欧美日韩亚洲三区| 国产精品久久久久久亚洲影视| 国产三级视频在线播放线观看| 亚洲综合一区二区| 免费成人蒂法网站| 日本网站在线观看一区二区三区| 97久久精品午夜一区二区| 第一av在线| 91精品久久久久久久久99蜜臂| 久久亚洲AV成人无码国产野外 | 欧美 日韩 国产 一区二区三区| 一本综合精品| 免费看国产精品一二区视频| 97欧美成人| 粗暴蹂躏中文一区二区三区| 中文字幕亚洲乱码熟女1区2区| 国产电影精品久久禁18| 欧美二区三区在线| 啊啊啊久久久| 国产一区二区三区在线免费观看| 国产一区二区三区黄片| 亚洲国产色一区| 一区二区三区伦理片| 狠狠网亚洲精品| 欧美日韩性生活片| 91蜜桃臀久久一区二区| 日本不卡免费高清视频| 日本韩国在线视频爽| 欧美在线你懂得| 波多野吉衣中文字幕| 精品一区在线看| 欧美爱爱视频免费看| 99久久这里只有精品| 国产精品直播网红| 成人av一区| 欧美成人高清电影在线| 日本黄色中文字幕| 国产色综合久久| 亚洲美女高潮久久久| 日韩电影一区二区三区| 日韩理论片在线观看| 欧美三区四区| 久久理论片午夜琪琪电影网| 黄色一级a毛片| 在线观看91av| 精品欧美一区二区久久久久| 91天堂素人约啪| 91免费视频网站在线观看| 亚洲精品白浆高清| 91传媒视频免费| 福利精品在线| 国产成人精品电影| 色在线视频观看| 欧美激情精品久久久久久| 蜜桃在线一区二区| 欧美精品第1页| 超碰在线免费97| 国产精品久久久久久户外露出| 人妻激情偷乱频一区二区三区| 一区在线免费观看| 精品综合久久久| 亚洲免费一区三区| 91精品久久久久久久久久| 欧美性xxx| www国产精品com| 超碰人人人人人人| 7777精品伊人久久久大香线蕉| 青娱乐在线免费视频| 欧美视频国产精品| www.中文字幕在线观看| 亚洲韩国一区二区三区| 国产又爽又黄无码无遮挡在线观看| 国产成人一区在线| 精品人妻一区二区三区免费| 国产精一区二区三区| 超碰中文字幕在线观看| 国产在线视频一区二区| 五月天婷婷影视| 一本色道久久综合亚洲精品不卡| 精品国偷自产一区二区三区| 久久99国产成人小视频| 成人精品久久久| 欧美风情在线视频| 久久久在线观看| wwwwxxxx在线观看| 韩国三级电影久久久久久| www.综合网.com| 69av在线视频| 91麻豆国产福利在线观看宅福利| 在线不卡国产精品| 免费在线观看黄色| 亚洲精品视频网上网址在线观看| 伊人网视频在线| 欧美日韩一级视频| 国产一区二区99| 色综合久久久久综合| 69xx绿帽三人行| 亚洲一区二区三区中文字幕在线| 国产精彩视频在线观看| 精品国产乱码久久久久久婷婷 | 亚洲主播在线| 日韩视频一二三| 欧美日韩一区自拍 | 狂野欧美性猛交xxxx巴西| 在线观看视频黄色| 欧美**vk| 在线视频不卡一区二区三区| 西野翔中文久久精品国产| 青青草国产精品| 91精品一区国产高清在线gif | 国产午夜视频在线观看| 中国人与牲禽动交精品| 五月婷婷六月丁香| 日韩欧美在线影院| 91麻豆国产视频| 精品国产一区二区三区忘忧草| 午夜福利视频一区二区| 中文字幕av一区二区| 亚洲区欧洲区| 久久精品国亚洲| 国产在线88av| 国产日产亚洲精品| 欧美aaaaa级| 亚洲毛片aa| 成人精品影视| 日韩成人av网站| 综合天堂久久久久久久| 久久成人免费观看| 国内久久精品视频| 不卡一区二区在线观看| 亚洲人成在线观看一区二区| 国产精品久久久久久久妇| 欧美日韩成人在线一区| 中文字幕 自拍偷拍| 欧美videos中文字幕| 99免在线观看免费视频高清| 亚洲人a成www在线影院| 国产在线激情| 国产精品成av人在线视午夜片| 亚洲视频三区| 亚洲不卡1区| 中国女人久久久| 欧美高清精品一区二区| 国产网红主播福利一区二区| 欧美做爰爽爽爽爽爽爽| 色天天综合色天天久久| 日韩专区第一页| 亚洲精品在线免费播放| 黄色网页在线播放| 国产精品久久久久免费a∨大胸| 欧美a一欧美| 免费高清一区二区三区| 精品亚洲aⅴ乱码一区二区三区| 欧美bbbbb性bbbbb视频| 亚洲图片自拍偷拍| a视频免费在线观看| 精品少妇一区二区三区视频免付费| 韩日视频在线| 欧洲永久精品大片ww免费漫画| 日韩一区二区三区精品视频第3页 日韩一区二区三区精品 | 日韩免费一区二区三区在线播放| 中文字幕日本在线| 国产精品爱啪在线线免费观看| 欧美日韩看看2015永久免费| 欧美精品自拍视频| 国产成人精品网址| 三级影片在线看| 91精品国产aⅴ一区二区| 黄页视频在线播放| 成人免费淫片aa视频免费| 日韩黄色大片| 国产美女18xxxx免费视频| 中文字幕免费在线观看视频一区| 亚洲精品久久久久久国| 亚洲一区在线视频| 精品国自产在线观看| 久久久国产成人精品| 成年永久一区二区三区免费视频| 亚洲欧美日韩国产yyy| 美女视频黄免费的久久| 欧美巨胸大乳hitomi| 欧美日韩综合在线| 麻豆tv免费在线观看| 亚洲a在线观看| 亚洲免费成人av在线| 欧美日韩在线一| 91网站黄www| 制服丝袜在线一区| www.日韩视频| 一本一道久久a久久| 久久综合久久网| 91美女精品福利| 精品一区二三区| 久久久精品美女| 亚洲成人五区| 内射国产内射夫妻免费频道| 26uuu另类欧美亚洲曰本| 精品久久久久久久久久久久久久久久久久| 制服丝袜中文字幕亚洲| 黄av在线播放| 国产精品免费一区二区三区观看| 成人精品影院| 91精品视频国产| 亚洲高清久久久| 日本一区二区三区在线观看视频| 两个人的视频www国产精品| 国产亚洲高清在线观看| 你真棒插曲来救救我在线观看| 91麻豆国产福利精品| 亚洲天堂中文字幕在线| 亚洲欧美精品在线| 成人av集中营| 日韩精品一区二区在线视频| 久热成人在线视频| 久久精品99国产精| 亚洲欧美成人精品| 999久久久国产999久久久| 僵尸世界大战2 在线播放| 国产视频一区二区在线| 精品久久久久成人码免费动漫| 欧美亚洲另类在线| 91精品推荐| 欧美成人午夜精品免费| 8v天堂国产在线一区二区| 超碰在线cao| 亚洲一区二区三区欧美| 日韩av中文字幕一区二区| 加勒比婷婷色综合久久| 亚洲精品少妇网址| 日韩08精品| 午夜激情福利在线| 欧美国产日韩一二三区| 麻豆成人免费视频| 精品中文字幕乱| 日本久久精品|