日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Memcached 缓存个体,对象,泛型,表

發(fā)布時(shí)間:2023/12/4 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Memcached 缓存个体,对象,泛型,表 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

最近,為提高數(shù)據(jù)查詢速度,想做點(diǎn)緩存,通過網(wǎng)上了解,覺得,最好使用的就是Memcached;下面簡單給大家介紹下Memcached;

?

?下面是兩位大牛關(guān)于Memcached的介紹;大家可以看看

?

http://zhoufoxcn.blog.51cto.com/792419/528212

?

http://leepiao.blog.163.com/blog/static/48503130201104103344851/

?如下是我的總結(jié):

Memcached是一個(gè)命令行窗口程序,可以在命令行窗口中啟動(dòng)也可以封裝在系統(tǒng)服務(wù)中啟動(dòng)。在啟動(dòng)Memcached時(shí)需要提供一些必須的參數(shù),指定Memcached運(yùn)行時(shí)監(jiān)聽的端口和最大使用的內(nèi)存大小等。如果緩存的數(shù)據(jù)大小超過指定內(nèi)存,那么Memcached就會(huì)按照LRU(Least Recently Used)算法自動(dòng)“刪除”不使用的緩存(標(biāo)記為失效),新增的緩存數(shù)據(jù)就可以使用這些標(biāo)記為失效的數(shù)據(jù)所占用的內(nèi)存,這樣就不用擔(dān)心Memcached超出所指定內(nèi)存的問題。此外,為了提高性能,在緩存數(shù)據(jù)過期后Memcached并不是從物理內(nèi)存中刪除緩存的數(shù)據(jù),僅僅在取出改數(shù)據(jù)的時(shí)候檢查它是否已經(jīng)過了有效期。
目前有多種平臺(tái)的Memcached版本,比如Linux、FreeBSD、Solaris (memcached 1.2.5以上版本)、Mac OS X及Windows平臺(tái),在Windows平臺(tái)上還有32位和64位版本。
Memcached有一套協(xié)議,利用這套協(xié)議可以對(duì)Memcached進(jìn)行數(shù)據(jù)存取和查看Memcached的狀態(tài),很多程序語言都依據(jù)這套協(xié)議來操作Memcached,比如PHP、Java、C、C++及C#等。
獲取了對(duì)應(yīng)平臺(tái)的Memcached版本就可以運(yùn)行Memcached了。在這里僅以Windows平臺(tái)上的32位Memcached為例

?

1 把memcached文件夾放在指定路徑,我選擇了C盤根目錄

2 使用管理員身份(切記)在命令行按照memcached;

?? memcached.exe -d install

3

在客戶端還可以通過telnet來查看和操作Memcached,前提是服務(wù)器端和客戶端都支持Telnet協(xié)議,在Windows7和Windows2008中默認(rèn)都不支持,需要在控制面板中安裝和啟用。
首先打開控制面板,然后點(diǎn)擊“打開或關(guān)閉Windows功能”,如下圖所示:
?

?


點(diǎn)擊“打開或關(guān)閉Windows功能”之后會(huì)看到當(dāng)前系統(tǒng)啟用的功能的狀態(tài),根據(jù)當(dāng)前機(jī)器選擇打開Telnet服務(wù)器端或者客戶端功能,如下圖所示:
?

?

