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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Redis: under the hood---转载

發布時間:2025/4/5 数据库 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis: under the hood---转载 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://pauladamsmith.com/articles/redis-under-the-hood.html#redis-under-the-hood

How does the?Redis?server work?

I was curious to learn more about Redis’s internals, so I’ve been familiarizing myself with the source, largely by reading and jumping around in Emacs. After I had peeled back enough of the onion’s layers, I realized I was trying to keep track of too many details in my head, and it wasn’t clear how it all hung together. I decided to write out in narrative form how an instance of the Redis server starts up and initializes itself, and how it handles the request/response cycle with a client, as a way of explaining it to myself, hopefully in a clear fashion. Luckily, Redis has a nice, clean code base that is easy to read and follow along. Armed with a?TAGS?file, my?$EDITOR, and GDB, I set out to see how it all works under the hood. (Incidentally, I was working with the Redis code base as of?commit b4f2e41. Of course, internals such as I outline below are subject to change. However, the broad architecture of the server is unlikely to change very much, and I tried to keep that in mind as I went along.)

This article examines server startup and takes a high-level view of the request/response processing cycle. In a?subsequent article, I’ll dive in to greater detail and trace a simple?SET/GET?command pair as they make their way through Redis.

  • Redis: under the hood
    • Startup
      • Beginning global server state initialization
      • Setting up command table
      • Loading config file
      • initServer()
        • Shared objects
          • Shared integers
        • Event loop
        • Databases
        • TCP socket
        • Server cron
        • Registering connection handler with event loop
        • Opening the AOF
      • Back up to?main()
        • Restoring data
        • Event loop setup
        • Entering the event loop
    • Processing a request & returning a response
      • Handling a new connection
      • Reading a command from a client
      • Executing the command and responding
    • Summary
    • Next time — tracing a?SET?and?GET

Startup

Let’s begin with the?main()?function in?redis.c.

Beginning global server state initialization

First,?initServerConfig()?is called. This partially initializes a variable?server, which has the type?struct redisServer, that serves as the global server state.

// redis.h:338 struct redisServer {pthread_t mainthread;int port;int fd;redisDb *db;// ... };// redis.c:69 struct redisServer server; /* server global state */

There are a huge number of members in this struct, but they generally fall into the following categories:

  • general server state
  • statistics
  • configuration from config file
  • replication
  • sort parameters
  • virtual memory config, state, I/O threads, & stats
  • zip structure
  • event loop helpers
  • pub/sub

For example, this struct includes members that map to options in the configuration file (usually named?redis.conf) such as the port the server listens on and how verbose logging should be, pointers to linked lists of connected clients and slave Redis servers as well as the Redis database(s) itself, and counters for statistics like the number of commands processed since startup.

initServerConfig()?provides default values for the members that can be configured by the user via the?redis.conf?config file.

Setting up command table

The next thing?main()?does is sort the table of Redis commands. These are defined in a global variable?readonlyCommandTable?which is an array of?struct redisCommands.

// redis.c:70 struct redisCommand *commandTable; struct redisCommand readonlyCommandTable[] = {{"get",getCommand,2,REDIS_CMD_INLINE,NULL,1,1,1},{"set",setCommand,3,REDIS_CMD_BULK|REDIS_CMD_DENYOOM,NULL,0,0,0},{"setnx",setnxCommand,3,REDIS_CMD_BULK|REDIS_CMD_DENYOOM,NULL,0,0,0},{"setex",setexCommand,4,REDIS_CMD_BULK|REDIS_CMD_DENYOOM,NULL,0,0,0},{"append",appendCommand,3,REDIS_CMD_BULK|REDIS_CMD_DENYOOM,NULL,1,1,1},// ... };// redis.h:458 typedef void redisCommandProc(redisClient *c); // ... struct redisCommand {char *name;redisCommandProc *proc;int arity;int flags;// ... };

The read-only table is ordered in source code so that commands are grouped by category, such as string commands, list commands, set commands, etc., to make it easier for a programmer to scan the table for similar commands. The sorted table of commands is pointed to by the global variable?commandTable, and is used to lookup Redis commands with a standard binary search (lookupCommand(), which returns a pointer to a?redisCommand).

Loading config file

main()?moves on to processing command-line options given by the user starting up the redis-server executable. Currently, there is only a single argument that Redis takes — aside from the usual version?-vand help?-h?flags — which is a path to a config file. If the path is given, Redis loads the config file and overrides any defaults already set by?initServerConfig()?by calling?loadServerConfig(). This function is fairly straightforward, looping over each line in the config file and converting values that match directive names to appropriate types for the matching member in the?serverstruct. At this point, Redis will daemonize and detach from the controlling terminal if it has been configured to do so.

initServer()

initServer()?finishes the job of initializing the?server?struct that was begun by?initServerConfig(). First, it sets up signal handling (SIGHUP?and?SIGPIPE?signals are ignored — there is an opportunity to improve Redis by adding the ability to reload its config file when it receives a?SIGHUP, in the fashion of other daemons), including printing a stacktrace if the server receives a?SIGSEGV?(and other related signals), see?segvHandler().

A number of doubly-linked lists (see?adlist.h) are created to keep track of clients, slaves, monitors (a client that has sent theMONITOR?command), and an object free list.

Shared objects

One interesting thing Redis does is create a number of shared objects, which are accessible via the global?shared?struct. Common Redis objects that are required by many different commands, response strings and error messages, for example, can be shared without having to allocate them each time, saving memory, with the tradeoff of a bit more initialization effort at startup time.

// redis.c:662 shared.crlf = createObject(REDIS_STRING,sdsnew("\r\n")); shared.ok = createObject(REDIS_STRING,sdsnew("+OK\r\n")); shared.err = createObject(REDIS_STRING,sdsnew("-ERR\r\n")); shared.emptybulk = createObject(REDIS_STRING,sdsnew("$0\r\n\r\n")); // ...
Shared integers

The greatest impact in terms of memory savings with shared objects comes from a large pool of shared integers.

// redis.c:705 for (j = 0; j < REDIS_SHARED_INTEGERS; j++) {shared.integers[j] = createObject(REDIS_STRING,(void*)(long)j);shared.integers[j]->encoding = REDIS_ENCODING_INT; }

