成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長資訊網
最全最豐富的資訊網站

一起來聊聊Redis有什么優勢和特點

本篇文章給大家帶來了關于Redis的相關知識,其中主要介紹了關于redis的一些優勢和特點,Redis 是一個開源的使用ANSI C語言編寫、遵守 BSD 協議、支持網絡、可基于內存、分布式存儲數據庫,下面一起來看一下,希望對大家有幫助。

一起來聊聊Redis有什么優勢和特點

推薦學習:Redis視頻教程

什么是redis

Remote DIctionary Server(Redis) 是一個由 Salvatore Sanfilippo 寫的 key-value 存儲系統,是跨平臺的非關系型數據庫。

Redis 是一個開源的使用 ANSI C 語言編寫、遵守 BSD 協議、支持網絡、可基于內存、分布式、可選持久性的鍵值對(Key-Value)存儲數據庫,并提供多種語言的 API。

Redis 通常被稱為數據結構服務器,因為值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等類型。

Redis的特點:

  • 內存數據庫,速度快,也支持數據的持久化,可以將內存中的數據保存在磁盤中,重啟的時候可以再次加載進行使用。
  • Redis不僅僅支持簡單的key-value類型的數據,同時還提供list,set,zset,hash等數據結構的存儲。
  • Redis支持數據的備份,即master-slave模式的數據備份。
  • 支持事務

Redis的優勢:

  • 性能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s 。
  • 豐富的數據類型 – Redis支持二進制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數據類型操作。
  • 原子 – Redis的所有操作都是原子性的,同時Redis還支持對幾個操作合并后的原子性執行。(事務)
  • 豐富的特性 – Redis還支持 publish/subscribe, 通知, key 過期等等特性。

Redis與其他key-value存儲有什么不同?

  • Redis有著更為復雜的數據結構并且提供對他們的原子性操作,這是一個不同于其他數據庫的進化路徑。Redis的數據類型都是基于基本數據結構的同時對程序員透明,無需進行額外的抽象。
  • Redis運行在內存中但是可以持久化到磁盤,所以在對不同數據集進行高速讀寫時需要權衡內存,因為數據量不能大于硬件內存。在內存數據庫方面的另一個優點是,相比在磁盤上相同的復雜的數據結構,在內存中操作起來非常簡單,這樣Redis可以做很多內部復雜性很強的事情。同時,在磁盤格式方面他們是緊湊的以追加的方式產生的,因為他們并不需要進行隨機訪問。

Memcache與Redis的區別都有哪些

  1. 存儲方式 Memecache把數據全部存在內存之中,斷電后會掛掉,數據不能超過內存大小。 Redis有部份存在硬盤上,redis可以持久化其數據
  2. 數據支持類型 memcached所有的值均是簡單的字符串,redis作為其替代者,支持更為豐富的數據類型 ,提供list,set,zset,hash等數據結構的存儲
  3. 使用底層模型不同 它們之間底層實現方式 以及與客戶端之間通信的應用協議不一樣。 Redis直接自己構建了VM 機制 ,因為一般的系統調用系統函數的話,會浪費一定的時間去移動和請求。
  4. value 值大小不同:Redis 最大可以達到 512M;memcache 只有 1mb。
  5. redis的速度比memcached快很多
  6. Redis支持數據的備份,即master-slave模式的數據備份。

Redis為什么這么快

1、完全基于內存,絕大部分請求是純粹的內存操作,非常快速。數據存在內存中,類似于HashMap,HashMap的優勢就是查找和操作的時間復雜度都是O(1);

2、數據結構簡單,對數據操作也簡單,Redis中的數據結構是專門進行設計的;

3、采用單線程,避免了不必要的上下文切換和競爭條件,也不存在多進程或者多線程導致的切換而消耗 CPU,不用去考慮各種鎖的問題,不存在加鎖釋放鎖操作,沒有因為可能出現死鎖而導致的性能消耗;

4、使用多路I/O復用模型,非阻塞IO;

5、使用底層模型不同,它們之間底層實現方式以及與客戶端之間通信的應用協議不一樣,Redis直接自己構建了VM 機制 ,因為一般的系統調用系統函數的話,會浪費一定的時間去移動和請求;

6.多路 I/O 復用模型