?
經(jīng)過上面的操作之后就可以在客服端遠(yuǎn)程查看Memcached的狀態(tài)或者操作Memcached了。下面的命令就是連接到Memcached:
telnet localhost 11121
連接之后會(huì)出現(xiàn)一個(gè)命令行窗口,在這個(gè)命令行窗口中輸入"stats"就可以看到當(dāng)前Memcached的狀態(tài),如下就是剛剛啟動(dòng)的Memcached的狀態(tài)數(shù)據(jù):
STAT pid 852
STAT uptime 1399
STAT time 1300979378
STAT version 1.2.5
STAT pointer_size 32
STAT curr_items 0
STAT total_items 0
STAT bytes 0
STAT curr_connections 3
STAT total_connections 5
STAT connection_structures 4
STAT cmd_get 0
STAT cmd_set 0
STAT get_hits 0
STAT get_misses 0
STAT evictions 0
STAT bytes_read 23
STAT bytes_written 415
STAT limit_maxbytes 67108864
STAT threads 1
END
通過這個(gè)數(shù)據(jù)我們就可以了解Memcached的狀態(tài)了。
這些數(shù)據(jù)所代表的意義如下:
pid:32u,服務(wù)器進(jìn)程ID。?
uptime:32u, 服務(wù)器運(yùn)行時(shí)間,單位秒。?
time :32u, 服務(wù)器當(dāng)前的UNIX時(shí)間。
version :string, 服務(wù)器的版本號(hào)。?
curr_items :32u, 服務(wù)器當(dāng)前存儲(chǔ)的內(nèi)容數(shù)量 Current number of items stored by the server?
total_items :32u, 服務(wù)器啟動(dòng)以來存儲(chǔ)過的內(nèi)容總數(shù)。
bytes :64u, 服務(wù)器當(dāng)前存儲(chǔ)內(nèi)容所占用的字節(jié)數(shù)。
curr_connections :32u, 連接數(shù)量。?
total_connections :32u, 服務(wù)器運(yùn)行以來接受的連接總數(shù)。
connection_structures:32u, 服務(wù)器分配的連接結(jié)構(gòu)的數(shù)量。?
cmd_get :32u, 取回請(qǐng)求總數(shù)。?
cmd_set :32u, 存儲(chǔ)請(qǐng)求總數(shù)。?
get_hits :32u, 請(qǐng)求成功的總次數(shù)。
get_misses :32u, 請(qǐng)求失敗的總次數(shù)。
bytes_read :64u, 服務(wù)器從網(wǎng)絡(luò)讀取到的總字節(jié)數(shù)。
bytes_written :64u, 服務(wù)器向網(wǎng)絡(luò)發(fā)送的總字節(jié)數(shù)。
limit_maxbytes :32u, 服務(wù)器在存儲(chǔ)時(shí)被允許使用的字節(jié)總數(shù)。
上面的描述中32u和64u表示32位和64位無符號(hào)整數(shù),string表示是string類型數(shù)據(jù)。

?

?

.NET中應(yīng)用Memcached

?

下面是一個(gè)Enyim Memcached的例子:

緩存單體;對(duì)象,泛型;表都可以

需要引用dll?Memcached.ClientLibrary

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using Memcached.ClientLibrary;

using System.Collections;

namespace WindowsFormsApplication1