createSharedObjects()?creates an array of the first 10,000 non-negative integers as Redis objects (strings with an integer encoding). Various Redis objects like strings, sets, and lists often contain many small integers (for IDs or counters), and they can reuse the same objects already allocated in memory, for a large potential savings. One could imagine the constant that defines the number of shared integers to be created,?REDIS_SHARED_INTEGERS, being exposed to configuration to give users the opportunity, based on knowledge of their applications and needs, to increase the number of shared integers for greater memory savings. The tradeoff is that Redis statically allocates slightly more memory at startup time, but this would likely be a small amount compared to the overall typical database sizes and potential savings.

Event loop

initServer()?continues by creating the core event loop, calling?aeCreateEventLoop()?(see?ae.c) and assigning the result to the?elmember of?server.

ae.h?provides a platform-independent wrapper for setting up I/O event notification loops, which usesepoll?on Linux,?kqueue?on BSD, and falls back to?select?if the respective first choice is not available.) Redis’s event loop polls for new connections and I/O events (reading requests from and writing responses to a socket), being triggered when a new event arrives. This is what makes Redis so responsive, it can serve thousands of clients simultaneously without blocking while individual requests are processed and responded to.

Databases

initServer()?also initializes a number of?redisDb?objects, which are structs that encapsulate the details of a particular Redis database, including tracking expiring keys, keys that are blocking (either from a?B{L,R}POPcommand or from I/O), and keys that are being watched for check-and-set. (By default there are 16 separate databases, which can be thought of as namespaces within a Redis server.)

TCP socket

initServer()?is where the socket that Redis listens for connections (by default, bound to port 6379) is set up. Another Redis-local wrapper,?anet.h, defines?anetTcpServer()?and a number of other functions that simplify the usual complexity of setting up a new socket, binding, and listening to a port.

// redis.c:791 server.fd = anetTcpServer(server.neterr, server.port, server.bindaddr); if (server.fd == -1) {redisLog(REDIS_WARNING, "Opening TCP port: %s", server.neterr);exit(1); }

Server cron

initServer()?further allocates various dicts and lists for databases and for pub/sub, resets stats and various flags, and notes the UNIX timestamp of the server start time. It registers?serverCron()?with the event loop as a time event, executing that function once every 100 milliseconds. (This is a bit tricky, because initially,?serverCron()?is set to run in 1 millisecond by?initServer(), in order to have the cron cycle start right away with the server startup, but then the return value of?serverCron(), which is 100, is plugged in to the calculation of the next time the time event process should be handled.)