多路I/O復用模型是利用 select、poll、epoll 可以同時監察多個流的 I/O 事件的能力,在空閑的時候,會把當前線程阻塞掉,當有一個或多個流有 I/O 事件時,就從阻塞態中喚醒,于是程序就會輪詢一遍所有的流(epoll 是只輪詢那些真正發出了事件的流),并且只依次順序的處理就緒的流,這種做法就避免了大量的無用操作。

**這里“多路”指的是多個網絡連接,“復用”指的是復用同一個線程。**采用多路 I/O 復用技術可以讓單個線程高效的處理多個連接請求(盡量減少網絡 IO 的時間消耗),且 Redis 在內存中操作數據的速度非常快,也就是說內存內的操作不會成為影響Redis性能的瓶頸,主要由以上幾點造就了 Redis 具有很高的吞吐量。

那么為什么Redis是單線程的

我們首先要明白,上邊的種種分析,都是為了營造一個Redis很快的氛圍!官方FAQ表示,因為Redis是基于內存的操作,CPU不是Redis的瓶頸,Redis的瓶頸最有可能是機器內存的大小或者網絡帶寬。既然單線程容易實現,而且CPU不會成為瓶頸,那就順理成章地采用單線程的方案了(畢竟采用多線程會有很多麻煩!)。

Redis 數據類型及命令

一起來聊聊Redis有什么優勢和特點

1.字符串(String)

redis 127.0.0.1:6379> SET rediskey redis OK redis 127.0.0.1:6379> GET rediskey "redis"

2. 哈希(Hash)

Redis hash 是一個 string 類型的 field(字段) 和 value(值) 的映射表,hash 特別適合用于存儲對象。

Redis 中每個 hash 可以存儲 232 – 1 鍵值對(40多億)

3. 列表(List)

Redis列表是簡單的字符串列表,按照插入順序排序。你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)

一個列表最多可以包含 232 – 1 個元素 (4294967295, 每個列表超過40億個元素)。

redis 127.0.0.1:6379> LPUSH rediskey redis (integer) 1 redis 127.0.0.1:6379> LPUSH rediskey mongodb (integer) 2 redis 127.0.0.1:6379> LPUSH rediskey mysql (integer) 3 redis 127.0.0.1:6379> LRANGE rediskey 0 10  1) "mysql" 2) "mongodb" 3) "redis"

4. 集合(Set)

Redis 的 Set 是 String 類型的無序集合。集合成員是唯一的,這就意味著集合中不能出現重復的數據。

集合對象的編碼可以是 intset 或者 hashtable。

Redis 中集合是通過哈希表實現的,所以添加,刪除,查找的復雜度都是 O(1)。

集合中最大的成員數為 232 – 1 (4294967295, 每個集合可存儲40多億個成員)。

redis 127.0.0.1:6379> SADD rediskey redis (integer) 1 redis 127.0.0.1:6379> SADD rediskey mongodb (integer) 1 redis 127.0.0.1:6379> SADD rediskey mysql (integer) 1 redis 127.0.0.1:6379> SADD rediskey mysql (integer) 0 redis 127.0.0.1:6379> SMEMBERS rediskey  1) "mysql" 2) "mongodb" 3) "redis"

5. 有序集合(sorted set)

Redis 有序集合和集合一樣也是 string 類型元素的集合,且不允許重復的成員。

不同的是每個元素都會關聯一個 double 類型的分數。redis 正是通過分數來為集合中的成員進行從小到大的排序。

有序集合的成員是唯一的,但分數(score)卻可以重復。

集合是通過哈希表實現的,所以添加,刪除,查找的復雜度都是 O(1)。 集合中最大的成員數為 232 – 1 (4294967295, 每個集合可存儲40多億個成員)。

6. HyperLogLog

Redis 在 2.8.9 版本添加了 HyperLogLog 結構。

Redis HyperLogLog 是用來做基數統計的算法,HyperLogLog 的優點是,在輸入元素的數量或者體積非常非常大時,計算基數所需的空間總是固定 的、并且是很小的。

在 Redis 里面,每個 HyperLogLog 鍵只需要花費 12 KB 內存,就可以計算接近 2^64 個不同元素的基 數。這和計算基數時,元素越多耗費內存就越多的集合形成鮮明對比。