{

??? public partial class Form1 : Form

??? {

?

??????? public Form1()

??????? {

??????????? InitializeComponent();

??????????? SockIOPool pool = SockIOPool.GetInstance();

??????????? string[] servers = { "127.0.0.1:11211" };

??????????? pool.SetServers(servers);

??????????? pool.MinConnections = 3;

??????????? pool.MaxConnections = 5;

??????????? pool.InitConnections = 3;

??????????? pool.SocketConnectTimeout = 5000;

???? ???????pool.Initialize();

??????? }

?

??????? private void button1_Click(object sender, EventArgs e)

??????? {

?

??????????? MemcachedClient client = new MemcachedClient();

??????????? client.EnableCompression = false;

??????????? client.Set("key1", "單體測試");

??????????? MessageBox.Show("key1:單體測試");

??????????? //Person demo = new Person { UserId = 1, UserName = "李剛" };

??????????? //client.Set("demo", demo);

??????????? //client.Get("demo");

?

??????????? //Console.WriteLine("———————–Memcached Set 設(shè)置值————————–");

??????????? //client.Set("key1", "value1");

??????????? //Console.WriteLine(client.Get("key1"));

??????????? //Console.WriteLine("———————–Memcached Add 設(shè)置值————————–");

??????????? //client.Add("key2", "value2");

??????????? //Console.WriteLine(client.Get("key2"));

??????????? //client.Set("key2", "value1 value2");

??????????? //Console.WriteLine(client.Get("key2"));

??????????? //Console.WriteLine("———————–Memcached Replace 設(shè)置值————————–");

??????????? //client.Replace("key2", "value3");

??????????? //Console.WriteLine(client.Get("key2"));

?

??????????? //Console.WriteLine("———————–Memcached 鍵值是否存在————————–");

??????????? //if (client.KeyExists("key2"))

??????????? //{

??????????? //??? Console.WriteLine("鍵key2 存在");

??????????? //}

??????????? //if (client.KeyExists("hechen") == false)

??????????? //{

??????????? //??? Console.WriteLine("鍵hechen 不存在");

??????????? //}

?

??????????? //Console.WriteLine("———————–Memcached 刪除數(shù)據(jù)————————–");

??????????? //client.Add("key4", "value4");

??????????? //Console.WriteLine("key4==>" + client.Get("key4"));

??????????? //client.Delete("key4");

??????????? //if (!client.KeyExists("key4"))

??????????? //{

??????????? //??? Console.WriteLine("key4 已將刪除");

??????????? //}

?

??????????? //Console.WriteLine("———————–Memcached 數(shù)據(jù)過期————————–");

??????????? //client.Add("key5", "value5", DateTime.Now.AddMilliseconds(5000));

??????????? //Console.WriteLine(client.Get("key5"));

??????????? //System.Threading.Thread.Sleep(6000);

??????????? //Console.WriteLine("過期: " + client.Get("key5"));

??????? }

?

??????? private void button2_Click(object sender, EventArgs e)

??????? {

??????????? MemcachedClient client = new MemcachedClient();

??????????? txt01.Text = client.Get("key1").ToString();

??????? }

?

??????? private void button4_Click(object sender, EventArgs e)

??????? {

??????????? Person person = new Person { UserId = 1, UserName = "李剛" };

??????????? MemcachedClient client = new MemcachedClient();

??????????? client.EnableCompression = false;

??????????? client.Set("key2", person);

??????????? MessageBox.Show("key2:對(duì)象PersonUserId = 1, UserName =李剛");

??????? }

?

??????? private void button3_Click(object sender, EventArgs e)

??????? {

??????????? MemcachedClient client = new MemcachedClient();

??????????? object demo = client.Get("key2");

??????????? Person cc = demo as Person;

??????????? txt01.Text = cc.UserId.ToString() + ";" + cc.UserName.ToString();

??????? }

?

??????? private void button6_Click(object sender, EventArgs e)

??????? {

??????????? ArrayList arraylist = new ArrayList();

??????????? arraylist.Add("泛型集合測試1");

??????????? arraylist.Add("泛型集合測試2");

??????????? arraylist.Add("泛型集合測試3");

??????????? MemcachedClient client = new MemcachedClient();

??????????? client.EnableCompression = false;

??????????? client.Set("key3", arraylist);

??????????? MessageBox.Show("key3:泛型集合測試1,泛型集合測試2,泛型集合測試3");

??????? }

?

??????? private void button5_Click(object sender, EventArgs e)

??????? {

??????????? MemcachedClient client = new MemcachedClient();

??????????? object demo = client.Get("key3");

??????????? ArrayList arraylist = demo as ArrayList;

??????????? int count = arraylist.Count;

??????????? txt01.Text = arraylist[0].ToString() + ";" + arraylist[1].ToString() + ";" + arraylist[2].ToString() + ";";

??????? }

?

?? ?????private void button8_Click(object sender, EventArgs e)

??????? {

??????????? DataTable dt = new DataTable();

??????????? string str = "";

??????????? dt.Columns.Add("id");

??????????? dt.Columns.Add("name");

??????????? DataRow dr = dt.NewRow();

??????????? for (int i = 0; i < 3; i++)

??????????? {

??????????????? dr = dt.NewRow();

??????????????? dr["id"] = "00" + i.ToString();

??????????????? dr["name"] = "姓名" + i.ToString();

??????????????? dt.Rows.Add(dr);

??????????????? str += dr["id"] + "," + dr["name"] + ";";

??????????? }

?

??????????? MemcachedClient client = new MemcachedClient();

??????????? client.EnableCompression = false;

??????????? client.Set("key4", dt);

??????????? MessageBox.Show("key4:" + str);

?

??????? }

?

??????? private void button7_Click(object sender, EventArgs e)

??????? {

??????????? MemcachedClient client = new MemcachedClient();

??????????? object demo = client.Get("key4");

??????????? DataTable dt = demo as DataTable;

??????????? int count = dt.Rows.Count;

??????????? txt01.Text = dt.Rows[0][0].ToString() + "," + dt.Rows[0][1].ToString() + ";" + dt.Rows[1][0].ToString() + "," + dt.Rows[1][1].ToString() + ";" + dt.Rows[2][0].ToString() + "," + dt.Rows[2][1].ToString() + ";";

??????? }

?

??????

??? }

}

