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

歡迎訪問 生活随笔!

生活随笔

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

数据库

高并发-【抢红包案例】之四:使用Redis+Lua脚本实现抢红包并异步持久化到数据库

發布時間:2025/3/21 数据库 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 高并发-【抢红包案例】之四:使用Redis+Lua脚本实现抢红包并异步持久化到数据库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 導讀
  • 概述
  • 實現步驟
    • 注解方式配置 Redis
    • lua腳本和異步持久化功能的開發
    • Service層添加Redis搶紅包的邏輯
    • Controller層新增路由方法
    • 構造模擬數據,測試
  • 代碼
  • 總結

導讀

高并發-【搶紅包案例】之一:SSM環境搭建及復現紅包超發問題

高并發-【搶紅包案例】之二:使用悲觀鎖方式修復紅包超發的bug

高并發-【搶紅包案例】之三:使用樂觀鎖方式修復紅包超發的bug


概述

上面三篇博文是使用的MySql數據庫來作為數據的載體數據最終會將數據保存到磁盤中,而Redis使用的是內存,內存的速度比磁盤速度肯定要快很多.

對于使用 Redis實現搶紅包,首先需要知道的是Redis的功能不如數據庫強大,事務也不是很完整.因此要保證數據的正確性數據的正確性可以通過嚴格的驗證得以保證。

而 Redis的 Lua 語言是原子性的,且功能更為強大,所以優先選擇使用Lua語言來實現搶紅包。

但是無論如何對于數據而言,在 Redis 當中存儲,始終都不是長久之計 , 因為 Redis并非一個長久儲存數據的地方,更多的時候只是為了提供更為快速的緩存,所以當紅包金額為 0 或者紅包超時的時候(超時操作可以使用定時機制實,這里暫不討論), 會將紅包數據保存到數據庫中, 這樣才能夠保證數據的安全性和嚴格性。

所以本篇博文我們將使用Redis + lua腳本來實現搶紅包的功能。


實現步驟

注解方式配置 Redis

首先在類 RootConfig 上創建一個 RedisTemplate 對象,并將其裝載到 Spring IoC 容器中。