但是,因為 HyperLogLog 只會根據輸入元素來計算基數,而不會儲存輸入元素本身,所以 HyperLogLog 不能像集合那樣,返回輸入的各個元素。

什么是基數?

比如數據集 {1, 3, 5, 7, 5, 7, 8}, 那么這個數據集的基數集為 {1, 3, 5 ,7, 8}, 基數(不重復元素)為5。 基數估計就是在誤差可接受的范圍內,快速計算基數。

實例

以下實例演示了 HyperLogLog 的工作過程:

//添加指定元素到 HyperLogLog 中。 redis 127.0.0.1:6379> PFADD rediskey "redis"   1) (integer) 1  redis 127.0.0.1:6379> PFADD rediskey "mongodb"  1) (integer) 1  redis 127.0.0.1:6379> PFADD rediskey "mysql"  1) (integer) 1 //添加指定元素到 HyperLogLog 中。 redis 127.0.0.1:6379> PFCOUNT rediskey  (integer) 3

7. 發布訂閱

Redis 發布訂閱 (pub/sub) 是一種消息通信模式:發送者 (pub) 發送消息,訂閱者 (sub) 接收消息。

Redis 客戶端可以訂閱任意數量的頻道。

下圖展示了頻道 channel1 , 以及訂閱這個頻道的三個客戶端 —— client2 、 client5 和 client1 之間的關系:

一起來聊聊Redis有什么優勢和特點一起來聊聊Redis有什么優勢和特點

實例

以下實例演示了發布訂閱是如何工作的,需要開啟兩個 redis-cli 客戶端。

在我們實例中我們創建了訂閱頻道名為 runoobChat:

第一個 redis-cli 客戶端

redis 127.0.0.1:6379> SUBSCRIBE runoobChat  Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "runoobChat" 3) (integer) 1

現在,我們先重新開啟個 redis 客戶端,然后在同一個頻道 runoobChat 發布兩次消息,訂閱者就能接收到消息。

第二個 redis-cli 客戶端

redis 127.0.0.1:6379> PUBLISH runoobChat "Redis PUBLISH test" (integer) 1  redis 127.0.0.1:6379> PUBLISH runoobChat "Learn redis by runoob.com" (integer) 1  # 訂閱者的客戶端會顯示如下消息  1) "message" 2) "runoobChat" 3) "Redis PUBLISH test"  1) "message" 2) "runoobChat" 3) "Learn redis by runoob.com"

gif 演示如下:

  • 開啟本地 Redis 服務,開啟兩個 redis-cli 客戶端。
  • 第一個 redis-cli 客戶端輸入 SUBSCRIBE runoobChat,意思是訂閱 runoobChat 頻道。
  • 第二個 redis-cli 客戶端輸入 PUBLISH runoobChat “Redis PUBLISH test” 往 runoobChat 頻道發送消息,這個時候在第一個 redis-cli 客戶端就會看到由第二個 redis-cli 客戶端發送的測試消息。

一起來聊聊Redis有什么優勢和特點

8. 事務

Redis 事務可以一次執行多個命令, 并且帶有以下三個重要的保證:

  • 批量操作在發送 EXEC 命令前被放入隊列緩存。
  • 收到 EXEC 命令后進入事務執行,事務中任意命令執行失敗,其余的命令依然被執行。
  • 在事務執行過程,其他客戶端提交的命令請求不會插入到事務執行命令序列中。

一個事務從開始到執行會經歷以下三個階段:

  • 開始事務。
  • 命令入隊。
  • 執行事務。

實例

以下是一個事務的例子, 它先以 MULTI 開始一個事務, 然后將多個命令入隊到事務中, 最后由 EXEC 命令觸發事務, 一并執行事務中的所有命令:

redis 127.0.0.1:6379> MULTI OK  redis 127.0.0.1:6379> SET book-name "Mastering C++ in 21 days" QUEUED  redis 127.0.0.1:6379> GET book-name QUEUED  redis 127.0.0.1:6379> SADD tag "C++" "Programming" "Mastering Series" QUEUED  redis 127.0.0.1:6379> SMEMBERS tag QUEUED  redis 127.0.0.1:6379> EXEC 1) OK 2) "Mastering C++ in 21 days" 3) (integer) 3 4) 1) "Mastering Series"    2) "C++"    3) "Programming"