?

?

memcache 的限制??

memcache單個(gè)緩存值限制為1M(1000000bytes),超過這個(gè)限制的時(shí)候會(huì)出如下錯(cuò)誤。

ValueError: Values may not be more than 1000000 bytes in length; received 2000000 bytes

memcache的keys限制為250 bytes,超過這個(gè)長度會(huì)報(bào)錯(cuò)。

ValueError: Keys may not be more than 250 bytes in length, received 14670 bytes

memcache的時(shí)間設(shè)置沒限制,但服務(wù)器會(huì)自動(dòng)清理緩存,官方好像說過最長為1個(gè)月時(shí)間(3600*24*30)。

2.6.Memcache::add
2.5.1.說明
bool Memcache::add ( string $key , mixed $var [, int $flag [, int $expire ]]
) 添加一個(gè)要緩存的數(shù)據(jù)如果作為這個(gè)緩存的數(shù)據(jù)的鍵在服務(wù)器上還不存在的情況下,
2.5.2.參數(shù)
key 緩存數(shù)據(jù)的鍵 其長度不能超過250個(gè)字符
var 值,整型將直接存儲(chǔ),其他類型將被序列化存儲(chǔ) ,其值最大為1M

flag 是否使用 zlib 壓縮
,當(dāng)flag=MEMCACHE_COMPRESSED的時(shí)侯,數(shù)據(jù)很小的時(shí)候不會(huì)采用zlib壓縮,只有數(shù)據(jù)達(dá)到一定大小才對(duì)數(shù)據(jù)進(jìn)行zlib壓縮。(沒有具體的測試數(shù)據(jù)進(jìn)行壓縮的最小值是多少)
expire 過期時(shí)間,0 為永不過期,可使用 unix 時(shí)間戳格式或距離當(dāng)前時(shí)間的秒數(shù),設(shè)為秒數(shù)時(shí)不能大于 2592000(30
天)
2.5.3.返回值
成功返回 TRUE,失敗返回 FALSE,如果這個(gè)鍵已經(jīng)存在,其他方面memcache:;add()的行為與memcache::set相似
2.5.4.范例
<?
$memcache_obj = memcache_connect("localhost", 11211);
/* procedural API */
memcache_add($memcache_obj, ‘var_key‘, ‘test variable‘, FALSE, 30);
/* OO API */
$memcache_obj-add(‘var_key‘, ‘test variable‘, FALSE, 30);
?>

2.6.Memcache::replace
2.6.1.說明
bool Memcache::replace ( string $key , mixed $var [, int $flag [, int $expire
]] )
替換一個(gè)指定 已存在key 的的緩存變量內(nèi)容
2.6.2.參數(shù)
key 緩存數(shù)據(jù)的鍵, 其長度不能超過250個(gè)字符
var 值,整型將直接存儲(chǔ),其他類型將被序列化存儲(chǔ),其值最大為1M

flag 是否使用 zlib 壓縮
,當(dāng)flag=MEMCACHE_COMPRESSED的時(shí)侯,數(shù)據(jù)很小的時(shí)候不會(huì)采用zlib壓縮,只有數(shù)據(jù)達(dá)到一定大小才對(duì)數(shù)據(jù)進(jìn)行zlib壓縮。(沒有具體的測試數(shù)據(jù)進(jìn)行壓縮的最小值是多少)
expire 過期時(shí)間,0 為永不過期,可使用 unix 時(shí)間戳格式或距離當(dāng)前時(shí)間的秒數(shù),設(shè)為秒數(shù)時(shí)不能大于 2592000(30
天)
2.6.3.返回值
成功返回 TRUE,失敗返回 FALSE。
2.6.4.范例
<?php
$memcache_obj = memcache_connect(‘memcache_host‘, 11211);
/* procedural API */
memcache_replace($memcache_obj, "test_key", "some variable", FALSE, 30);
/* OO API */
$memcache_obj-replace("test_key", "some variable", FALSE, 30);
?>