serverCron()?performs a number of periodic tasks for Redis, including verbose logging of database size (# of keys and memory used) and connected clients, resizing hash tables, closing idle/timed-out client connections, performing any post-background save or AOF rewrite cleanup, kicking off a background save if the save conditions as configured have been met (so many keys changed in so many seconds), calculating LRU information and dealing with expired keys (Redis only expires a few timed-out keys per cron cycle, using a adaptive, statistical method to avoid tying up the server, but will get more aggressive if expiring keys can help avoid out-of-memory situations), swapping out values to disk if virtual memory is enabled, and syncing with a master if this server is a slave.

Registering connection handler with event loop

Crucially,?initServer()?hooks up the event loop with the server’s TCP socket by registering the socket’s descriptor, registering the?acceptHandler()?function to be called when a new connection is accepted. (More on this below in the “Processing a request” section.)

// redis.c:821 if (aeCreateFileEvent(server.el, server.fd, AE_READABLE,acceptHandler, NULL) == AE_ERR) oom("creating file event");

Opening the AOF

initServer()?creates or opens the append-only file (AOF), it the server was configured to use it.

// redis.c:824 if (server.appendonly) {server.appendfd = open(server.appendfilename,O_WRONLY|O_APPEND|O_CREAT,0644);

Finally,?initServer()?initializes Redis’s virtual memory system, again, if the server had been configured for it.

Back up to?main()

If the server was configured to daemonize, Redis will now try to write out a pid file (the path of which is configurable, but defaults to?/var/run/redis.pid).

At this point, the server has started up, and Redis will log this fact to its log file. However, there’s still a bit more to do in?main()before Redis is fully ready.

Restoring data

If there is an AOF or a database dump file (eg.,?dump.rdb), it will be loaded, restoring data to the server from a previous session. (If both exist, the AOF takes priority.)

// redis.c:1452 if (server.appendonly) {if (loadAppendOnlyFile(server.appendfilename) == REDIS_OK)redisLog(REDIS_NOTICE,"DB loaded from append only file: %ld seconds",time(NULL)-start); } else {if (rdbLoad(server.dbfilename) == REDIS_OK)redisLog(REDIS_NOTICE,"DB loaded from disk: %ld seconds",time(NULL)-start); }

The server is now ready to start accepting requests.

Event loop setup

To finish up, Redis registers a function to be called each time it enters the event loop,?beforeSleep()?(since the process essentially goes to sleep while it waits to be notified of events).?beforeSleep()?does two things: it deals with serving clients that have requested keys that were swapped to disk if the virtual memory system was enabled, and it flushes the AOF to disk. The writing of the AOF is handled by?flushAppendOnlyFile(). The function encapsulates some tricky logic about flushing the buffer that holds pending AOF writes (the frequency of which is configurable by the user).

Entering the event loop

Redis now enters the main event loop by calling?aeMain(), with the argument?server.el?(remember, this member contains a pointer to an?aeEventLoop). If there are any time (i.e., server cron) or file events to process each time through the loop, their respective handler functions will be called.?aeProcessEvents()?encapsulates this logic — time events are handled by custom logic, whereas file events are handled by the underlying?epoll?or?kqueue?or?select?I/O event notification system.

Because of Redis’s need to respond to time events as well as file or I/O events, it implements a custom event/polling loop,aeMain(). By checking to see if any time events need processing, and utilizing file event notification, the event loop can efficiently sleep until there is work to be done, and not tie up the CPU in a tight?while?loop.

Processing a request & returning a response

We are now inside Redis’s main event polling loop, listening on a port and waiting for clients to connect. It’s time to look at how Redis processes a command request.

Handling a new connection

Back under?initServer(), Redis registered?acceptHandler()?to be called when there was an I/O event associated with the file descriptor of the socket the server is listening to (i.e., the socket has data waiting to be read or written).?acceptHandler()?creates a client object — pointer to a?redisClient, a struct defined in?redis.h?— to represent a new client connection.

// networking.c:347 cfd = anetAccept(server.neterr, fd, cip, &cport); if (cfd == AE_ERR) {redisLog(REDIS_VERBOSE,"Accepting client connection: %s", server.neterr);return; } redisLog(REDIS_VERBOSE,"Accepted %s:%d", cip, cport); if ((c = createClient(cfd)) == NULL) {redisLog(REDIS_WARNING,"Error allocating resoures for the client");close(cfd); /* May be already closed, just ingore errors */return; }

createClient()?is called to allocate and initialize the client object. It selects database 0 by default (since there has to be at least one Redis db per server), and associates the client file descriptor generated by?accept(2)?in?acceptHandler()?with the client object. Other flags and members are initialized, and finally the client is appended to the global list of clients being tracked byserver.clients. The key thing Redis does in?createClient()?is registering a handler with the event loop, the functionreadQueryFromClient(), for when there is data from the client connection to be read.

// networking.c:20 if (aeCreateFileEvent(server.el,fd,AE_READABLE, readQueryFromClient, c) == AE_ERR) {close(fd);zfree(c);return NULL; }

Reading a command from a client

readQueryFromClient()?is called by the main event loop when the client makes a command request. (If you are debugging with GDB, this is a good function to set as a breakpoint.) It reads it as much as it can of the command — up to 1024 bytes — to a temporary buffer, then appends it to a client-specific query buffer. This allows Redis to process commands where the payload (command name plus arguments) is larger than 1024 bytes, or because of I/O reasons have been split up into multiple read events. It then calls?processInputBuffer(), passing the client object as an argument.

// networking.c:754 void readQueryFromClient(aeEventLoop *el, int fd, void *privdata, int mask) {redisClient *c = (redisClient*) privdata;char buf[REDIS_IOBUF_LEN];int nread;// ...nread = read(fd, buf, REDIS_IOBUF_LEN);// ...if (nread) {size_t oldlen = sdslen(c->querybuf);c->querybuf = sdscatlen(c->querybuf, buf, nread);c->lastinteraction = time(NULL);/* Scan this new piece of the query for the newline. We do this * here in order to make sure we perform this scan just one time * per piece of buffer, leading to an O(N) scan instead of O(N*N) */if (c->bulklen == -1 && c->newline == NULL)c->newline = strchr(c->querybuf+oldlen,'\n');} else {return;}Processinputbuffer(c); }

processInputBuffer()?parses the raw query from the client into arguments for execution of a Redis command. It first has to contend with the possibility that the client is blocked in a?B{L,R}POP?command, and bails early if that is the case. The function then parses the raw query buffer into arguments, creating Redis string objects of each and storing them in an array on the client object. The query is in the form of the?Redis protocol.?processInputBuffer()?is really a protocol parser, calling back toprocessCommand()?to fully parse the query. Somewhat confusingly, the source code comments describe parsing the “multi bulk command type,” an alternative protocol originally meant for commands like?MSET, but it actually is now the main Redis protocol for all commands. It is binary-safe and easy to parse and debug. (Note: this code has been refactored for the upcoming 2.2 release and is a bit easier to follow.) Now it’s time to actually execute the command the client has sent, by callingprocessCommand()?on the client object.

processCommand()?takes the arguments of a command from a client and executes it. Before it gets to the actual execution of the command, it performs a number of checks — if any check fails, it appends a error message to the client object’s reply list and returns to the caller,?processInputBuffer(). After handling the?QUIT?command as a special case (in order to shut down the client safely),?processCommand()?looks up the command name in the?commandTable?that was previously set up during Redis’s start up cycle. If it’s an unknown command, or the client got the arity of the command wrong, it’s an error. While it’s not commonly used, Redis can be configured to require a password to authenticate a client before it will accept commands, and this is the stage where Redis will check if the client is authenticate, and will set an error if not. If Redis is configured to use up to a maximum amount of memory, it will at this point try to free up memory if it can (be freeing objects from the free list and removing expired keys), otherwise if the server is over the limit, it won’t process commands with the?REDIS_CMD_DENYOOM?flag set (mainly writes like?SET,INCR,?RPUSH,?ZADD, etc.), again, an error. One final check Redis makes is that a client can only issue?SUBSCRIBE?or?UNSUBSCRIBEcommands while there are outstanding channels subscribed to, otherwise, it’s an error. If all the checks have been passed, the command will be executed, by calling?call()?with the client object and the command object as arguments.

Executing the command and responding

call(), gets a pointer to function of type?struct redisCommandProc, from the?proc?member of the?command?object, which takes a single argument, that of a client object. The Redis command procedure is called.

// redis.c:864 void call(redisClient *c, struct redisCommand *cmd) {long long dirty;dirty = server.dirty;cmd->proc(c);dirty = server.dirty-dirty; } // ...

Write commands, like?SET?and?ZADD, make the server “dirty,” in other words, the server is marked as having pages in memory that have changed. This is important for the automatic save process, which keeps track of how many keys have changed in a certain period, or the writing to the AOF. The function callsfeedAppendOnlyFile()?if use of the AOF has been enabled, which writes out the command buffer from the client to the AOF, so the command can be replayed. (It translates commands that set a relative key expiration to an absolute expiration, but otherwise it basically copies the command as it came in from the client, see?catAppendOnlyGenericCommand().) If any slaves are connected,?call()?will send the command to each of them to be executed locally, see?replicationFeedSlaves(). Likewise, if any clients are connected and have issued the?MONITOR?command, Redis will send a representation of the command, prefixed with a timestamp, see?replicationFeedMonitors().

// redis.c:871 (call() cont.'d)// ...if (server.appendonly && dirty)feedAppendOnlyFile(cmd,c->db->id,c->argv,c->argc);if ((dirty || cmd->flags & REDIS_CMD_FORCE_REPLICATION) &&listLength(server.slaves))replicationFeedSlaves(server.slaves,c->db->id,c->argv,c->argc);if (listLength(server.monitors))replicationFeedMonitors(server.monitors,c->db->id,c->argv,c->argc);server.stat_numcommands++; }

Control returns to the caller,?processCommand(), which resets the client object for subsequent commands.

As mentioned, each Redis command procedure is itself responsible for setting the response to be sent to the client. AfterreadQueryFromClient()?exits and Redis returns the to event loop in?aeMain(),?aeProcessEvents()?will pick up the waiting response in the write buffer and will copy it to the socket the client is connected on.

And that’s it! The response has been sent, and both client and server are back to a state where they can respectively emit and process more Redis commands.

Summary

Redis starts up by initializing a global server state variable, and reading in an optional configuration file to override any defaults. It sets up a global command table that connects command names with the actual function that implements the command. It creates an event loop using the best available underlying system library for event/readiness notification, and registers a handler function for when there is a new client socket connection to accept. It also registers a periodic (i.e., time-based) event handler for dealing with?cron-like tasks like key expiry that need to be addressed outside the regular client-handling path. Once a client has connected, a function is registered on the event loop for being notified when the client has data to be read (i.e., a query for a command). The client’s query is parsed and a command handler is called to execute the command and write the response back to the client (the writing of data to the client is also handled by the event-notification loop). The client object is reset and server is ready to process more queries.

Next time — tracing a?SET?and?GET

I’ll follow-up this article with one that takes a close look at the processing of two commands,?SET?and?GET, by stepping through the implementation of each command’s procedure and examining the data structures Redis uses to store and index data.?March 15, 2011:?here it is.

—Paul Smith?(follow me on the Twitter)

Thanks to pietern on?#redis?for feedback on a draft of this article

October 18, 2010

轉載于:https://www.cnblogs.com/davidwang456/p/3453103.html

總結

以上是生活随笔為你收集整理的Redis: under the hood---转载的全部內容,希望文章能夠幫你解決所遇到的問題。

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

东方av在线免费观看 | 免费看黄色小说的网站 | 日本中文在线观看 | av电影av在线 | 91精品国产福利在线观看 | 亚洲电影网站 | 天天躁天天躁天天躁婷 | 玖玖在线免费视频 | 久久国产精品偷 | av在线色| 99国产一区二区三精品乱码 | 亚洲午夜大片 | 丁香花在线观看免费完整版视频 | 婷婷社区五月天 | 国产精品综合久久久久 | 久久99电影 | 99精品国产一区二区三区麻豆 | wwxxxx日本 | 高清有码中文字幕 | 日韩专区在线播放 | 在线观看国产永久免费视频 | av不卡网站| 久久福利电影 | 国产午夜小视频 | 天天干天天碰 | 国产精品永久免费视频 | 成片免费观看视频大全 | 91网址在线观看 | 黄色avwww| 免费在线一区二区三区 | 伊人永久| 三级av中文字幕 | 久久精品综合 | 免费三级黄 | 色综合天天综合 | 91免费在线看片 | 久草精品视频在线看网站免费 | 四虎精品成人免费网站 | 日韩在线影视 | 在线 国产 亚洲 欧美 | 国产美女视频网站 | 色婷婷久久久 | 亚洲人人精品 | 婷婷深爱网 | 狂野欧美激情性xxxx | 婷婷丁香激情综合 | 国产美腿白丝袜足在线av | 99这里有精品 | 制服丝袜在线 | 亚洲精品视频在线播放 | 国内精品久久久久国产 | 97碰碰精品嫩模在线播放 | 男女全黄一级一级高潮免费看 | 久久久久久亚洲精品 | 91理论片午午伦夜理片久久 | 狠狠色丁香婷婷综合久小说久 | 精品久久美女 | 色偷偷网站视频 | 国产午夜免费视频 | www.久久成人| 成人av在线看 | 激情综合网色播五月 | 日韩精品一区二区三区在线视频 | 最近免费观看的电影完整版 | 美女久久99 | 日韩久久久| 欧美日韩一二三四区 | 欧美色操 | 欧洲亚洲国产视频 | 天天色.com | 午夜视频免费 | 午夜视频免费播放 | 亚洲国产精久久久久久久 | h网站免费在线观看 | 最新av在线播放 | 在线免费三级 | av片子在线观看 | 亚洲国产精品500在线观看 | 97狠狠干 | 亚洲成a人片在线观看网站口工 | 免费精品国产va自在自线 | 免费三级av | 国产中文字幕国产 | 欧美成人精品三级在线观看播放 | 91在线中文| 国模精品一区二区三区 | 三级av黄色 | 91中文字幕一区 | 伊人婷婷色| 国产成人精品一区二区三区免费 | 久久99久久99精品免视看婷婷 | 久久不见久久见免费影院 | 久久精品国产一区二区三区 | 久久午夜色播影院免费高清 | 久久99精品久久久久久秒播蜜臀 | 国产精品国产三级国产aⅴ9色 | 91mv.cool在线观看 | 精品国产三级a∨在线欧美 免费一级片在线观看 | 黄色av影院 | 国产综合视频在线观看 | 久久久国产影视 | 亚洲夜夜爽 | 亚洲日本精品视频 | 色综合久久综合网 | 中国一级片在线播放 | 欧美人牲 | 久久九九国产视频 | 91九色在线视频观看 | 色视频在线免费观看 | 激情视频亚洲 | 国产视频不卡 | 国产又粗又猛又色又黄视频 | 国产色啪 | 免费福利影院 | 97在线超碰 | 国产精品视频久久 | 一本色道久久综合亚洲二区三区 | 六月丁香激情综合 | 精品99在线观看 | 欧美做受高潮电影o | 中文字幕激情 | 久久狠狠一本精品综合网 | 在线国产小视频 | 91九色视频网站 | 四虎成人精品在永久免费 | 国产美女免费观看 | 午夜久久精品 | 99久久久精品 | 国产中文字幕在线观看 | 最近的中文字幕大全免费版 | 精品国模一区二区三区 | 91香蕉国产 | 久久色亚洲 | 激情视频网页 | a级国产乱理伦片在线观看 亚洲3级 | 在线观看mv的中文字幕网站 | 欧美日韩精品区 | 顶级欧美色妇4khd | 精品久久久久久久久久久久久久久久久久 | 人人爱夜夜操 | 蜜臀av夜夜澡人人爽人人桃色 | 91成年人网站 | 精品国产一区二区三区久久影院 | 91在线观 | 三级在线视频播放 | 国产精品久久久久久久久久东京 | 国产欧美最新羞羞视频在线观看 | 欧美日韩伦理在线 | 人人超碰在线 | 国产亚洲精品久久久久久 | 久久久久久黄色 | 五月婷婷在线观看视频 | 日韩欧美高清不卡 | 婷婷五月在线视频 | 五月天综合激情网 | 狠狠狠色 | 免费在线成人 | 免费毛片一区二区三区久久久 | 国产私拍在线 | 美女视频一区二区 | 亚洲精品大全 | 香蕉视频在线网站 | 亚洲精品免费看 | 久久精品视频网 | 亚洲狠狠 | 在线观看播放av | 国产女教师精品久久av | 欧美在线不卡一区 | 久久国产精品二国产精品中国洋人 | 黄色福利视频网站 | 99精品久久99久久久久 | 国产精品综合久久久久久 | 99久久久久久久久久 | 亚洲国产成人在线播放 | 中文字幕传媒 | 精品久久久久久久久久岛国gif | 国产3p视频 | 999成人网 | 久久99精品久久久久蜜臀 | 激情动态| 一区二区三区电影 | 在线亚洲成人 | 伊人www22综合色 | 91久久精品一区二区二区 | 日韩一区二区免费在线观看 | 久久久久久免费视频 | 亚洲日韩中文字幕在线播放 | 久久专区 | 亚洲自拍偷拍色图 | 欧美日一级片 | 久久久国产精品视频 | 国产美女视频免费 | 日日麻批40分钟视频免费观看 | 91麻豆.com| av大全在线观看 | 午夜精品久久久 | 在线观看中文字幕一区二区 | 免费观看十分钟 | 免费看的黄色小视频 | 91av在线电影 | 午夜一级免费电影 | 久久综合九色综合久久久精品综合 | 国产精品久久久免费 | 人人干人人超 | 亚洲作爱视频 | 国产在线色 | 亚洲jizzjizz日本少妇 | 国产久视频| 婷婷五天天在线视频 | 久久国产综合视频 | 在线成人高清电影 | 99久久精品无码一区二区毛片 | 波多野结衣精品 | 日韩久久精品一区二区三区下载 | 亚洲作爱 | 久久久18| 日本黄色免费网站 | 亚洲免费一级电影 | 免费av一级电影 | 免费观看版 | 国产精品免费久久 | 日韩视频中文 | 美女网站在线观看 | 精品欧美小视频在线观看 | 国产精品久久久久久久久久了 | 国产精品乱码久久久久 | www色com| 人成在线免费视频 | 欧美一级视频免费 | 97在线影院 | 9999亚洲| 成年人免费在线 | 五月天亚洲婷婷 | 色婷婷97 | 特级黄色片免费看 | 久久久免费少妇 | 在线观看你懂的网址 | 欧美精品国产精品 | 亚洲激情在线观看 | 9797在线看片亚洲精品 | 黄色特级一级片 | 日本精品视频在线播放 | 国产精品久久久777 成人手机在线视频 | 欧美在线视频一区二区 | av九九九 | 99视频久久 | 亚洲天堂激情 | 亚洲最新精品 | 亚洲日本欧美在线 | 日韩影视大全 | 96视频免费在线观看 | 久久综合久久综合这里只有精品 | 国内精品久久久久影院男同志 | 超碰在线免费福利 | 久久久久免费精品国产小说色大师 | 色综合天天色综合 | 92精品国产成人观看免费 | 国产在线视频一区二区三区 | 九九综合在线 | 99精品视频一区二区 | 天天干婷婷 | 国产区免费 | 国产精品资源在线 | 国模视频一区二区三区 | 欧美一区二区在线免费观看 | 国产精品久久网 | 怡红院av久久久久久久 | 精品福利视频在线 | 日本色小说视频 | 超碰97在线资源站 | 啪嗒啪嗒免费观看完整版 | 首页国产精品 | 国产中文在线观看 | 91亚洲精 | 麻豆传媒视频在线免费观看 | 少妇性aaaaaaaaa视频 | 欧美精品亚州精品 | 操操操天天操 | 中文字幕有码在线观看 | 国产不卡片 | 久久久国产精品一区二区三区 | 久久无码精品一区二区三区 | 国产一二区在线观看 | 麻豆传媒视频在线免费观看 | 91黄在线看 | 亚洲国产精品成人女人久久 | 人九九精品 | 精品一区二区免费在线观看 | 91av视频免费在线观看 | 成人app在线免费观看 | 国产色视频网站2 | 欧美淫aaa免费观看 日韩激情免费视频 | 99精品乱码国产在线观看 | 亚洲激情av | 国产精品手机在线观看 | 久精品视频在线 | 久久精品视频观看 | 国产一区二区免费在线观看 | 国产女人40精品一区毛片视频 | 国产黄色大片 | 99久久www| 丁香五月网久久综合 | h文在线观看免费 | 欧美精品成人在线 | 最近日本字幕mv免费观看在线 | 成片人卡1卡2卡3手机免费看 | 久久亚洲福利视频 | 久久国产热视频 | 午夜久久福利影院 | 91色偷偷 | 永久免费视频国产 | av千婊在线免费观看 | 99久久久久 | 国产精品久久久久久吹潮天美传媒 | 激情图片久久 | 亚洲欧洲日韩在线观看 | 激情久久久久久久久久久久久久久久 | a级国产乱理论片在线观看 伊人宗合网 | 亚洲成人精品国产 | 亚洲va在线va天堂va偷拍 | 国产精品人成电影在线观看 | 麻豆视频观看 | 一级黄色片毛片 | 麻豆传媒精品 | 久久久免费精品视频 | 午夜少妇 | 免费一级片在线观看 | 91丨九色丨国产女 | 亚洲不卡av一区二区三区 | 欧美91片 | 天天操夜夜操天天射 | 一区免费视频 | 五月花婷婷 | www免费网站在线观看 | 欧美国产不卡 | 国产高清精 | 综合激情av| 伊人成人激情 | 五月天丁香亚洲 | 欧美精品亚州精品 | 亚洲精品动漫久久久久 | 精品一区二区久久久久久久网站 | 黄色三级视频片 | 96av在线视频 | 日韩精品久久久久 | 狠狠色狠狠色综合日日小说 | 国产一线在线 | 国产一级片网站 | 中文字幕丝袜制服 | 国产大片黄色 | 女人18毛片a级毛片一区二区 | 国产99久久久国产精品成人免费 | 91色吧 | 又黄又爽又刺激 | 久久综合九色综合97_ 久久久 | 国产在线精品区 | 国产精品高清在线 | 色播激情五月 | 免费人成网ww44kk44 | 丁香婷婷在线观看 | 亚洲三区在线 | 欧美成人理伦片 | 麻豆传媒在线免费看 | 天天激情在线 | 国产成人精品午夜在线播放 | 韩国精品一区二区三区六区色诱 | 日韩日韩日韩日韩 | 免费视频三区 | 中文字幕亚洲欧美 | 欧美日韩在线播放一区 | 欧美va天堂va视频va在线 | 偷拍视频一区 | 国产美腿白丝袜足在线av | 欧美一级特黄aaaaaa大片在线观看 | 黄色国产高清 | 99久久精 | 国产黄视频在线观看 | 97热视频 | 狠狠插狠狠操 | 成人av资源网 | x99av成人免费 | 午夜av电影院 | 天堂av官网 | 99在线精品视频观看 | 国产精品久久久久久久免费 | 欧美激情精品久久久久久免费印度 | 在线色亚洲 | 99热只有精品在线观看 | 国内精品久久久久久久久久 | www.夜夜爽 | 日韩免费高清在线 | 日一日操一操 | 国产理论一区二区三区 | 国产婷婷 | av网站地址 | 色综合 久久精品 | 亚洲三级黄色 | 99国产精品视频免费观看一公开 | 日日爽天天操 | av中文字幕在线免费观看 | 国产精品videossex国产高清 | 一区二区三区在线视频111 | av大片免费 | 九九视频免费在线观看 | 久久五月婷婷丁香社区 | av网址在线播放 | 久久婷婷综合激情 | 九九激情视频 | 成人av片免费观看app下载 | 2018亚洲男人天堂 | 国产中年夫妇高潮精品视频 | 91亚洲狠狠婷婷综合久久久 | 久久精品视频网 | 国内偷拍精品视频 | 最新99热| 五月天激情婷婷 | 五月天色丁香 | 亚洲精品ww | 国产一级片在线播放 | 亚洲精品国偷拍自产在线观看蜜桃 | www.狠狠操 | 91成人免费观看视频 | 国产精品破处视频 | 亚洲jizzjizz日本少妇 | 欧美性精品 | 国产91对白在线播 | 日韩欧美高清一区二区三区 | www国产一区 | 韩国av电影在线观看 | 超碰免费在线公开 | 久久久色| 在线色资源 | 婷婷在线网 | 99 色| 国产无遮挡猛进猛出免费软件 | 免费影视大全推荐 | 九九热在线视频 | 亚洲国产精品电影在线观看 | bayu135国产精品视频 | 中文字幕日韩在线播放 | 日韩欧美视频免费观看 | 在线视频精品 | 天天干天天摸天天操 | 亚洲桃花综合 | 99色99| 国产精品美乳一区二区免费 | 国产精品一区二区三区免费看 | 国产高清视频在线播放 | 九草视频在线观看 | 久久久激情视频 | 亚洲精品美女 | 欧美精品久久久久 | 日本mv大片欧洲mv大片 | 在线观看911视频 | 91精品影视 | 免费观看的av | 日本中文字幕影院 | 成人电影毛片 | 日韩成人精品一区二区三区 | 精品久久一区 | 久久精品国产一区二区三区 | 色天天| 国产成人99av超碰超爽 | 久久久99精品免费观看 | 久久久精品网 | 日韩欧美在线综合网 | 美女网站在线观看 | 欧美一级片在线观看视频 | 久久人操| 国产你懂的在线 | 91大神一区二区三区 | 久久国产精品影视 | 精品a级片 | 黄a网站| 亚洲视频在线观看 | 久久综合久色欧美综合狠狠 | 西西4444www大胆无视频 | 天天天在线综合网 | 中国老女人日b | 国产无套视频 | 色的网站在线观看 | 91成人精品国产刺激国语对白 | 三级大片网站 | 久久综合中文色婷婷 | 国产理论免费 | 婷婷伊人五月天 | 免费国产亚洲视频 | 在线观看视频日韩 | 亚洲在线高清 | 亚洲国产欧美一区二区三区丁香婷 | 亚洲视屏在线播放 | 99夜色 | 亚洲精品综合一二三区在线观看 | 婷婷精品国产欧美精品亚洲人人爽 | 99久久综合精品五月天 | 一区中文字幕在线观看 | 首页国产精品 | 成人av在线一区二区 | 免费看污在线观看 | 美女视频国产 | 在线视频日韩欧美 | 国产黄色资源 | 欧美做受高潮电影o | www色 | 日韩一区二区三区免费视频 | 成年人看片网站 | 天天射天天射天天 | 日本xxxxav| 国产一区视频免费在线观看 | 精品久久久久久亚洲综合网 | 日韩大片在线播放 | 欧美日韩中文在线观看 | 99九九视频 | 国产精品一区二区久久久 | 婷婷网五月天 | 婷婷福利影院 | 天堂在线免费视频 | 色综合久久悠悠 | 中文字幕一区二区在线播放 | 波多野结衣在线观看一区二区三区 | 狠狠操.com| 91精品国产九九九久久久亚洲 | 亚洲视频久久久 | 日韩精品一区二区三区在线播放 | av先锋影音少妇 | av天天澡天天爽天天av | 人人爱天天操 | 久久视频在线免费观看 | 91香蕉视频好色先生 | 亚洲三级国产 | 在线观看mv的中文字幕网站 | 国产精品国产精品 | 免费观看国产视频 | 特级xxxxx欧美| 久久一精品| 精品美女久久 | 久久精品亚洲一区二区三区观看模式 | 久久这里只有精品视频99 | 黄色片视频免费 | 精品国产aⅴ一区二区三区 在线直播av | 人人干天天干 | 免费久久99精品国产婷婷六月 | 日韩伦理一区二区三区av在线 | 久久伦理电影网 | 国产午夜精品一区二区三区嫩草 | 亚洲自拍偷拍色图 | 成人永久在线 | 蜜桃av人人夜夜澡人人爽 | 草草草影院 | 中文字幕乱码亚洲精品一区 | 夜夜爱av| www.久久婷婷 | 久久国产成人午夜av影院潦草 | 日日成人网 | 国产福利91精品一区二区三区 | 欧美另类69 | 午夜精品一区二区三区在线视频 | 在线国产一区 | 国产一区二区播放 | 97av免费视频 | 在线免费观看视频一区 | 中文字幕在线观看播放 | 51精品国自产在线 | 欧美性黄网官网 | 久久久久欠精品国产毛片国产毛生 | 久久久久久久久久福利 | 青青草久草在线 | 日本精品视频在线 | 亚洲国产午夜视频 | 99久久久成人国产精品 | 国产精品观看在线亚洲人成网 | 天天综合五月天 | 久久精品免费看 | 成人动漫一区二区三区 | 亚洲资源视频 | 99久久久久免费精品国产 | 狠狠色伊人亚洲综合网站野外 | 丁香婷婷综合五月 | 91精品国产91久久久久福利 | 成人av网址大全 | 99r在线视频| 深夜激情影院 | 欧美极品裸体 | av片子在线观看 | 天天干夜夜夜操天 | 欧美午夜精品久久久久久浪潮 | 日本精品免费看 | 午夜影院在线观看18 | 色的网站在线观看 | 在线观看av的网站 | 久久99精品一区二区三区三区 | 成人av av在线 | 丁香激情网 | 24小时日本在线www免费的 | 韩国av免费观看 | 国产精品99久久久久久武松影视 | 久久毛片高清国产 | 国产精品自产拍在线观看桃花 | 婷婷丁香激情五月 | 黄网站a| 国产精品乱码一区二三区 | 精品综合久久 | 婷婷六月天在线 | 国产在线a免费观看 | 久久九九久久精品 | 日韩精品综合在线 | 精品久久久99 | 18做爰免费视频网站 | 亚洲专区一二三 | 亚洲成年人在线播放 | 日本电影黄色 | 亚洲精选视频在线 | 欧美精品v国产精品v日韩精品 | 久久久穴 | 亚洲成av人片在线观看香蕉 | 日日干天天操 | 日韩中文字幕免费在线播放 | 男女全黄一级一级高潮免费看 | 久久97久久 | 91麻豆精品国产91久久久无需广告 | 五月天激情视频 | 一级黄色电影网站 | 99精品欧美一区二区三区 | 视频在线观看国产 | 国产亚洲激情视频在线 | 日韩av在线网站 | 成人久久综合 | 日韩精品综合在线 | 国产一级二级在线观看 | 成人91视频| 激情黄色一级片 | 亚洲电影成人 | 中文字幕乱在线伦视频中文字幕乱码在线 | 四虎5151久久欧美毛片 | 在线观看视频你懂得 | 亚洲精品国产区 | 91精品入口| 黄网站免费久久 | 久久久www | 国产91成人在在线播放 | 91精品久久久久久久久久入口 | 亚洲精品久久久蜜桃直播 | 亚洲精品xxx | 免费在线视频一区二区 | 国产精品国产精品 | 亚洲免费资源 | 免费在线观看日韩视频 | 久久爱资源网 | 91精品国产91热久久久做人人 | 国产日女人 | 天天色天 | 亚洲丝袜一区二区 | av短片在线 | 狠狠干五月天 | 91视频在线看 | 国产成人精品综合久久久 | 日韩av区 | 久久久国产一区二区 | 99超碰在线播放 | 久久久久二区 | 97视频在线观看视频免费视频 | 三级黄色在线 | 国产正在播放 | 欧美a级片免费看 | www.色午夜 | 亚洲电影一区二区 | 中文字幕在线观看免费高清完整版 | 永久免费毛片在线观看 | 2023国产精品自产拍在线观看 | 天天综合人人 | 天天操天天谢 | 国产在线一线 | 蜜臀av性久久久久蜜臀av | 日韩三区在线 | 中文超碰字幕 | 日本一区二区免费在线观看 | 久久久久久久av | 久久深夜福利免费观看 | 超级碰碰碰免费视频 | 久久久网页 | 97在线观看免费视频 | 欧美a级片网站 | 一级久久精品 | 欧美日韩精品在线观看 | www激情网| 天天操天天添 | 日韩免费一区二区在线观看 | 免费a视频 | 天天色天天射天天操 | 黄在线免费看 | 狠狠色丁香婷婷综合久小说久 | 99久久精品国产亚洲 | 亚洲激情网站免费观看 | 国产精品在线看 | 在线观看91精品国产网站 | 日本不卡123 | 在线播放一区 | 日批视频在线观看免费 | 久久再线视频 | av在线精品| 一区二区视频在线免费观看 | 黄色成人小视频 | 国产精品成人av久久 | 日韩av美女 | 免费在线观看不卡av | 天天亚洲综合 | 午夜免费视频网站 | 国产三级精品三级在线观看 | 97电影网手机版 | 一区二区三区高清不卡 | 欧美在线一二 | 99精品区 | 精品视频123区在线观看 | 国产精品永久免费在线 | 91麻豆传媒 | 中文字幕二区三区 | 国产精品免费视频一区二区 | 国产一区二区在线免费观看 | 在线观看国产麻豆 | 国产成人免费观看久久久 | 国产精品1区2区在线观看 | 国产91精品看黄网站在线观看动漫 | 国产精久久久 | 911国产 | 激情网在线观看 | 欧美999| 久久久久成人免费 | 碰超在线 | 亚洲精品在线看 | 又污又黄的网站 | 人人澡人人爽 | h网站免费在线观看 | 日韩av免费一区 | 成+人+色综合 | 人人干人人草 | 午夜视频在线观看一区二区 | 色在线免费 | 久久久久久综合 | 9797在线看片亚洲精品 | 亚洲精品国产精品99久久 | 日韩欧美视频在线 | japanese黑人亚洲人4k | 国产资源中文字幕 | 国产黄色免费观看 | 少妇自拍av | 人人草人| 不卡日韩av| 国产一级特黄电影 | 欧美精品资源 | 国产做a爱一级久久 | 国产免费精彩视频 | 亚洲专区欧美 | 91中文在线视频 | 亚洲乱码国产乱码精品天美传媒 | 亚洲成成品网站 | 成人欧美亚洲 | 超碰.com| 最近2019中文免费高清视频观看www99 | av丝袜在线 | 亚洲一区 av | va视频在线观看 | 一区二区三区www | 1区2区3区在线观看 三级动图 | 国产精品视频在线观看 | 97超碰成人在线 | 国产高清在线永久 | 亚洲年轻女教师毛茸茸 | 91精品天码美女少妇 | 日韩av影视 | 欧美福利精品 | 中文在线免费看视频 | 五月天中文字幕 | 99欧美精品 | 色99中文字幕 | 91女子私密保健养生少妇 | 99精品免费久久久久久久久 | 亚洲欧美国产日韩在线观看 | 玖草在线观看 | 国产精品99久久久精品 | 欧美日韩国产精品一区 | av在线网站观看 | 精品国产乱码 | 久久精品99精品国产香蕉 | 97超碰人人爱 | 国产精品福利无圣光在线一区 | 爱爱一区 | 天天艹天天 | 日韩在线观看影院 | 日日操天天射 | 亚洲精品国偷拍自产在线观看蜜桃 | 成人在线观看资源 | 成人精品亚洲 | 国产区精品区 | 久久99欧美| 欧美一进一出抽搐大尺度视频 | 蜜臀久久99静品久久久久久 | 丁香网五月天 | 久久国产视频网 | 国产 日韩 欧美 自拍 | 午夜精品一区二区三区在线视频 | 一区二区av | 69国产盗摄一区二区三区五区 | 国产精品永久在线观看 | 一级片视频在线 | 国产成人精品亚洲精品 | 中文字幕久久精品亚洲乱码 | 国产日韩在线视频 | 狠狠干电影 | 国产精品video爽爽爽爽 | 免费视频一级片 | 国产精品一区二区三区视频免费 | 精品国产乱码久久久久久久 | 国产精品一二 | 一区二区三区在线电影 | 欧洲精品码一区二区三区免费看 | 深夜免费福利视频 | 在线看日韩| 精品一区二区免费在线观看 | 少妇bbb| 婷婷丁香自拍 | 日韩免费看的电影 | 久久五月激情 | 亚洲成人av电影在线 | 午夜精品三区 | 色婷婷综合视频在线观看 | 免费视频黄 | 欧美日韩另类在线 | 久久久精品亚洲 | 天天色宗合| 天天射天天 | 婷婷五综合| 亚洲精品一区二区三区新线路 | 综合久久影院 | 日本精品一二区 | 免费在线观看成年人视频 | 极品嫩模被强到高潮呻吟91 | 日本高清免费中文字幕 | 亚洲第一av在线 | 久久亚洲成人网 | 亚洲精品电影在线 | 伊人婷婷久久 | 在线视频日韩精品 | 亚洲成a人片在线www | 中字幕视频在线永久在线观看免费 | 中文在线亚洲 | 奇米网444| 99在线看 | 欧美韩国在线 | 成年人免费av | 97超碰超碰久久福利超碰 | 综合网成人 | 超碰夜夜 | 99精品视频免费看 | 日日夜夜草 | 国产麻豆精品95视频 | 在线观看国产91 | 免费看v片 | 97精品国自产拍在线观看 | 不卡的av片| 精品国产一区二区三区久久久久久 | 欧美精品久久久久久久久久丰满 | 日本在线观看一区 | www.黄色片网站 | 亚洲精品国产精品国自 | 天天av天天 | 91在线中文 | 中文字幕在线观看的网站 | 成人a v视频 | 中文字幕在线看片 | 亚州欧美视频 | 欧美a级片免费看 | 91九色精品女同系列 | 久久福利国产 | 国产午夜三级一区二区三 | 91天天操 | 人人狠狠综合久久亚洲 | 国产精品成人自产拍在线观看 | 黄色影院在线免费观看 | 天堂av在线 | 免费成人结看片 | 亚洲aaa级| 天天综合狠狠精品 | 久久69精品 | 黄色成人av | 91精品国产网站 | 毛片网站在线观看 | 探花视频在线观看 | 久久精品久久精品久久 | 亚洲精品久久久蜜臀下载官网 | 欧美成人性战久久 | 亚洲欧美日本一区二区三区 | 精品一区二区免费 | 亚洲精品乱码久久久一二三 | 国产成人三级在线播放 | 亚洲成aⅴ人在线观看 | 天天操天天操天天操天天 | 国内视频在线观看 | 日日夜夜干 | 91片黄在线观 | 欧美精品小视频 | 日韩欧美亚州 | 久久一视频 | 日韩欧美网址 | 国产精品久久久久婷婷二区次 | 99久久精品国产欧美主题曲 | 91视频免费观看 | 日本高清免费中文字幕 | 免费福利片2019潦草影视午夜 | avwww在线 | 国产精品国产三级国产不产一地 | 91av在线国产 | 最新日韩视频 | 色狠狠综合 | 日韩欧美在线一区二区 | 亚洲精品免费在线观看视频 | 亚洲精品国产视频 | 中文字幕乱码一区二区 | 97超碰国产在线 | 超碰在线1 | 波多野结衣在线观看一区 | 成人动漫视频在线 | 波多野结衣电影久久 | 99视频在线精品免费观看2 | 婷婷综合在线 | 国产视频在线免费 | 日本久久久久久科技有限公司 | 97人人爽人人 | 夜夜高潮夜夜爽国产伦精品 | 日韩精品一区在线观看 | 亚洲国产综合在线 | 久草在线视频在线观看 | 日本大尺码专区mv | 奇米影视8888| 国产视频日韩视频欧美视频 | 性色av香蕉一区二区 | 97国产在线播放 | 久久人人97超碰com | 超碰国产在线 | 天天天天天天操 | 国产明星视频三级a三级点| 麻豆视频免费网站 | 久久久久久免费毛片精品 | 日本中文字幕在线观看 | 深爱激情五月网 | 日本久久久精品视频 | 98超碰人人 | 网址你懂的在线观看 | 日韩免费视频在线观看 | 日韩精品视频免费专区在线播放 | 日本中文字幕在线免费观看 | 在线看一区二区 | 国产99精品在线观看 | 青青河边草免费观看完整版高清 | 国产精品视频久久久 | 色综合久久88色综合天天免费 | 又黄又爽又色无遮挡免费 | 国内久久视频 | 天天操天天干天天 | 91桃色在线播放 | 青青射 | 免费看色的网站 | 色视频在线观看 | 99久久9| 特级西西444www大精品视频免费看 | 99久久国产免费免费 | 欧美一区二区在线免费观看 | 亚洲久草网 | 亚洲欧美日韩精品久久久 | 99久久精品无码一区二区毛片 | 日韩精品一区二区三区视频播放 | 黄污视频网站 | 久草免费在线视频 | 在线观看深夜福利 | 成人精品一区二区三区中文字幕 | 亚洲精品中文字幕视频 | 伊人va | 狠狠操综合网 | 欧美日韩精品区 | 国产午夜精品久久 | 国产成人综合精品 | av免费电影在线观看 | 黄色的网站在线 | 中文字幕久久精品亚洲乱码 | 中国一级片免费看 | 国产精品99久久久久的智能播放 | 天天操夜夜干 | 色a资源在线 | 911久久 | 色在线最新 | 伊人天天综合 | 成人黄大片视频在线观看 | 免费瑟瑟网站 | 国产手机av在线 | 超碰成人免费电影 | 欧美日韩一区二区三区视频 | 日韩国产精品一区 | 97超碰人 | 精品久久久久久综合 |