單個 Redis 命令的執行是原子性的,但 Redis 沒有在事務上增加任何維持原子性的機制,所以 Redis 事務的執行并不是原子性的。

事務可以理解為一個打包的批量執行腳本,但批量指令并非原子化的操作,中間某條指令的失敗不會導致前面已做指令的回滾,也不會造成后續的指令不做。

這是官網上的說明 From redis docs on transactions:

It’s important to note that even when a command fails, all the other commands in the queue are processed – Redis will not stop the processing of commands.

比如:

redis 127.0.0.1:7000> multi OK redis 127.0.0.1:7000> set a aaa QUEUED redis 127.0.0.1:7000> set b bbb QUEUED redis 127.0.0.1:7000> set c ccc QUEUED redis 127.0.0.1:7000> exec 1) OK 2) OK 3) OK

如果在 set b bbb 處失敗,set a 已成功不會回滾,set c 還會繼續執行。

9. 腳本

Redis 腳本使用 Lua 解釋器來執行腳本。 Redis 2.6 版本通過內嵌支持 Lua 環境。執行腳本的常用命令為 EVAL

redis 127.0.0.1:6379> EVAL "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second  1) "key1" 2) "key2" 3) "first" 4) "second"

10 GEO

Redis GEO 主要用于存儲地理位置信息,并對存儲的信息進行操作,該功能在 Redis 3.2 版本新增。

Redis GEO 操作方法有:

  • geoadd:添加地理位置的坐標。
  • geopos:獲取地理位置的坐標。
  • geodist:計算兩個位置之間的距離。
  • georadius:根據用戶給定的經緯度坐標來獲取指定范圍內的地理位置集合。
  • georadiusbymember:根據儲存在位置集合里面的某個地點獲取指定范圍內的地理位置集合。
  • geohash:返回一個或多個位置對象的 geohash 值。
redis> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania" (integer) 2 redis> GEODIST Sicily Palermo Catania "166274.1516" redis> GEORADIUS Sicily 15 37 100 km 1) "Catania" redis> GEORADIUS Sicily 15 37 200 km 1) "Palermo" 2) "Catania" redis>

11 Redis Stream

Redis Stream 是 Redis 5.0 版本新增加的數據結構。

Redis Stream 主要用于消息隊列(MQ,Message Queue),Redis 本身是有一個 Redis 發布訂閱 (pub/sub) 來實現消息隊列的功能,但它有個缺點就是消息無法持久化,如果出現網絡斷開、Redis 宕機等,消息就會被丟棄。

簡單來說發布訂閱 (pub/sub) 可以分發消息,但無法記錄歷史消息。

而 Redis Stream 提供了消息的持久化和主備復制功能,可以讓任何客戶端訪問任何時刻的數據,并且能記住每一個客戶端的訪問位置,還能保證消息不丟失。

Redis Stream 的結構如下所示,它有一個消息鏈表,將所有加入的消息都串起來,每個消息都有一個唯一的 ID 和對應的內容:

一起來聊聊Redis有什么優勢和特點

每個 Stream 都有唯一的名稱,它就是 Redis 的 key,在我們首次使用 xadd 指令追加消息時自動創建。

上圖解析:

  • Consumer Group :消費組,使用 XGROUP CREATE 命令創建,一個消費組有多個消費者(Consumer)。
  • last_delivered_id :游標,每個消費組會有個游標 last_delivered_id,任意一個消費者讀取了消息都會使游標 last_delivered_id 往前移動。
  • pending_ids :消費者(Consumer)的狀態變量,作用是維護消費者的未確認的 id。 pending_ids 記錄了當前已經被客戶端讀取的消息,但是還沒有 ack (Acknowledge character:確認字符)。

Redis 管道技術

Redis是一種基于客戶端-服務端模型以及請求/響應協議的TCP服務。這意味著通常情況下一個請求會遵循以下步驟:

  • 客戶端向服務端發送一個查詢請求,并監聽Socket返回,通常是以阻塞模式,等待服務端響應。
  • 服務端處理命令,并將結果返回給客戶端。

Redis 管道技術