2.7.Memcache::set
2.7.1.說明
bool Memcache::set ( string $key , mixed $var [, int $flag [, int $expire ]]
) 設(shè)置一個(gè)指定 key 的緩存變量內(nèi)容
2.7.2.參數(shù)
key 緩存數(shù)據(jù)的鍵, 其長度不能超過250個(gè)字符
var 值,整型將直接存儲(chǔ),其他類型將被序列化存儲(chǔ),其值最大為1M

flag 是否使用 zlib 壓縮
,當(dāng)flag=MEMCACHE_COMPRESSED的時(shí)侯,數(shù)據(jù)很小的時(shí)候不會(huì)采用zlib壓縮,只有數(shù)據(jù)達(dá)到一定大小才對(duì)數(shù)據(jù)進(jìn)行zlib壓縮。(沒有具體的測試數(shù)據(jù)進(jìn)行壓縮的最小值是多少)
expire 過期時(shí)間,0 為永不過期,可使用 unix 時(shí)間戳格式或距離當(dāng)前時(shí)間的秒數(shù),設(shè)為秒數(shù)時(shí)不能大于 2592000(30
天)
2.7.3.返回值
成功返回 TRUE,失敗返回 FALSE。
2.7.4.范例
<?php
/* procedural API */
/* connect to memcached server */
$memcache_obj = memcache_connect(‘memcache_host‘, 11211);
/*
set value of item with key ‘var_key‘
using 0 as flag value, compression is not used
expire time is 30 second
*/
memcache_set($memcache_obj, ‘var_key‘, ‘some variable‘, 0, 30);
echo memcache_get($memcache_obj, ‘var_key‘);

/* OO API */
$memcache_obj = new Memcache;
/* connect to memcached server */
$memcache_obj-connect(‘memcache_host‘, 11211);
/*
set value of item with key ‘var_key‘, using on-the-fly compression
expire time is 50 seconds
*/
$memcache_obj-set(‘var_key‘, ‘some really big variable‘, MEMCACHE_COMPRESSED, 50);
echo $memcache_obj-get(‘var_key‘);
?>

2.8.Memcache::get
2.8.1.說明
string Memcache::get ( string $key [, int $flags ] )
array Memcache::get ( array $keys [, array $flags ] )
獲取某個(gè) key 的變量緩存值
2.8.2.參數(shù)
key 緩存值的鍵

flags 如果是傳址某個(gè)變量,獲取緩存值被set或是add的flag結(jié)果將被存于該變量
2.8.3.返回值
返回緩存的指定 key 的變量內(nèi)容或者是在失敗或該變量的值不存在時(shí)返回 FALSE
如果傳出的key的數(shù)組中的key都不存在,返回的結(jié)果是一個(gè)空數(shù)組,反之則返回key與緩存值相關(guān)聯(lián)的關(guān)聯(lián)數(shù)組
2.8.4.范例

/* procedural API */
$memcache_obj = memcache_connect(‘memcache_host‘, 11211);
$var = memcache_get($memcache_obj, ‘some_key‘);
/* OO API */
$memcache_obj = new Memcache;
$memcache_obj-connect(‘memcache_host‘, 11211);
$var = $memcache_obj-get(‘some_key‘);
/*
You also can use array of keys as a parameter.
If such item wasn‘t found at the server, the result
array simply will not include such key.
*/
/* procedural API */
$memcache_obj = memcache_connect(‘memcache_host‘, 11211);
$var = memcache_get($memcache_obj, Array(‘some_key‘, ‘a(chǎn)nother_key‘));
//如果some_key,another_key不存在 $var = array();
//如果some_key,another_key存在???? $var = array(‘some_key‘=‘緩存值‘, ‘a(chǎn)nother_key‘=‘緩存值‘);
/* OO API */
$memcache_obj = new Memcache;
$memcache_obj-connect(‘memcache_host‘, 11211);
$var = $memcache_obj-get(Array(‘some_key‘, ‘second_key‘));
?>