/*** 創建一個 RedisTemplate 對象*/@Bean(name = "redisTemplate")public RedisTemplate initRedisTemplate() {JedisPoolConfig poolConfig = new JedisPoolConfig();// 最大空閑數poolConfig.setMaxIdle(50);// 最大連接數poolConfig.setMaxTotal(100);// 最大等待毫秒數poolConfig.setMaxWaitMillis(20000);// 創建Jedis鏈接工廠JedisConnectionFactory connectionFactory = new JedisConnectionFactory(poolConfig);connectionFactory.setHostName("192.168.31.66");connectionFactory.setPort(6379);// 調用后初始化方法,沒有它將拋出異常connectionFactory.afterPropertiesSet();// 自定Redis序列化器RedisSerializer jdkSerializationRedisSerializer = new JdkSerializationRedisSerializer();RedisSerializer stringRedisSerializer = new StringRedisSerializer();// 定義RedisTemplate,并設置連接工廠RedisTemplate redisTemplate = new RedisTemplate();redisTemplate.setConnectionFactory(connectionFactory);// 設置序列化器redisTemplate.setDefaultSerializer(stringRedisSerializer);redisTemplate.setKeySerializer(stringRedisSerializer);redisTemplate.setValueSerializer(stringRedisSerializer);redisTemplate.setHashKeySerializer(stringRedisSerializer);redisTemplate.setHashValueSerializer(stringRedisSerializer);return redisTemplate;}

這樣 RedisTemplate 就可以在 Spring 上下文中使用了。

注意, JedisConnectionFactory對象在最后的時候需要自行調用 afterPropertiesSet 方法,它實現了 lnitializingBean 接 口。 如果將其配置在 Spring IoC 容器中, Spring 會自動調用它,但是這里我們是自行創建的, 因此需要自行調用,否則在運用的時候會拋出異常。


lua腳本和異步持久化功能的開發

Redis 并不是一個嚴格的事務,而且事務的功能也是有限的 。 加上 Redis 本身的命令也比較有限,功能性不強,為了增強功能性,還可以使用 Lua 語言。

Redis 中的 Lua 語言是一種原子性的操作,可以保證數據的一致性

依據這個原理可以避免超發現象,完成搶紅包的功能,而且對于性能而言, Redis 會比數據庫快得多。

第一次運行 Lua 腳本的時候,先在 Redis 中編譯和緩存腳本,這樣就可以得到一個 SHA1字符串,之后通過 SHAl 字符串和參數就能調用 Lua 腳本了


--緩存搶紅包列表信息列表 key local listKey = 'red_packet_list_'..KEYS[1] --當前被搶紅包 key local redPacket = 'red_packet_'..KEYS[1] --獲取當前紅包庫存 local stock = tonumber(redis.call('hget', redPacket, 'stock')) --沒有庫存,返回為 0 if stock <= 0 then return 0 end --庫存減 1 stock = stock-1 --保存當前庫存 redis.call('hset', redPacket, 'stock', tostring(stock)) --往鏈表中加入當前紅包信息 redis.call('rpush', listKey, ARGV[1]) --如果是最后一個紅包,則返回 2 ,表示搶紅包已經結束,需要將列表中的數據保存到數據庫中 if stock == 0 then return 2 end --如果并非最后一個紅包,則返回 l ,表示搶紅包成功 return 1

流程:

  • 判斷是否存在可搶的庫存,如果己經沒有可搶奪 的紅包,則返回為 0,結束流程
  • 有可搶奪的紅包,對于紅包的庫存減1 ,然后重新設置庫存
  • 將搶紅包數據保存到 Redis 的鏈表當中,鏈表的 key 為 red_packet_list_ {id}
  • 如果當前庫存為 0 ,那么返回 2,這說明可以觸發數據庫對 Redis 鏈表數據的保存,鏈表的 key 為 red_packet_ list_ {id},它將保存搶紅包的用戶名和搶的時間
  • 如果當前庫存不為 0 ,那么將返回 1,這說明搶紅包信息保存成功。

當返回為 2 的時候,說明紅包己經沒有庫存,會觸發數據庫對鏈表數據的保存, 這是一個大數據量的保存。為了不影響最后一次搶紅包的響應,在實際的操作中往往會考慮使用 JMS 消息發送到別的服務器進行操作,我們這里選擇一種簡單的方式來實現,去創建一條新的線程去運行保存 Redis 鏈表數據到數據庫。

那就在Service層寫一個持久到數據庫的服務類吧

接口

package com.artisan.redpacket.service;public interface RedisRedPacketService {/*** 保存redis搶紅包列表* @param redPacketId --搶紅包編號* @param unitAmount -- 紅包金額*/public void saveUserRedPacketByRedis(Long redPacketId, Double unitAmount); }

實現類

package com.artisan.redpacket.service.impl;import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; import java.sql.Timestamp; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List;import javax.sql.DataSource;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.BoundListOperations; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service;import com.artisan.redpacket.pojo.UserRedPacket; import com.artisan.redpacket.service.RedisRedPacketService;@Service public class RedisRedPacketServiceImpl implements RedisRedPacketService {private static final String PREFIX = "red_packet_list_";// 每次取出1000條,避免一次取出消耗太多內存private static final int TIME_SIZE = 1000;@Autowiredprivate RedisTemplate redisTemplate; // RedisTemplate@Autowiredprivate DataSource dataSource; // 數據源@Override// 開啟新線程運行@Asyncpublic void saveUserRedPacketByRedis(Long redPacketId, Double unitAmount) {System.err.println("開始保存數據");Long start = System.currentTimeMillis();// 獲取列表操作對象BoundListOperations ops = redisTemplate.boundListOps(PREFIX + redPacketId);Long size = ops.size();Long times = size % TIME_SIZE == 0 ? size / TIME_SIZE : size / TIME_SIZE + 1;int count = 0;List<UserRedPacket> userRedPacketList = new ArrayList<UserRedPacket>(TIME_SIZE);for (int i = 0; i < times; i++) {// 獲取至多TIME_SIZE個搶紅包信息List userIdList = null;if (i == 0) {userIdList = ops.range(i * TIME_SIZE, (i + 1) * TIME_SIZE);} else {userIdList = ops.range(i * TIME_SIZE + 1, (i + 1) * TIME_SIZE);}userRedPacketList.clear();// 保存紅包信息for (int j = 0; j < userIdList.size(); j++) {String args = userIdList.get(j).toString();String[] arr = args.split("-");String userIdStr = arr[0];String timeStr = arr[1];Long userId = Long.parseLong(userIdStr);Long time = Long.parseLong(timeStr);// 生成搶紅包信息UserRedPacket userRedPacket = new UserRedPacket();userRedPacket.setRedPacketId(redPacketId);userRedPacket.setUserId(userId);userRedPacket.setAmount(unitAmount);userRedPacket.setGrabTime(new Timestamp(time));userRedPacket.setNote("搶紅包 " + redPacketId);userRedPacketList.add(userRedPacket);}// 插入搶紅包信息count += executeBatch(userRedPacketList);}// 刪除Redis列表redisTemplate.delete(PREFIX + redPacketId);Long end = System.currentTimeMillis();System.err.println("保存數據結束,耗時" + (end - start) + "毫秒,共" + count + "條記錄被保存。");}/*** 使用JDBC批量處理Redis緩存數據.* * @param userRedPacketList* -- 搶紅包列表* @return 搶紅包插入數量.*/private int executeBatch(List<UserRedPacket> userRedPacketList) {Connection conn = null;Statement stmt = null;int[] count = null;try {conn = dataSource.getConnection();conn.setAutoCommit(false);stmt = conn.createStatement();for (UserRedPacket userRedPacket : userRedPacketList) {String sql1 = "update T_RED_PACKET set stock = stock-1 where id=" + userRedPacket.getRedPacketId();DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String sql2 = "insert into T_USER_RED_PACKET(red_packet_id, user_id, " + "amount, grab_time, note)"+ " values (" + userRedPacket.getRedPacketId() + ", " + userRedPacket.getUserId() + ", "+ userRedPacket.getAmount() + "," + "'" + df.format(userRedPacket.getGrabTime()) + "'," + "'"+ userRedPacket.getNote() + "')";stmt.addBatch(sql1);stmt.addBatch(sql2);}// 執行批量count = stmt.executeBatch();// 提交事務conn.commit();} catch (SQLException e) {/********* 錯誤處理邏輯 ********/throw new RuntimeException("搶紅包批量執行程序錯誤");} finally {try {if (conn != null && !conn.isClosed()) {conn.close();}} catch (SQLException e) {e.printStackTrace();}}// 返回插入搶紅包數據記錄return count.length / 2;} }

注解@Async 表示讓 Spring 自動創建另外一條線程去運行它,這樣它便不在搶最后一個紅包的線程之內。因為這個方法是一個較長時間的方法,如果在同一個線程內,那么對于最后搶紅包的用戶需要等待的時間太長,用戶體驗不好

這里是每次取出 1 000 個搶紅包的信息,之所以這樣做是為了避免取出 的數據過大 , 導致JVM 消耗過多的內存影響系統性能。

對于大批量的數據操作,這是我們在實際操作中要注意的,最后還會刪除 Redis保存的鏈表信息,這樣就幫助 Redis 釋放內存了

對于數據庫的保存 ,這里采用了 JDBC的批量處理,每 1000 條批量保存一次,使用批量有助于性能的提高。

注解@Async 的前提是提供一個任務池給 Spring 環境,這個時候要在原有的基礎上改寫配置類 WebConfig

@EnableAsync public class WebConfig extends AsyncConfigurerSupport { ............@Overridepublic Executor getAsyncExecutor() {ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();taskExecutor.setCorePoolSize(5);taskExecutor.setMaxPoolSize(10);taskExecutor.setQueueCapacity(200);taskExecutor.initialize();return taskExecutor;} }

使用@EnableAsync 表明支持異步調用,而我們實現了接口 AsyncConfigurerSupport 的getAsyncExecutor 方法,它是獲取一個任務池,當在 Spring 環境中遇到注解@Async就會啟動這個任務池的一條線程去運行對應的方法,這樣便能執行異步了。


Service層添加Redis搶紅包的邏輯

UserRedPacketService接口新增接口方法grapRedPacketByRedis

/*** 通過Redis實現搶紅包* * @param redPacketId* --紅包編號* @param userId* -- 用戶編號* @return 0-沒有庫存,失敗 1--成功,且不是最后一個紅包 2--成功,且是最后一個紅包*/public Long grapRedPacketByRedis(Long redPacketId, Long userId);

實現類

@Autowiredprivate RedisTemplate redisTemplate;@Autowiredprivate RedisRedPacketService redisRedPacketService;// Lua腳本String script = "local listKey = 'red_packet_list_'..KEYS[1] \n" + "local redPacket = 'red_packet_'..KEYS[1] \n"+ "local stock = tonumber(redis.call('hget', redPacket, 'stock')) \n" + "if stock <= 0 then return 0 end \n"+ "stock = stock -1 \n" + "redis.call('hset', redPacket, 'stock', tostring(stock)) \n"+ "redis.call('rpush', listKey, ARGV[1]) \n" + "if stock == 0 then return 2 end \n" + "return 1 \n";// 在緩存LUA腳本后,使用該變量保存Redis返回的32位的SHA1編碼,使用它去執行緩存的LUA腳本[加入這句話]String sha1 = null;@Overridepublic Long grapRedPacketByRedis(Long redPacketId, Long userId) {// 當前搶紅包用戶和日期信息String args = userId + "-" + System.currentTimeMillis();Long result = null;// 獲取底層Redis操作對象Jedis jedis = (Jedis) redisTemplate.getConnectionFactory().getConnection().getNativeConnection();try {// 如果腳本沒有加載過,那么進行加載,這樣就會返回一個sha1編碼if (sha1 == null) {sha1 = jedis.scriptLoad(script);}// 執行腳本,返回結果Object res = jedis.evalsha(sha1, 1, redPacketId + "", args);result = (Long) res;// 返回2時為最后一個紅包,此時將搶紅包信息通過異步保存到數據庫中if (result == 2) {// 獲取單個小紅包金額String unitAmountStr = jedis.hget("red_packet_" + redPacketId, "unit_amount");// 觸發保存數據庫操作Double unitAmount = Double.parseDouble(unitAmountStr);redisRedPacketService.saveUserRedPacketByRedis(redPacketId, unitAmount);}} finally {// 確保jedis順利關閉if (jedis != null && jedis.isConnected()) {jedis.close();}}return result;}

這里使用了保存腳本返回 的 SHAl 字符串 ,所以只會發送一次腳本到 Redis 服務器,之后只傳輸 SHAl 字符串和參數到 Redis 就能執行腳本 了, 當腳本返回為 2 的時候, 表示此時所有的紅包都已經被搶光了 ,那么就會觸發 redisRedPacketService 的 saveUserRedPacketByRedis 方法。由于在 saveU serRedPacketByRedis 加入注解@Async , 所以 Spring 會創建一條新的線程去運行它 , 這樣就不會影響最后搶一個紅包用戶 的響應時間了 。


Controller層新增路由方法

@RequestMapping(value = "/grapRedPacketByRedis")@ResponseBodypublic Map<String, Object> grapRedPacketByRedis(Long redPacketId, Long userId) {Map<String, Object> resultMap = new HashMap<String, Object>();Long result = userRedPacketService.grapRedPacketByRedis(redPacketId, userId);boolean flag = result > 0;resultMap.put("result", flag);resultMap.put("message", flag ? "搶紅包成功" : "搶紅包失敗");return resultMap;}

構造模擬數據,測試

先在 Redis 上添加紅包信息

127.0.0.1:6379> HMSET red_packet_1 stock 20000 unit_amount 10 OK

初始化了一個編號為1 的大紅包,其中庫存為 2 萬個,每個 10 元. 需要保證數據庫的紅包表內也有對應的記錄才可以。

復制個grapByRedis.jsp,測試吧

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>參數</title> <!-- 加載Query文件--> <script type="text/javascript"src="https://code.jquery.com/jquery-3.2.0.js"></script> <script type="text/javascript">$(document).ready(function () {//模擬30000個異步請求,進行并發var max = 30000;for (var i = 1; i <= max; i++) {$.post({//請求搶id為1的紅包//根據自己請求修改對應的url和大紅包編號url: "./userRedPacket/grapRedPacketByRedis.do?redPacketId=1&userId=1",//成功后的方法success: function (result) {console.log("OK")}});}});</script> </head> <body> </body> </html>

啟動應用,訪問 http://localhost:8080/ssm_redpacket/grapByRedis.jsp

結合前幾篇的數據統計,使用Redis的方式數據一致性也得到了保證且性能遠遠高于樂觀鎖和悲觀鎖的方式。


代碼

https://github.com/yangshangwei/ssm_redpacket


總結

總結

以上是生活随笔為你收集整理的高并发-【抢红包案例】之四:使用Redis+Lua脚本实现抢红包并异步持久化到数据库的全部內容,希望文章能夠幫你解決所遇到的問題。

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

特级a毛片 | 午夜精品久久久久久99热明星 | 91热| 久久免费观看少妇a级毛片 久久久久成人免费 | 午夜aaaa | 日本在线成人 | 在线黄色av| 色福利网站 | 中文字幕文字幕一区二区 | 欧美另类亚洲 | 久久国产麻豆 | 热re99久久精品国产99热 | 免费av大片 | 亚洲精品免费在线观看 | 欧美日韩xx| 日韩欧美一区二区三区视频 | 91免费版在线观看 | 97精品国产97久久久久久久久久久久 | 国产成人一区二区三区 | 亚洲精品成人免费 | 日韩久久激情 | 午夜在线日韩 | 日本精品在线视频 | 99热官网 | 久久久久久久久久影院 | 91精品看片 | 欧美精品一区二区三区一线天视频 | 日韩久久久久久 | 天天色 天天| 激情久久一区二区三区 | 日韩免费高清在线观看 | 99久久综合狠狠综合久久 | 国产日韩在线看 | v片在线播放 | 日韩xxxxxxxxx | 天天射天天爱天天干 | 91高清视频在线 | 激情五月五月婷婷 | 深夜免费福利视频 | 欧美一级片在线播放 | 久久无码av一区二区三区电影网 | 久久免费电影 | 国产精品乱码一区二区视频 | 高清中文字幕av | 99视频在线观看一区三区 | 欧美精品九九99久久 | 欧美日韩免费观看一区二区三区 | 99久久er热在这里只有精品15 | 在线观看亚洲视频 | 91精品国产麻豆国产自产影视 | 四虎成人精品 | 日日夜夜国产 | 啪啪凸凸 | 免费在线观看不卡av | 天天综合入口 | 国产精品自产拍在线观看蜜 | 玖玖国产精品视频 | 久久久久久国产精品美女 | 一本一道久久a久久精品 | 成人免费视频网站 | 在线电影中文字幕 | 99夜色| 精品欧美一区二区三区久久久 | 日韩欧美亚州 | 97超碰人人| 久久精品国产免费观看 | 国产美女视频一区 | 黄色在线免费观看网址 | 99国产情侣在线播放 | 久久久久久久久久久电影 | 成人电影毛片 | 96久久欧美麻豆网站 | 成人久久网 | 日韩精品免费在线 | 成年人黄色免费视频 | 亚洲,播放 | av线上看 | 久草在线播放视频 | 久久免费看| 视频一区二区精品 | 国产打女人屁股调教97 | 91手机在线看片 | 婷婷六月天在线 | 久草视频在线资源站 | 成人免费视频视频在线观看 免费 | 九月婷婷综合网 | 国产日韩高清在线 | 97在线观看视频国产 | 亚洲亚洲精品在线观看 | 91在线网站 | 中文字幕乱码亚洲精品一区 | 午夜婷婷在线观看 | 高清免费av在线 | 久久久久久伊人 | 91资源在线视频 | 国产一级在线看 | 日韩动漫免费观看高清完整版在线观看 | 天天天天天天天天操 | 天天噜天天色 | 久久久99国产精品免费 | 成年人在线观看网站 | 天天天天天操 | 欧美一级视频免费 | 69国产成人综合久久精品欧美 | 亚洲情婷婷 | 激情自拍av | 热99在线| 欧美精选一区二区三区 | 国产黄色一级片 | 午夜av一区二区三区 | 亚洲国产中文字幕在线观看 | 天天干天天干天天操 | 亚洲精品久久久蜜臀下载官网 | 狠狠色香婷婷久久亚洲精品 | 日韩欧美大片免费观看 | 黄色成年片 | 日韩视频区 | 精品国产一区二区三区在线观看 | 久久人人97超碰国产公开结果 | 美女视频黄免费的 | 97视频在线观看视频免费视频 | 国产网站在线免费观看 | 日韩美女免费线视频 | 精品国产一区二区三区久久久蜜月 | www久久| 日韩av电影免费在线观看 | 中文字幕日本特黄aa毛片 | 香蕉久久久久久久 | 在线视频欧美亚洲 | 四虎亚洲精品 | 中文资源在线官网 | 美女性爽视频国产免费app | 91热在线| 亚洲日本韩国一区二区 | 久久国产品 | 麻豆视频大全 | 欧美午夜视频在线 | 色噜噜噜噜 | 亚洲香蕉视频 | 国产特级毛片 | 在线视频日韩精品 | 国产精品 中文在线 | 蜜臀精品久久久久久蜜臀 | 日韩久久精品一区二区三区 | 免费观看午夜视频 | 亚洲精品视频在线 | 制服丝袜亚洲 | 久久国产精品精品国产色婷婷 | 香蕉精品视频在线观看 | www.久久精品视频 | 91干干干 | 丁香视频在线观看 | 美女视频永久黄网站免费观看国产 | 久久伊人色综合 | 天天干天天射天天操 | 中国精品少妇 | 碰超人人| 久青草视频在线观看 | 9在线观看免费高清完整 | 亚洲精品777| 国内丰满少妇猛烈精品播 | 一本一道久久a久久精品蜜桃 | 成年人在线观看 | 日本高清dvd | 亚洲精品资源在线观看 | 欧美日韩一区二区在线观看 | 91午夜精品 | 亚洲粉嫩av | 国产精品网红直播 | 欧美日韩国产成人 | 天天色成人网 | av久久在线 | 天天色天天射天天操 | 国产视频一区二区在线观看 | 99精品福利 | 伊人导航 | 在线观看久久久久久 | 国产精品精品国产婷婷这里av | 正在播放国产一区 | 99九九视频 | 人人爽人人搞 | 国产精品免费久久久久 | 久久成人精品视频 | 国产美女被啪进深处喷白浆视频 | 日韩大片在线播放 | www.国产在线 | 国产精品国产三级国产不产一地 | 成人在线观看资源 | 精品久久福利 | 91精品在线播放 | 久久久久久免费 | 国产高清视频色在线www | 国产精品一区欧美 | 美女黄濒| 久久久久综合精品福利啪啪 | 亚洲另类交 | 久久国际影院 | 久久99免费视频 | 日韩中文字幕免费看 | 在线观看中文字幕一区 | 亚洲一级二级 | 日本激情视频中文字幕 | 狠狠狠色丁香综合久久天下网 | 日韩激情久久 | 国产精品美女久久久久久久久 | 网站免费黄色 | 亚洲 成人 欧美 | 色综合天| 91精品999| 国产1区2区3区在线 亚洲自拍偷拍色图 | 日韩视频专区 | 免费一级特黄录像 | 成人福利在线观看 | 国精产品999国精产品岳 | 亚洲人精品午夜 | 中文有码在线 | 天天操天天摸天天爽 | 国产精品理论视频 | 国产一区成人在线 | 最新精品国产 | 在线电影91 | 中文字幕在线免费观看 | 国产在线欧美 | 在线亚洲成人 | 96精品在线 | 久久综合偷偷噜噜噜色 | 伊人色综合久久天天网 | 特级西西444www高清大视频 | 精品视频在线视频 | 中文字幕有码在线 | 麻豆国产精品一区二区三区 | 国产二区免费视频 | 精品麻豆 | 亚洲精品久久久久999中文字幕 | 尤物97国产精品久久精品国产 | 国产在线精品福利 | 亚洲最新视频在线 | 少妇做爰k8经典 | 国产欧美日韩精品一区二区免费 | 国产亚洲片 | 啪啪免费试看 | 国产精品99页 | 国内揄拍国内精品 | 深爱五月激情网 | 欧美淫视频 | 久久久久一区二区三区四区 | 插久久 | 久久爱资源网 | 国产精品1区2区3区 久久免费视频7 | 亚洲欧美日韩一级 | 日韩精品中文字幕有码 | 97在线观看免费高清完整版在线观看 | 国产不卡高清 | 欧美ⅹxxxxxx| 日本护士撒尿xxxx18 | 亚洲区另类春色综合小说校园片 | 天天色棕合合合合合合 | 亚洲国产精品电影 | 制服丝袜亚洲 | 韩国av免费在线观看 | www黄| 欧美地下肉体性派对 | 亚洲欧美国产精品久久久久 | 欧美日韩有码 | 久久精品高清 | 在线观看深夜福利 | 91九色蝌蚪视频网站 | 久久黄页 | 日韩免费不卡视频 | 国产在线一区二区 | 天天操人人要 | av久久在线| 亚洲精品小视频 | 欧洲精品久久久久毛片完整版 | 超碰在线免费福利 | 97av色 | 中国精品一区二区 | 天天干天天操天天入 | 日本色小说视频 | 激情丁香综合五月 | 亚洲成年人免费网站 | 黄色免费网 | 最新av电影网站 | 国产精品成人免费一区久久羞羞 | 五月婷婷丁香在线观看 | 久久不卡av | 午夜骚影| 久草在线视频免赞 | a级国产片 | 国产成人综合精品 | www.超碰97.com| 日韩一区二区三区免费视频 | 干天天 | 精品黄色在线观看 | 超碰人人草人人 | 久久久国产精品麻豆 | 亚洲欧美视频网站 | 这里只有精彩视频 | 欧美一级性生活片 | 狠狠狠色丁香婷婷综合激情 | 免费看成人片 | 国产精品自产拍在线观看 | 少妇搡bbb | 韩国一区在线 | 伊人天天干 | 成年人免费电影 | 在线观看国产一区二区 | 美女视频一区 | 国产精品99久久久精品免费观看 | 丁香六月婷婷激情 | 超碰夜夜 | 欧美成人基地 | 91网址在线看 | 毛片精品免费在线观看 | 中文字幕av在线免费 | 97在线播放视频 | 狠狠操影视 | 亚洲国产中文在线 | 中文字幕在线播放一区二区 | 欧美孕妇视频 | 精品国产乱码久久久久久三级人 | 精品视频在线播放 | 国产伦精品一区二区三区高清 | 国产精品中文字幕在线 | 精品日韩在线 | 91精品欧美一区二区三区 | 久久人人爽人人爽人人片av免费 | 精品亚洲视频在线观看 | 国产精品专区在线观看 | 成人av电影免费在线播放 | 成人福利在线观看 | 久久婷亚洲五月一区天天躁 | 国际精品久久 | 天天摸天天舔 | 久久精品99国产精品日本 | 日本一区二区三区免费观看 | www.亚洲激情.com | 91九色在线 | 日韩高清无线码2023 | 免费在线观看国产精品 | 久久精品免费 | 日韩区在线观看 | 日本中文字幕观看 | 成人av.com | 色诱亚洲精品久久久久久 | 亚洲区另类春色综合小说校园片 | 一区二区三区在线免费 | 欧美视频不卡 | 狠狠色丁香 | 亚洲精品美女在线观看播放 | 久久久久久久网站 | 日韩欧美一区二区三区免费观看 | 96av在线视频 | 91日本在线播放 | 91视频在线免费看 | 精品99999 | 91精品高清 | 91久久国产自产拍夜夜嗨 | 欧美精品xxx| 精品国产电影一区二区 | 国产精品久久久久久久久久白浆 | 黄色精品一区 | 18女毛片| 五月开心色 | 久久精品久久精品久久精品 | 2022久久国产露脸精品国产 | 日本韩国欧美在线观看 | 17videosex性欧美 | 黄色小说免费在线观看 | 综合久久精品 | 91视频xxxx| 免费在线成人av | 国产一二区免费视频 | 精品福利网站 | 99久久999久久久精玫瑰 | 日韩精品资源 | 91久久奴性调教 | 免费试看一区 | 国产高清在线不卡 | 日韩免费成人 | 日韩精品免费一线在线观看 | 久久久精品午夜 | 国产一区二区久久久 | 国产无遮挡猛进猛出免费软件 | 欧美精品久久久久久久久免 | 国产午夜精品视频 | 在线黄色av电影 | 最新中文字幕在线播放 | 91精品免费在线视频 | 欧美日韩免费网站 | 99久久精品国产一区 | 色的网站在线观看 | 欧美在线视频一区二区三区 | 国产午夜麻豆影院在线观看 | 伊人五月 | 免费观看91视频大全 | 欧美一级黄大片 | 激情综合站 | av看片在线 | 久久精品一区二区 | 久久成人欧美 | 亚洲国产精品va在线 | 亚洲最大成人免费网站 | 视频一区二区在线 | 久久国产精品免费 | 国产免费不卡av | 亚洲夜夜综合 | 亚洲无毛专区 | 日韩精品一区电影 | 中文字幕国产一区 | 片黄色毛片黄色毛片 | 国产成人亚洲在线电影 | 91亚洲精品久久久中文字幕 | 97在线视频网站 | 国产在线观看你懂的 | 国产精品123 | 免费在线成人av | 免费黄色a网站 | 五月婷婷综合网 | 五月婷婷狠狠 | 国产亚洲高清视频 | 热久久在线视频 | 极品美女被弄高潮视频网站 | 88av视频 | 97精品国产97久久久久久免费 | 亚洲一级免费观看 | 麻豆 91 在线| av在线影片| 六月久久婷婷 | 日韩精品久久中文字幕 | 黄色av大片 | 中文字幕888| 国产精品免费在线播放 | 成在线播放 | 超碰99在线 | 日精品 | 91福利视频在线 | 91视频成人免费 | 91大片网站 | 中文字幕在线观看免费高清电影 | 91看片淫黄大片一级在线观看 | 欧美精品久久久久久久免费 | 91av视频观看 | 久草五月| 91亚洲精品久久久蜜桃借种 | 久久九九精品久久 | 精品亚洲欧美无人区乱码 | 国产玖玖在线 | 中文欧美字幕免费 | 在线免费观看黄色 | 亚洲一区二区三区四区精品 | 狠狠的日日| 日韩在线观看中文 | 在线视频中文字幕一区 | 色综合天天综合 | 乱子伦av| 99久久精品国产网站 | 天天操 夜夜操 | 99在线观看精品 | 狠狠狠综合 | 国产黄色大片 | 99视频在线精品免费观看2 | 日本精品中文字幕在线观看 | 久久精品国产亚洲精品 | 又爽又黄又无遮挡网站动态图 | 国产精品乱码久久 | 一本一本久久aa综合精品 | 国产一区视频在线观看免费 | 亚洲情感电影大片 | 91视频在线免费 | 亚洲国产精品久久久 | 欧美成人精品欧美一级乱黄 | 欧亚日韩精品一区二区在线 | 干天天| 久久人人精品 | 国产一区二区观看 | 久久久一本精品99久久精品66 | 日女人免费视频 | 中文字幕一区在线 | 天天插狠狠干 | 91福利视频免费 | av天天草| 99精品视频观看 | 五月婷香蕉久色在线看 | 国产精品美女 | 99色视频在线| 97久久精品午夜一区二区 | 久久久麻豆视频 | 97精品一区二区三区 | 亚洲国产精品电影 | 久久在线观看视频 | 视频在线观看99 | 欧美一二区在线 | 91九色在线观看视频 | 婷婷色中文 | 天天操夜夜拍 | 在线免费中文字幕 | 久久久久亚洲精品男人的天堂 | 狠狠五月天 | 黄色av高清| 久久久久成人精品免费播放动漫 | 亚洲国产美女久久久久 | 亚洲h在线播放在线观看h | 成人全视频免费观看在线看 | 午夜精品久久久久久久99婷婷 | 99爱精品视频 | 黄色a在线| www.五月天婷婷 | 免费观看av网站 | 国产精品美女久久久久aⅴ 干干夜夜 | 天天躁日日躁狠狠躁av麻豆 | 99免费在线观看 | 97在线观看免费高清 | 色婷婷狠狠18 | 国产成人精品免高潮在线观看 | 96视频免费在线观看 | 欧美黄色软件 | 四虎国产永久在线精品 | 黄色网址国产 | 精品一区在线看 | 国产综合香蕉五月婷在线 | 丁香六月婷婷开心婷婷网 | 久久免费国产精品 | 看黄色91 | 久久激情小说 | 久久综合给合久久狠狠色 | 黄色软件网站在线观看 | 在线三级播放 | 色吊丝在线永久观看最新版本 | 成年人在线观看网站 | 蜜桃av综合网 | 精品麻豆入口免费 | 99免在线观看免费视频高清 | 精品1区2区3区 | 免费a一级 | 久久a免费视频 | 在线国产视频 | 久久久久免费电影 | 中文字幕在线影视资源 | 97理论电影| 亚洲国产精品电影 | 日韩精品一区二区三区丰满 | 久久看免费视频 | 爱干视频 | 国产精品久久久久久麻豆一区 | 最近中文字幕久久 | 久久视频网 | 美州a亚洲一视本频v色道 | 手机看片中文字幕 | 看国产黄色片 | 久久精品香蕉 | 日韩簧片在线观看 | 色综合天天狠天天透天天伊人 | 91亚洲欧美激情 | 97视频在线观看视频免费视频 | 久久久精品网 | 国产最新在线 | 在线a人片免费观看视频 | 欧美精品免费在线 | 国内精品美女在线观看 | 久草手机视频 | 午夜美女福利直播 | 五月激情亚洲 | 欧美日韩后 | 黄色的网站在线 | 国产激情电影综合在线看 | 日韩在线欧美在线 | 五月婷综合 | 日日射av | 91九色视频 | 亚洲国产精品推荐 | 黄色大全视频 | 国产亚洲精品美女久久 | 成年人免费在线播放 | 久久国产精品免费一区 | 久久久久视 | 日韩高清黄色 | 91亚色视频在线观看 | 久久综合成人 | 久久精品播放 | 日韩欧美国产免费播放 | 色天天综合久久久久综合片 | 91一区二区三区久久久久国产乱 | www久久九| 亚洲欧美在线视频免费 | av看片在线观看 | 特级免费毛片 | 日韩成人在线一区二区 | 91免费的视频在线播放 | 国产免费视频在线 | 国产又粗又猛又爽 | 9在线观看免费高清完整版在线观看明 | 91九色老| 探花视频在线观看免费版 | 成人中文字幕在线 | 探花视频在线观看免费 | 久久精品综合一区 | 国产精品不卡在线观看 | 丁香五香天综合情 | 91香蕉视频 | 激情av在线播放 | 在线观看日韩精品 | 久久人人爽av| 波多野结衣最新 | 免费黄色av. | www.夜夜草 | 色综合久久中文字幕综合网 | 国产精品一区二区你懂的 | 精品中文字幕视频 | 在线观看国产亚洲 | 精品久久亚洲 | 黄色91免费观看 | 西西4444www大胆无视频 | 去干成人网 | 日韩电影久久久 | 亚洲精品视频一二三 | 免费看污网站 | 国产一区二区成人 | 国产99久久九九精品 | 色偷偷人人澡久久超碰69 | 色资源二区在线视频 | 五月天视频网 | 激情影音 | 免费看一级特黄a大片 | 亚洲午夜精品久久久 | 91porny九色91啦中文 | 久久精品中文字幕 | 91探花系列在线播放 | 蜜臀av免费一区二区三区 | 日韩高清免费在线 | 成人av在线电影 | 福利av在线| 日日射av | 久热av| 黄色大片日本免费大片 | 日韩av电影一区 | 黄色小网站在线 | 日日夜夜精品视频天天综合网 | 亚洲网久久 | 久草视频一区 | 亚洲欧美日本国产 | 久久亚洲免费视频 | 国产精品第一页在线 | 99久久精品免费看国产 | 久久久久成人精品免费播放动漫 | 99久久国产免费免费 | 97在线播放 | 午夜av一区 | 波多野结衣在线观看一区二区三区 | 亚洲精品久久久蜜臀下载官网 | 精品亚洲午夜久久久久91 | 久久久久成人免费 | 国产精品久久久久一区二区三区 | 亚洲欧美日韩国产精品一区午夜 | 国产伦理一区 | 天天色天天色天天色 | 超碰97在线人人 | 国产黄色理论片 | 91免费国产在线观看 | 国产亚洲免费的视频看 | 国产日本高清 | 久草香蕉在线 | 美女在线免费观看视频 | 欧美日韩中文另类 | 精品99在线视频 | 亚洲国产小视频在线观看 | 婷婷在线网站 | 亚洲欧洲在线视频 | 国产精品久久久久高潮 | aaa日本高清在线播放免费观看 | 色综合久久网 | 亚洲精品在线电影 | 中文字幕在线播放一区 | 国产精品毛片完整版 | 91桃色免费观看 | 久久精彩 | 久久av高清 | 91精品蜜桃 | 青青河边草免费直播 | 中文字幕色播 | 不卡视频一区二区三区 | 亚洲成人网av| 天天操天天干天天操天天干 | 国产精品乱码在线 | 最近中文字幕视频网 | 久久爱导航 | 久久精品视频免费 | 美女黄网久久 | 国产伦精品一区二区三区… | 国产色拍拍拍拍在线精品 | 日韩视频在线观看免费 | 久久精品毛片 | 色在线视频 | www.xxx.性狂虐| 日韩av成人在线观看 | 亚洲色图激情文学 | 精品久久久成人 | 午夜精品福利一区二区三区蜜桃 | 91视频 - v11av| 精品专区| 日韩美一区二区三区 | 精品高清美女精品国产区 | 在线观看亚洲a | 天天激情天天干 | 波多野结衣精品视频 | 国产精品久久久久毛片大屁完整版 | 手机看国产毛片 | 亚洲欧洲国产精品 | 中文字幕视频播放 | 五月开心激情 | 99久久99久久免费精品蜜臀 | 色婷婷激情电影 | 欧美激情第28页 | 成年人在线视频观看 | 中文字幕刺激在线 | 午夜精品福利一区二区三区蜜桃 | 国产精品久久久久免费 | 一本一道久久a久久精品蜜桃 | 国产精品成 | 中文字幕av最新更新 | 国产黄色av | 久久永久免费 | 国产视频在 | 五月综合 | 精品字幕在线 | 色婷在线 | 一本之道乱码区 | 亚洲最大av在线播放 | 亚洲日本一区二区在线 | 国际精品网 | 日韩超碰在线 | 97电影在线看视频 | a级国产乱理伦片在线播放 久久久久国产精品一区 | 在线成人短视频 | 狠狠狠色丁香综合久久天下网 | 香蕉在线观看视频 | 97在线视频观看 | 午夜精品久久久久久99热明星 | 天天干,天天干 | 日韩欧美综合视频 | 在线视频观看成人 | 亚洲精品tv | 中文字幕乱码电影 | 五月天com| 国产在线va | 亚洲一级片在线观看 | 日韩福利在线观看 | 三级性生活视频 | 天天玩天天干 | 丁香婷婷激情五月 | 久久久国产精品一区二区中文 | 久久九九久久精品 | 国产精久久久久久妇女av | 天天干夜夜操视频 | 国产精品免费在线播放 | 黄色大片网 | 九九热在线精品 | 日韩一区二区三免费高清在线观看 | 天天操天天操天天操天天操 | 久久精品视频2 | 久久久片 | 国内一级片在线观看 | 天堂网中文在线 | 99视频精品在线 | 久久久久久久久久久网站 | 日本黄色免费电影网站 | 国产中文字幕免费 | 色小说在线 | 中文字幕在线观看三区 | 粉嫩高清一区二区三区 | 蜜桃视频色 | 中文字幕一区二区三区精华液 | 久久精彩免费视频 | 亚洲一区二区精品视频 | 黄网站色| 黄网站色视频免费观看 | 最近日韩免费视频 | 国产激情小视频在线观看 | 国产一区二区在线免费播放 | 久久久久亚洲精品男人的天堂 | 天堂视频中文在线 | 在线观看日韩视频 | 国产成人精品一区二区三区在线 | 午夜精品久久久久久久99 | 中文字幕一区二区在线播放 | 激情欧美网| 国产在线a免费观看 | 99精品欧美一区二区三区 | 国内精品久久久久国产 | 97av影院| www.色婷婷.com | 日本韩国在线不卡 | 99热国产在线中文 | 国产精品久久久久久久久久免费 | 又黄又刺激的视频 | 色综合久久88色综合天天人守婷 | 992tv在线观看 | 日本精品va在线观看 | 成人一区二区三区中文字幕 | 久久国产精品色av免费看 | 一区二区三区日韩在线观看 | 亚洲精品小区久久久久久 | 超碰人人91| 91中文在线 | 久久69精品久久久久久久电影好 | 国产精品色婷婷视频 | 欧美精品一区二区在线播放 | 五月婷婷av在线 | 五月天久久婷婷 | 91免费在线视频 | 亚洲精品国产精品国自 | 在线观看网站你懂的 | 亚洲最新毛片 | 亚洲伊人色 | 亚洲欧美精品一区二区 | 国产一区黄色 | 四虎影视精品 | 国产 日韩 在线 亚洲 字幕 中文 | 日本黄色免费在线 | 亚洲精品乱码久久久久久写真 | 91探花国产综合在线精品 | 国产.精品.日韩.另类.中文.在线.播放 | 日韩一区二区三区免费视频 | 黄色大全免费观看 | 精品一二三四在线 | 日本性久久| 欧美精品免费在线观看 | 在线观看日韩免费视频 | 国产日韩一区在线 | 久久成人人人人精品欧 | 成人黄色在线观看视频 | 日韩精品一区二区三区免费观看 | 波多在线视频 | 亚洲伦理一区 | 人人澡超碰碰 | 国产群p视频 | 亚洲五月 | 麻豆91精品视频 | 亚洲精品视频在线免费 | 经典三级一区 | av在线最新| 国产一区电影在线观看 | av亚洲产国偷v产偷v自拍小说 | 亚洲专区欧美 | 亚洲精品国产精品国自产观看 | 五月婷婷免费 | 亚洲狠狠 | 国内久久视频 | 国产精品永久免费 | 在线视频日韩 | 91在线免费观看网站 | 亚洲精品国内 | 97超碰在线播放 | 国模视频一区二区 | 免费观看一级 | 在线观看的黄色 | 午夜精品影院 | 免费日韩一区二区三区 | 日韩一区二区三区在线观看 | 夜夜视频资源 | 九九九在线观看视频 | 91av在线免费 | av黄色国产 | 在线视频 你懂得 | 91精品国产99久久久久久久 | 91成人精品一区在线播放69 | 天天干夜夜操视频 | 国产特黄色片 | 成人免费视频网站在线观看 | 亚洲欧美va| 91最新国产 | 免费中文字幕视频 | 午夜色性片 | 99热.com| 日韩动态视频 | 国产精品久久久久婷婷二区次 | 天天射天天干天天操 | 亚洲视频一区二区三区在线观看 | 亚洲天堂网视频在线观看 | 免费在线观看成年人视频 | 九色视频自拍 | 日韩av电影免费在线观看 | 丁香婷婷综合激情 | www.色五月.com | 91 在线视频 | 国产精品99久久久久久武松影视 | 婷婷精品国产一区二区三区日韩 | 国产丝袜网站 | 久久精品视频网站 | 国产成人精品一区一区一区 | 久久er99热精品一区二区 | 成人av资源在线 | 欧美一级小视频 | 日韩不卡高清 | 国产中文字幕三区 | 天天操天天操天天操 | 免费看国产曰批40分钟 | 免费网站黄色 | 日韩高清片 | 精品亚洲视频在线 | 日韩一级黄色av | 国产亚洲精品无 | 国产网站色 | 中文字幕精品一区 | 在线免费看黄色 | 国内外成人免费在线视频 | 国产激情免费 | 欧美一二区视频 | 在线探花 | 在线观看免费国产小视频 | 国产精品亚洲人在线观看 | 久久99偷拍视频 | 一级电影免费在线观看 | 美女视频免费一区二区 | 美女视频a美女大全免费下载蜜臀 | 欧美日韩国产亚洲乱码字幕 | 久久97久久97精品免视看 | 久久久久久国产精品免费 | 日韩国产精品毛片 | 久久成人午夜视频 | 99久久99久久精品免费 | 成人在线免费看视频 | 日韩国产精品毛片 | 日韩在线观看你懂的 | 国产夫妻av在线 | 中文字幕日韩av | 麻豆 videos | 亚洲精品乱码久久久久久蜜桃91 | 99久久精品国产一区二区成人 | 国产精品一区专区欧美日韩 | 精品久久久久久亚洲综合网站 | 2019精品手机国产品在线 | 九九免费在线观看 | 日本系列中文字幕 | 国内精品久久久久影院日本资源 | 91免费高清在线观看 | 国产福利91精品一区 | 69av免费视频 | 91精品视频免费看 | 亚洲资源在线观看 | 国产亚州精品视频 | 毛片在线播放网址 | 久久tv| 亚洲闷骚少妇在线观看网站 | 在线成人一区 | 99视频导航 | 国产中文字幕一区二区 | 国内精品视频在线 | 国产精品一区久久久久 | 在线中文字幕视频 | 成人久久久久久久久久 | 亚洲在线视频免费 | 99在线观看免费视频精品观看 | 黄色资源网站 | 日韩欧美国产激情在线播放 | 欧美精品一区二区三区一线天视频 | 精品一区精品二区高清 | 91成版人在线观看入口 | 日韩精品中文字幕在线 | 91av视频网站| 精品二区久久 | 最新成人在线 | 亚洲,播放| 久久久久久久久久久免费 | 国内精品久久久久久久影视简单 | 久久国产精品色av免费看 | 亚洲精品乱码久久久久久高潮 | 中文字幕av免费在线观看 | 中文字幕亚洲欧美 | 一区二区三区精品在线视频 | 中文视频一区二区 | 五月激情六月丁香 | 黄www在线观看 | 极品嫩模被强到高潮呻吟91 | 色吊丝在线永久观看最新版本 | 91精品一区二区三区蜜臀 | 国产亚洲欧美日韩高清 | 国产亚洲91 | 国产精品99久久久久的智能播放 | 狠狠色丁香婷婷综合久小说久 | 欧美日韩国产色综合一二三四 | 国产精品一区二区62 | 美女网站一区 | 中文字幕在线观看2018 | 日本三级在线观看中文字 | 午夜精品一区二区三区免费视频 | 久久激情视频 久久 | 91网址在线观看 | 国产三级香港三韩国三级 | 日韩区在线观看 | 午夜影院先 | 激情五月五月婷婷 | 久草视频在线播放 | 久久一久久 | 天天射成人| 久久精品成人热国产成 | 91香蕉嫩草 | 99色在线观看视频 |