Redis 管道技術可以在服務端未響應時,客戶端可以繼續向服務端發送請求,并最終一次性讀取所有服務端的響應。

推薦學習:Redis視頻教程

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
女口述第一次放进去的感受| 久久久国产精品亚洲一区| 玩弄中年熟妇正在播放| 旧芭乐视频官网下载地址IOS| 国产精品一亚洲AV日韩AV欧| YOUJIZZ中国少妇| 在线亚洲人成电影网站色WWW| 亚洲AV无码一区二区三区人| 天天澡天天揉揉AV无码| 人人妻人人做从爽精品| 男女狂进狂出动态图| 久久久久久久精品国产免费…| 国产真实强被迫伦姧女在线观看| 国产成人精品免费视频网页大全| 薄荷奶糖(1V2)笔趣| Chinese老女人老熟妇69| 中文无码乱人伦中文视频在线| 亚洲一区二区三区在线观看网站| 亚洲AV综合色区无码三区30p | 一本色道久久88综合日韩精品| 亚洲成色WWW成人网站| 无套内谢孕妇毛片免费看看| 熟女少妇丰满一区二区| 色偷拍 自怕 亚洲 10P| 日韩AV片无码一区二区不卡电影| 欧美日韩一区二区三区精品视频在线| 免费观看的国产大片APP下载| 精品久久香蕉国产线看观看亚洲| 国产精品自在线拍国产| 精品人妻一区二区三区视频 | 日韩精品人妻一区二区三区| 亚洲AV成人无码久久WWW| 午夜三级理论在线观看高清| 天堂影院一区二区三区四区| 亚洲精品乱码久久久久久蜜桃 | 肉体XXXXXⅠ8XXXX| 日韩精品无码观看视频免费| 亚欧免费无码AⅤ在线观看| 亚洲AV无码AV日韩AV网站不| 亚洲AV无码一区二区二三区软件| 亚洲AⅤ永久无码无人区电影| 伊人色综合九久久天天蜜桃 | 久久精品中文字幕无码| 人妻体内射精一区二区三区| 人妻无码中文字幕免费视频蜜桃| 午夜熟女插插XX免费视频| 中文无码VR最新无码AV专区| 国产chinese大学生Gay| 国产精品伦一区二区三级视频| 国产精品无码不卡一区二区三区| 国产免费拔擦拔擦8X高清在线人| 国产精品无码素人福利免费| 巨爆乳无码视频在线观看| 四虎永久在线精品无码视频| 无人区码一码二码三码区| 亚洲AV无码精品色午夜蜜芽 | 女人张开腿让男人桶爽免| 无码人妻视频一区二区三区| 午夜AV内射一区二区三区红桃视| 最新无码国产在线视频9299| 拔萝卜视频免费播放在线观看| 成人AV天堂一二三在线观看| 国产AV天堂亚洲国产AV麻豆 | 国产现实无码AV| 精品一区二区三区东京热| 狂躁美女BBBBBB视频| 四虎成人WWW成人影院| 中文乱码人妻系列一区二区| 国产精品自在线拍国产| 欧美熟妇另类久久久久久多毛| 亚洲V国产V天堂A无码二区 | 再深点灬舒服灬太大了添视频软件| 99这里只有精品| 丰满多毛的大隂户毛茸茸| 国精产品一区一区三区有限| 人妻AVAV中文系列久久| 无码精品视频一区二区三区| 亚洲精品欧美二区三区中文字幕| 成人性生交大片免费看| 韩漫漫画在线观看页面免费漫画入| 久久久久亚洲AV片无码V| 人妻AV一区二区| 亚洲中文无码永久在线电影| WWW无人区一码二码三码区别| 精产国品一二三产区区别在线观看 | 无码H黄肉动漫在线观看| H无遮挡H无码黄3D漫画| 国产爆乳无码一区二区麻豆 | 狠狠躁天天躁无码中文字幕图| 乱码精品一卡2卡二卡三| 人人妻人人澡人人爽欧美一区双 | 亚洲精品成人片在线播放| 中文字幕一区日韩精品| 护士被弄到高潮喷水抽搐| 你看桌子上都是你流的 | 成人白浆超碰人人人人| 男男暴菊GAY无套网站| 亚洲色欲综合天堂亚洲| 被C了一节课的林妙妙| 里番本子纯肉侵犯肉全彩无码 | 性欧美ⅩXX1819内谢| 中文字幕无码AV不卡一区| 高雅人妻被迫沦为玩物| 久久久久亚洲AV无码成人片麻豆 | 久久久综合九色综合鬼色| 亚洲成A人片在线观看无码3D| 国产精品 视频一区 二区三区| 久久精品国产亚洲AV日韩 | 久久精品国产只有精品66| 亚洲AV狠狠爱一区二区三区| 国产激情无码一区二区APP| 炕上光着腚压在女人身上| 亚洲国色天香卡2卡3卡4| 国产女人高潮抽搐喷水视频 | 少妇高潮潮喷到猛进猛出小说 | XX娇小嫩XX中国XX| 男生听到女生喘气是什么心理现象 | 日本强伦姧人妻一区二区| 亚洲人交乣女BBW| 差差漫画页面免费漫画欢迎你| 精品一区二区三区| 亚洲成AV不卡无码无码不卡 | 成年免费A级毛片免费看无码| 青草久久久国产线免费| 亚洲乱码日产精品M| 福建妹妹幼儿十岁左右| 日本又黄又爽GIF动态图| 亚洲人成人无码一区二区三区| 第一次处破女01免费观看 | 中文字幕肉感巨大的乳专区| 久久人人妻人人妻人人澡av| 婷婷色中文字幕综合在线| 99久热RE在线精品视频| 免费午夜无码18禁无码影视| 亚洲AV怡红院AV男人的天堂| 国产午夜成人免费看片| 小洁和公H文翁17| 国产亚洲精品在AV| 亚洲国产成人一区二区三区 | 色妺妺AⅤ爽爽影院偷拍| 抖抈APP入口免费| 免费看漫画在线成人漫画| 又大又粗弄得我好爽GIF| 国产一区二区三区精品视频| 日本动漫爆乳H动漫无遮挡| 草草永久地址发布页①| 色欲av蜜臀一区二区四区| 99久久无码一区人妻| 欧美亚洲日韩AⅤ在线观看| 一本大道东京热无码AⅤ| 老妇高潮潮喷到猛进猛出| 2019午夜福利不卡片在线| 久久精品人妻一区二区三区 | 午夜免费福利小电影| 精品高潮呻吟AV久久无码 | 丰满护士巨好爽好大乳小说| 我半夜摸妺妺的奶摸到高潮| 国产亚洲曝欧美不卡精品| 亚洲精品无码久久一线| 老奶奶BGMBGM人与自然| JAPANESE嫩21VIDE| 色欲丰满熟妇人妻av一区二区| 国产麻豆精品精东影业AV网站| 亚洲高清国产拍精品动图| 久久亚洲中文字幕精品一区| 亚洲国产精品成人一区二区在线 | 一本大道久久精品 东京热| 免费高清曰韩仑理| 成人4399看片HD免费| 午夜精品射精入后重之免费观看 | 国产成人乱色伦区| 日本边添边摸边做边爱小视频| 公车上双乳被老汉揉搓玩弄漫画| 西方37大但人文艺术A管77| 久久成人国产精品| 亚洲精品国产成人精品| 蜜桃AV秘 无码一区二区三欧| 亚洲伊人久久大香线蕉综合图片 | 精品无码国产污污污在线观看| 亚洲 另类 日韩 制服 无码| 久久精品麻豆日日躁夜夜躁| 97碰碰碰人妻无码视频| 免费观看人成影片| 成人黄网站片免费视频| 性BBBBBB裸体BBBBB开| 久久人人97超碰精品| 成 人 黄 色 网站 S色| 性偷窥TUBE凸凹视频| 美女无遮挡直播软件免费看| 粉嫩Av网站在线观看| 亚洲精品乱码久久久久久自慰 | 男人添女人下部高潮全视频| 丰满人妻无码使劲张开双腿AV| 亚洲AV伊人久久青青草原| 女人的选择HD中字| 国产精品日韩专区第一页| 一区二区三区精品偷拍| 免费AV片在线观看网址| 国产AV天堂无码一区二区三区| 亚洲一线产区二线产区区|