2.9.Memcache::delete
2.9.1.說明
bool Memcache::delete ( string $key [, int $timeout ] )
刪除某一個(gè)變量的緩存
2.9.2.參數(shù)
key???? 緩存的鍵 鍵值不能為null和‘’,當(dāng)它等于前面兩個(gè)值的時(shí)候php會(huì)有警告錯(cuò)誤。

timeout 刪除這項(xiàng)的時(shí)間,如果它等于0,這項(xiàng)將被立刻刪除反之如果它等于30秒,那么這項(xiàng)被刪除在30秒內(nèi)
2.9.3.返回值
成功返回 TRUE,失敗返回 FALSE。
2.9.4.范例
<?php
/* procedural API */
$memcache_obj = memcache_connect(‘memcache_host‘, 11211);
/* after 10 seconds item will be deleted by the server */
memcache_delete($memcache_obj, ‘key_to_delete‘, 10);
/* OO API */
$memcache_obj = new Memcache;
$memcache_obj-connect(‘memcache_host‘, 11211);
$memcache_obj-delete(‘key_to_delete‘, 10);
?>

?

轉(zhuǎn)載于:https://www.cnblogs.com/panshengqiang/p/3605599.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的Memcached 缓存个体,对象,泛型,表的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产裸体美女永久免费无遮挡 | 91久久国产视频 | 一区二区三区四区视频 | 另类第一页 | 日韩av影片在线观看 | 亚洲综合套图 | 日韩免费高清 | 日韩免费中文字幕 | 自拍亚洲综合 | 国产黄色一区二区三区 | 日韩欧美三级视频 | 国产片久久 | 日韩一级免费看 | 亚洲永久免费网站 | 午夜精品美女久久久久av福利 | 欧洲av在线 | 人操人人| 亚洲免费在线视频 | 日本性猛交 | 亚洲成人精品网 | 高清18麻豆 | 欧美激情精品久久久久久 | 国产精品爽爽爽 | 成人激情av | 潘甜甜在线 | 九一成人网 | 就要操就要射 | 午夜不卡在线 | 国产成人精品一区二区在线观看 | 91一区在线观看 | 婷婷激情影院 | 男女深夜福利 | 亚洲av无码乱码在线观看富二代 | 福利视频在线导航 | 蜜桃久久久久久久 | 日韩亚洲精品在线 | 亚洲涩情 | 国产一区不卡在线 | 色网综合 | 五月激情婷婷综合 | 91美女在线视频 | 中出在线视频 | 黄91在线观看 | 红桃视频91| 深爱婷婷| 成人性做爰aaa片免费看不忠 | 大地资源中文在线观看免费版 | 中文字幕网伦射乱中文 | 亚洲影视中文字幕 | 国产精品久久一区二区三区动 | 久久资源在线 | 国产成人无码精品久久久电影 | 国产精品丝袜在线观看 | 夜夜骑日日操 | 色婷婷av久久久久久久 | 香蕉a| 欧美三级日本三级 | 美女福利影院 | 短视频在线观看 | 丰满少妇被猛烈进入无码 | 亚洲大乳| 女女互慰吃奶互揉调教捆绑 | 人妻熟女一区二区aⅴ水 | 我和公激情中文字幕 | 丰满人妻一区二区三区53视频 | 日韩黄色av网站 | 日本免费一区二区三区四区 | 三上悠亚中文字幕在线播放 | 久久九九久久九九 | 国产在线观 | 91麻豆免费视频 | 国产免费脚交足视频在线观看 | 中国妇女做爰视频 | av一区二区三区四区 | 日本高清视频免费观看 | 日本毛片在线 | 美女又爽又黄免费视频 | 99re这里都是精品 | 人人妻人人澡人人爽人人精品 | 精品成人免费一区二区在线播放 | 日本少妇电影 | 日韩国产专区 | 人人澡人人射 | 国模吧无码一区二区三区 | 宅男av| 国产一区二区电影 | 国产高清一级片 | 亚洲黄色一级大片 | 午夜精品电影 | 日韩一区欧美 | 国产精品久久久久久一区二区 | 欧美亚洲精品一区 | 激情欧美综合 | 日韩中文字幕免费 | 毛片在线网 | 精品自拍偷拍 | 天堂岛av| 18成人在线观看 | 色人阁网站 |