久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

詳解SpringBoot的三種緩存技術(Spring Cache、Layering Cache 框架、Alibaba JetCache 框架)

瀏覽:78日期:2023-04-16 09:46:07

引言

​前兩天在寫一個實時數據處理的項目,項目要求是 1s 要處理掉 1k 的數據,這時候顯然光靠查數據庫是不行的,技術選型的時候老大跟我提了一下使用 Layering-Cache 這個開源項目來做緩存框架。

​之間問了一下身邊的小伙伴,似乎對這塊了解不多。一般也就用用 Redis 來緩存,應該是很少用多級緩存框架來專門性的管理緩存吧。

​趁著這個機會,我多了解了一些關于 SpringBoot 中緩存的相關技術,于是有了這篇文章!

在項目性能需求比較高時,就不能單單依賴數據庫訪問來獲取數據了,必須引入緩存技術。

常用的有本地緩存、Redis 緩存。

本地緩存:也就是內存,速度快,缺點是不能持久化,一旦項目關閉,數據就會丟失。而且不能滿足分布式系統的應用場景(比如數據不一致的問題)。 Redis 緩存:也就是利用數據庫等,最常見的就是 Redis。Redis 的訪問速度同樣很快,可以設置過期時間、設置持久化方法。缺點是會受到網絡和并發訪問的影響。

本節介紹三種緩存技術:Spring Cache、Layering Cache 框架、Alibaba JetCache 框架。示例使用的 SpringBoot 版本是 2.1.3.RELEASE。非 SpringBoot 項目請參考文章中給出的文檔地址。

項目源碼地址:https://github.com/laolunsi/spring-boot-examples

一、Spring Cache

Spring Cache 是 Spring 自帶的緩存方案,使用簡單,既可以使用本地緩存,也可以使用 Redis

CacheType 包括:

GENERIC, JCACHE, EHCACHE, HAZELCAST, INFINISPAN, COUCHBASE, REDIS, CAFFEINE, SIMPLE, NONE

Spring Cache 的使用很簡單,引入 即可,我這里使用創建的是一個 web 項目,引入的 `spring-boot-starter-web` 包含了 。

這里利用 Redis 做緩存,再引入 spring-boot-starter-data-redis 依賴:

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency><!--Redis--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency>

在配置類 or Application 類上添加 @EnableCaching 注解以啟動緩存功能。

配置文件很簡潔(功能也比較少):

server: port: 8081 servlet: context-path: /apispring: cache: type: redis redis: host: 127.0.0.1 port: 6379 database: 1

下面我們編寫一個對 User 進行增刪改查的 Controller,實現對 User 的 save/delete/findAll 三個操作。為演示方便,DAO 層不接入數據庫,而是使用 HashMap 來直接模擬數據庫操作。

我們直接看 service 層的接口實現:

@Servicepublic class UserServiceImpl implements UserService { @Autowired private UserDAO userDAO; @Override @Cacheable(value = 'user', key = '#userId') public User findById(Integer userId) { return userDAO.findById(userId); } @Override @CachePut(value = 'user', key = '#user.id', condition = '#user.id != null') public User save(User user) { user.setUpdateTime(new Date()); userDAO.save(user); return userDAO.findById(user.getId()); } @Override @CacheEvict(value = 'user', key = '#userId') public boolean deleteById(Integer userId) { return userDAO.deleteById(userId); } @Override public List<User> findAll() { return userDAO.findAll(); }}

我們可以看到使用了 @Cacheable、@CachePut、@CacheEvict 注解。

Cacheable:啟用緩存,首先從緩存中查找數據,如果存在,則從緩存讀取數據;如果不存在,則執行方法,并將方法返回值添加到緩存 @CachePut:更新緩存,如果 condition 計算結果為 true,則將方法返回值添加到緩存中 @CacheEvict:刪除緩存,根據 value 與 key 字段計算緩存地址,將緩存數據刪除

測試發現默認的對象存到 Redis 后是 binary 類型,我們可以通過修改 RedisCacheConfiguration 中的序列化規則去調整。比如:

@Configurationpublic class RedisConfig extends CachingConfigurerSupport { @Bean public RedisCacheConfiguration redisCacheConfiguration(){ Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class); RedisCacheConfiguration configuration = RedisCacheConfiguration.defaultCacheConfig(); configuration = configuration.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer)).entryTtl(Duration.ofDays(30)); return configuration; }}

Spring Cache 的功能比較單一,例如不能實現緩存刷新、二級緩存等功能。下面介紹一個開源項目:Layering-Cache,該項目實現了緩存刷新、二級緩存(一級內存、二級 Redis)。同時較容易擴展實現為自己的緩存框架。

二、Layering Cache 框架

文檔:https://github.com/xiaolyuh/layering-cache/wiki/文檔

引入依賴:

<dependency> <groupId>com.github.xiaolyuh</groupId> <artifactId>layering-cache-starter</artifactId> <version>2.0.7</version> </dependency>

配置文件不需要做什么修改。啟動類依然加上 @EnableCaching 注解。

然后需要配置一下 RedisTemplate:

@EnableCaching@Configurationpublic class RedisConfig extends CachingConfigurerSupport { @Bean public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) { return createRedisTemplate(redisConnectionFactory); } public RedisTemplate createRedisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(redisConnectionFactory); // 使用Jackson2JsonRedisSerialize 替換默認序列化 Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(objectMapper); // 設置value的序列化規則和 key的序列化規則 redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); //Map redisTemplate.setHashKeySerializer(new StringRedisSerializer()); redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer); redisTemplate.afterPropertiesSet(); return redisTemplate; }}

下面我們使用 layering 包中的 @Cacheable @CachePut @CatchEvict 三個注解來替換 Spring Cache 的默認注解。

@Servicepublic class UserServiceImpl implements UserService { @Autowired private UserDAO userDAO; @Override //@Cacheable(value = 'user', key = '#userId') @Cacheable(value = 'user', key = '#userId', firstCache = @FirstCache(expireTime = 5, timeUnit = TimeUnit.MINUTES), secondaryCache = @SecondaryCache(expireTime = 10, preloadTime = 3, forceRefresh = true, isAllowNullValue = true, timeUnit = TimeUnit.MINUTES)) public User findById(Integer userId) { return userDAO.findById(userId); } @Override //@CachePut(value = 'user', key = '#user.id', condition = '#user.id != null') @CachePut(value = 'user', key = '#user.id', firstCache = @FirstCache(expireTime = 5, timeUnit = TimeUnit.MINUTES), secondaryCache = @SecondaryCache(expireTime = 10, preloadTime = 3, forceRefresh = true, isAllowNullValue = true, timeUnit = TimeUnit.MINUTES)) public User save(User user) { user.setUpdateTime(new Date()); userDAO.save(user); return userDAO.findById(user.getId()); } @Override //@CacheEvict(value = 'user', key = '#userId') @CacheEvict(value = 'user', key = '#userId') public boolean deleteById(Integer userId) { return userDAO.deleteById(userId); } @Override public List<User> findAll() { return userDAO.findAll(); }}

三、Alibaba JetCache 框架

文檔:https://github.com/alibaba/jetcache/wiki/Home_CN

JetCache是一個基于Java的緩存系統封裝,提供統一的API和注解來簡化緩存的使用。 JetCache提供了比SpringCache更加強大的注解,可以原生的支持TTL、兩級緩存、分布式自動刷新,還提供了Cache接口用于手工緩存操作。 當前有四個實現,RedisCache、TairCache(此部分未在github開源)、CaffeineCache(in memory)和一個簡易的LinkedHashMapCache(in memory),要添加新的實現也是非常簡單的。

全部特性:

通過統一的API訪問Cache系統 通過注解實現聲明式的方法緩存,支持TTL和兩級緩存 通過注解創建并配置Cache實例 針對所有Cache實例和方法緩存的自動統計 Key的生成策略和Value的序列化策略是可以配置的 分布式緩存自動刷新,分布式鎖 (2.2+) 異步Cache API (2.2+,使用Redis的lettuce客戶端時) Spring Boot支持

SpringBoot 項目中,引入如下依賴:

<dependency> <groupId>com.alicp.jetcache</groupId> <artifactId>jetcache-starter-redis</artifactId> <version>2.5.14</version></dependency>

配置:

server: port: 8083 servlet: context-path: /apijetcache: statIntervalMinutes: 15 areaInCacheName: false local: default: type: caffeine keyConvertor: fastjson remote: default: expireAfterWriteInMillis: 86400000 # 全局,默認超時時間,單位毫秒,這里設置了 24 小時 type: redis keyConvertor: fastjson valueEncoder: java #jsonValueEncoder #java valueDecoder: java #jsonValueDecoder poolConfig: minIdle: 5 maxIdle: 20 maxTotal: 50 host: ${redis.host} port: ${redis.port} database: 1redis: host: 127.0.0.1 port: 6379

Application.class

@EnableMethodCache(basePackages = 'com.example.springcachealibaba')@EnableCreateCacheAnnotation@SpringBootApplicationpublic class SpringCacheAlibabaApplication { public static void main(String[] args) { SpringApplication.run(SpringCacheAlibabaApplication.class, args); }}

字如其意,@EnableMethodCache 用于注解開啟方法上的緩存功能,@EnableCreateCacheAnnotation 用于注解開啟 @CreateCache 來引入 Cache Bean 的功能。兩套可以同時啟用。

這里以上面對 User 的增刪改查功能為例:

3.1 通過 @CreateCache 創建 Cache 實例

@Servicepublic class UserServiceImpl implements UserService { // 下面的示例為使用 @CreateCache 注解創建 Cache 對象來緩存數據的示例 @CreateCache(name = 'user:', expire = 5, timeUnit = TimeUnit.MINUTES) private Cache<Integer, User> userCache; @Autowired private UserDAO userDAO; @Override public User findById(Integer userId) { User user = userCache.get(userId); if (user == null || user.getId() == null) { user = userDAO.findById(userId); } return user; } @Override public User save(User user) { user.setUpdateTime(new Date()); userDAO.save(user); user = userDAO.findById(user.getId()); // cache userCache.put(user.getId(), user); return user; } @Override public boolean deleteById(Integer userId) { userCache.remove(userId); return userDAO.deleteById(userId); } @Override public List<User> findAll() { return userDAO.findAll(); }}

3.2 通過注解實現方法緩存

@Servicepublic class UserServiceImpl implements UserService { // 下面為使用 AOP 來緩存數據的示例 @Autowired private UserDAO userDAO; @Autowired private UserService userService; @Override @Cached(name = 'user:', key = '#userId', expire = 1000) //@Cached( name = 'user:', key = '#userId', serialPolicy = 'bean:jsonPolicy') public User findById(Integer userId) { System.out.println('userId: ' + userId); return userDAO.findById(userId); } @Override @CacheUpdate(name = 'user:', key = '#user.id', value = '#user') public User save(User user) { user.setUpdateTime(new Date()); boolean res = userDAO.save(user); if (res) { return userService.findById(user.getId()); } return null; } @Override @CacheInvalidate(name = 'user:', key = '#userId') public boolean deleteById(Integer userId) { return userDAO.deleteById(userId); } @Override public List<User> findAll() { return userDAO.findAll(); }}

這里用到了三個注解:@Cached/@CacheUpdate/@CacheInvalidate,分別對應著 Spring Cache 中的 @Cacheable/@CachePut/@CacheEvict

具體含義可以參考:https://github.com/alibaba/jetcache/wiki/MethodCache_CN

3.3 自定義序列化器

默認的 value 存儲格式是 binary 的,JetCache 提供的 Redis key 和 value 的序列化器僅有 java 和 kryo 兩種。可以通過自定義序列化器來實現自己想要的序列化方式,比如 json。

JetCache 開發者提出:

jetcache老版本中是有三個序列化器的:java、kryo、fastjson。 但是fastjson做序列化兼容性不是特別好,并且某次升級以后單元測試就無法通過了,怕大家用了以后覺得有坑,就把它廢棄了。 現在默認的序列化器是性能最差,但是兼容性最好,大家也最熟悉的java序列化器。

參考原倉庫中 FAQ 中的建議,可以通過兩種方式來定義自己的序列化器。

3.3.1 實現 SerialPolicy 接口

第一種方式是定義一個 SerialPolicy 的實現類,然后將其注冊成一個 bean,然后在 @Cached 中的 serialPolicy 屬性中指明 bean:name

比如:

import com.alibaba.fastjson.JSONObject;import com.alicp.jetcache.CacheValueHolder;import com.alicp.jetcache.anno.SerialPolicy;import java.util.function.Function;public class JsonSerialPolicy implements SerialPolicy { @Override public Function<Object, byte[]> encoder() { return o -> { if (o != null) { CacheValueHolder cacheValueHolder = (CacheValueHolder) o; Object realObj = cacheValueHolder.getValue(); String objClassName = realObj.getClass().getName(); // 為防止出現 Value 無法強轉成指定類型對象的異常,這里生成一個 JsonCacheObject 對象,保存目標對象的類型(比如 User) JsonCacheObject jsonCacheObject = new JsonCacheObject(objClassName, realObj); cacheValueHolder.setValue(jsonCacheObject); return JSONObject.toJSONString(cacheValueHolder).getBytes(); } return new byte[0]; }; } @Override public Function<byte[], Object> decoder() { return bytes -> { if (bytes != null) { String str = new String(bytes); CacheValueHolder cacheValueHolder = JSONObject.parseObject(str, CacheValueHolder.class); JSONObject jsonObject = JSONObject.parseObject(str); // 首先要解析出 JsonCacheObject,然后獲取到其中的 realObj 及其類型 JSONObject jsonOfMy = jsonObject.getJSONObject('value'); if (jsonOfMy != null) { JSONObject realObjOfJson = jsonOfMy.getJSONObject('realObj'); String className = jsonOfMy.getString('className'); try { Object realObj = realObjOfJson.toJavaObject(Class.forName(className)); cacheValueHolder.setValue(realObj); } catch (ClassNotFoundException e) { e.printStackTrace(); } } return cacheValueHolder; } return null; }; }}

注意,在 JetCache 的源碼中,我們看到實際被緩存的對象的 CacheValueHolder,這個對象包括了一個泛型字段 V,這個 V 就是實際被緩存的數據。為了將 JSON 字符串和 CacheValueHolder(包括了泛型字段 V )進行互相轉換,我在轉換過程中使用 CacheValueHolder 和一個自定義的 JsonCacheObject 類,其代碼如下:

public class JsonCacheObject<V> { private String className; private V realObj; public JsonCacheObject() { } public JsonCacheObject(String className, V realObj) { this.className = className; this.realObj = realObj; } // ignore get and set methods}

然后定義一個配置類:

@Configurationpublic class JetCacheConfig { @Bean(name = 'jsonPolicy') public JsonSerializerPolicy jsonSerializerPolicy() { return new JsonSerializerPolicy(); }}

使用很簡單,比如:

@Cached( name = 'user:', key = '#userId', serialPolicy = 'bean:jsonPolicy')

這種序列化方法是局部的,只能對單個緩存生效。

下面介紹如何全局序列化方法。

3.3.2 全局配置 SpringConfigProvider

JetCache 默認提供了兩種序列化規則:KRYO 和 JAVA (不區分大小寫)。

這里在上面的 JSONSerialPolicy 的基礎上,定義一個新的 SpringConfigProvider:

@Configurationpublic class JetCacheConfig { @Bean public SpringConfigProvider springConfigProvider() { return new SpringConfigProvider() { @Override public Function<byte[], Object> parseValueDecoder(String valueDecoder) { if (valueDecoder.equalsIgnoreCase('myJson')) { return new JsonSerialPolicy().decoder(); } return super.parseValueDecoder(valueDecoder); } @Override public Function<Object, byte[]> parseValueEncoder(String valueEncoder) { if (valueEncoder.equalsIgnoreCase('myJson')) { return new JsonSerialPolicy().encoder(); } return super.parseValueEncoder(valueEncoder); } }; }}

這里使用了類型 myJson 作為新序列化類型的名稱,這樣我們就可以在配置文件的 jetcache.xxx.valueEncoder 和 jetcache.xxx.valueDecoder 這兩個配置項上設置值 myJson/java/kryo 三者之一了。

關于 Java 中緩存框架的知識就介紹到這里了,還有一些更加深入的知識,比如:如何保證分布式環境中緩存數據的一致性、緩存數據的刷新、多級緩存時定制化緩存策略等等。這些都留待以后再學習和介紹吧!

參考資料:

Spring Cache: https://docs.spring.io/spring/docs/current/spring-framework-reference/integration.html#cacheCaffeine 緩存: https://www.jianshu.com/p/9a80c662dac4Layering-Cache:https://github.com/xiaolyuh/layering-cacheAlibaba JetCache: https://github.com/alibaba/jetcacheJetCache FAQ: https://github.com/alibaba/jetcache/wiki/FAQ_CN

以上就是詳解SpringBoot的三種緩存技術的詳細內容,更多關于SpringBoot 緩存技術的資料請關注好吧啦網其它相關文章!

標簽: Spring
相關文章:
主站蜘蛛池模板: 亚洲国产精品99久久久久久久久 | 日本黄色短片 | 91亚洲国产成人久久精品网站 | 国产精品久久久久久久久久ktv | 久久久精品久久久久 | 韩国三级中文字幕hd久久精品 | 一区二区三区四区av | 国产精品久久久久毛片软件 | 欧美美女黄色网 | 中文字幕在线第一页 | 噜噜噜噜噜在线视频 | 美女视频久久 | 欧美精品一区二区三区免费视频 | 天天摸夜夜摸爽爽狠狠婷婷97 | www.国产| 一级毛片色一级 | 欧美精品成人一区二区三区四区 | 精品永久| 日本成年人免费网站 | 电影午夜精品一区二区三区 | 影视在线观看 | 91 视频网站 | 久久久www成人免费精品 | 国产91 在线播放 | 亚洲精品国产乱码在线看蜜月 | 精品天堂 | 欧美日韩一区二区三区 | 99精品免费视频 | 精品国产依人香蕉在线精品 | 青楼18春一级毛片 | 欧美激情伊人 | 久久亚洲一区二区三区四区五区高 | 亚洲激情在线 | a一级片在线观看 | 国产亚洲www | 毛片aaa | 自拍偷拍一区二区三区 | 嫩草影院永久入口 | 99久久久久| 亚洲综合色网 | 亚洲一区 中文字幕 | 狠狠av| 亚洲人成在线播放 | 午夜大片在线观看 | 狠狠综合 | 在线视频久久 | 国产亚洲欧美精品永久 | 蜜臀影院 | 精品在线看 | av一区二区在线观看 | 成人午夜视频在线观看 | 久久久久久久久久久久久久久久久久久 | 亚洲高清视频一区二区三区 | 性大毛片视频 | 91精品国产一区二区三区四区在线 | 欧美激情综合五月色丁香小说 | 国产一级黄片毛片 | 国产在线91| 国产一区二区免费 | 国产区精品在线 | 在线毛片观看 | 亚洲www啪成人一区二区 | 国产午夜一区二区三区 | 国产精品无码久久久久 | 亚洲国产精品一区二区www | 国产欧美视频在线 | 另类五月天 | 午夜一级毛片 | 超碰一区二区三区 | 91电影在线观看 | 狠狠综合久久av一区二区老牛 | 国产精品视频一二三区 | 久久精品亚洲欧美日韩精品中文字幕 | 亚洲精品一二区 | 成人久久18 | 久久一区二区三区四区 | 色婷综合网| 午夜精品久久 | 亚洲成人免费 | 亚洲精品成人网 | 久久精av| 国产高清美女一级a毛片久久 | 国内自拍网站 | 91精品国产高清久久久久久久久 | 日韩在线国产精品 | 噜噜噜噜噜在线视频 | 久久久久9999国产精品 | 亚洲va中文字幕 | 日韩欧美中文字幕在线视频 | 精品中文字幕一区二区三区 | 国产精品亚洲成在人线 | 亚洲成人精品久久 | 91秦先生艺校小琴 | 玖玖精品视频 | 一区二区三区在线观看视频 | 中文字幕一区二区三区在线视频 | 精品国产欧美一区二区 | 日韩国产一区二区 | www.99精品| 国产成人精品久久二区二区91 | 日本在线视频一区 | 91在线视频播放 | 中文字幕乱码一区二区三区 | 欧美日韩精 | 天天操狠狠操 | 国产偷录视频叫床高潮对白 | 欧美激情一区二区 | www.久久.com| 国产视频中文字幕 | 婷婷免费在线观看 | 国产精品网站在线看 | 国产电影一区二区在线观看 | 日韩欧美网 | 日韩成人在线视频 | 96久久久| 国产精品夜夜春夜夜爽久久电影 | 亚洲网站免费 | 国产高清精品在线 | 久久免费精品视频 | 一区二区中文字幕 | 久久久人成影片一区二区三区 | 欧美三区视频 | 在线日韩视频 | 黄色电影天堂 | 国产精品亚洲精品 | 中文字幕日韩久久 | 国产精品二区三区 | 国产激情偷乱视频一区二区三区 | 国产视频网 | 99热精品视 | 51ⅴ精品国产91久久久久久 | 在线视频国产一区 | 不卡视频一区 | 欧美日产国产成人免费图片 | 午夜影院免费版 | 中文字幕在线三区 | 亚洲国产高清在线 | 日本aⅴ毛片成人实战推荐 成人免毛片 | 综合婷婷 | 亚洲生活片 | 国产精品天堂 | 成年人黄色免费视频 | 美女久久久久久久久久久 | 日韩第一区 | 老司机狠狠爱 | 日韩一区二区视频在线 | 精品国产不卡一区二区三区 | 人人插人人干 | 国产精品久久久久久婷婷天堂 | 久久伊人成人网 | 国产成人精品免费视频大全 | 国产在线一区二区三区 | 在线成人免费视频 | 成人一区二区三区久久精品嫩草 | 国产激情一区二区三区 | √新版天堂资源在线资源 | 中文字幕一区在线观看视频 | 亚洲视频区| 久久亚洲天堂 | 99re99| 四季久久免费一区二区三区四区 | 91视频免费观看 | 狠狠干狠狠干 | 色综合网站 | 国产欧美亚洲精品 | 一级一片在线观看 | 国产自在现线2019 | 超碰最新网址 | 国产一区二区视频精品 | 婷婷精品 | 福利在线播放 | 国产免费自拍 | 亚洲国产精品va在线看黑人 | 一级毛片免费 | 在线中文字幕av | av男人的天堂在线 | 欧美日韩成人在线 | 久久精品网 | 久久精品欧美 | 国产精品一区二区三区免费视频 | 99re免费视频精品全部 | 9999国产精品欧美久久久久久 | 四虎首页| 操碰97 | 天天色影视综合 | 久久成人国产精品 | 精品三区 | 99久久综合 | 国产视频一区在线 | 狠狠艹视频 | 国产精品久久久久久久久久 | 日韩电影专区 | 国产精品久久久久久久久久久久久 | 亚洲黄色av网站 | 精品香蕉一区二区三区 | 国产精品视频一区二区三区 | 欧美午夜精品久久久 | 亚洲高清视频在线观看 | www日本在线 | 国产大学生情侣呻吟视频 | 福利视频网站 | 视频一区二区三区中文字幕 | 一级片免费视频 | 青青久久久 | 亚洲成人一区二区三区 | 久久久精品日本 | 国产99久久精品一区二区永久免费 | 亚洲精品一区二三区 | 性做久久久久久久免费看 | 亚洲第一色片 | 超级碰在线视频 | 国产亚洲精品久久久久动 | 国产日韩欧美视频 | 亚洲国产精品久久人人爱 | 日韩欧美中文字幕在线视频 | 黄色拍拍视频 | 免费人成电影 | 日韩成人在线播放 | 久久成人国产 | 欧美精品一区二区三区蜜桃视频 | 久久久精品亚洲 | 99r精品在线| 龙珠z中文版普通话 | h片在线免费观看 | 免费国产一区二区 | 国产精品日韩欧美一区二区三区 | 免费av在线| 欧美日本精品 | 亚洲综合大片69999 | 欧美一级二级三级 | 国产欧美综合一区二区三区 | 久久精品在线视频 | 视频一区二区三 | 成人免费视频网站在线观看 | 激情网五月天 | 91色在线观看 | 成人在线观看免费 | 国产女人爽到高潮免费视频 | 国产综合视频在线播放 | 91中文字幕 | 激情91| 精品成人av| 91久久久www播放日本观看 | 久久99精品久久久久久青青日本 | 美女福利网站 | 欧美一区二区三区在线观看 | 簧片av | 欧美日韩国产一区二区三区 | 国产视频一视频二 | 中国妞xxx | 国产一区在线视频 | 欧洲尺码日本国产精品 | 国产精品久久免费视频在线 | 久久精品亚洲精品国产欧美 | 欧美日韩综合精品 | 欧美 亚洲 另类 激情 另类 | 精品一二三区 | 亚洲中出| 亚洲 中文 欧美 日韩 在线观看 | 中文字幕在线第一页 | 欧美国产综合 | 成人免费观看男女羞羞视频 | 偷偷干夜夜拍 | 中文字幕第十二页 | 精品影视| 在线看av网址 | 免费av播放 | 99看片| 在线观看不卡一区 | 精品视频一区二区 | 国产精品久久久久久久 | 久久一区二区三 | www.久久久| 国产区免费观看 | 日本做暖暖视频高清观看 | 久久亚洲天堂 | 成人激情视频在线 | 秋霞在线一区 | 欧美一级艳情片免费观看 | 久久久精品高清 | 精品中文字幕在线观看 | 精品久久久久久国产 | 91精品国产一区二区三区免费 | 精品欧美日韩 | 亚洲最新av| 人人精久 | 真实国产露脸乱 | 91在线看| 国产精品99一区二区三区 | 精品国产区 | 亚洲一区精品在线 | 国产欧美日韩在线观看 | 亚洲人人 | 欧美一区永久视频免费观看 | 欧美日韩国产在线 | 久久久精品欧美一区二区免费 | 国产亚洲一区二区三区在线 | 中文字幕7777 | 成人高清av | 日韩成人免费中文字幕 | 99国产精品久久久久久久成人热 | 欧美视频一区 | 色黄视频在线观看 | 久久亚洲综合 | 超碰在线国产 | 在线观看免费黄色 | 国产亚洲欧美一区 | 91久久国产综合久久 | 国产精品久久国产精品 | 日韩高清一区 | 成人欧美一区二区三区白人 | 国产一区二区三区精品久久久 | 欧美天天| 久久久www| 久久久精选 | 一区二区三区视频 | 91中文字幕网| 正在播放亚洲 | 亚洲一区二区av | 后人极品翘臀美女在线播放 | 日韩精品在线一区 | 岛国av免费看| 综合一区二区三区 | 久久国产精品99精国产 | 日本五月婷婷 | 99色综合 | 99热在线播放 | 久久成人一区 | www中文字幕在线观看 | 日本亚洲一区 | 国产成人高清 | 成人在线不卡 | 日韩特黄一级欧美毛片特黄 | 久久国产精品免费一区二区三区 | 九色一区 | 亚洲国产精品久久久久秋霞蜜臀 | 日韩在线视频一区 | 国产一区二区在线看 | 欧美一级在线观看 | 91一级| 国产欧美一区二区三区在线看 | 国产欧美久久一区二区三区 | 成人综合网站 | 中文字幕免费在线 | 久操伊人| 日韩免费视频 | 91日日| 九九re| 欧美一级艳片视频免费观看 | 亚洲在线一区二区 | 日韩激情免费 | 精品国产31久久久久久 | 精品久久久久久久 | 成a人片在线观看 | 亚洲区国产区 | 国产精品久久一区 | 中文日韩在线 | 中文无码久久精品 | 日本久久精品 | 日日操夜| 成人免费一区二区三区视频网站 | 黄色毛片免费看 | 视频一区在线 | 亚洲成人高清 | 国产99久久久精品视频 | 精品一区二区三区在线观看视频 | 欧美国产综合一区 | 日韩综合在线 | 亚洲高清中文字幕 | 中文视频一区 | 国产一区二区精品 | 欧美福利在线 | 欧美一级在线免费观看 | 欧美激情性国产欧美无遮挡 | 中国大陆高清aⅴ毛片 | 国产在线精品一区二区三区 | 国产成人免费视频网站视频社区 | 成人小视频在线播放 | 久久久免费av | 蜜桃视频网站在线观看 | 久久久国产视频 | 毛片a片| 日韩福利在线 | 国产精品一区av | 成人精品一区二区三区中文字幕 | 天天久久| 欧美精产国品一二三区 | 一级黄色国产 | 久久久一区二区三区 | 成人中文视频 | 国内精品久久久久久中文字幕 | 欧美日韩亚洲综合 | 免费av播放 | 超碰在线播 | 久久精品六 | www日韩| 久久久久久久 | 99国产精品久久久久久久 | 国产精品黄视频 | 91精品亚洲 | 成人国产精品久久久 | 91精品久久久久久久久久 | 日韩素人一区二区三区 | 午夜精品视频在线观看 | 91免费在线播放 | 国产欧美综合一区二区三区 | 91麻豆产精品久久久 | 亚洲国产精品久久 | 亚洲视频在线播放 | 在线播放国产精品 | 成人在线一区二区 | 91在线免费观看 | 亚洲国产区 | 国产精品美女久久久久久久久久久 | 成人午夜av | 天堂综合网久久 | 国产99久久久久久免费看农村 | 国产精品久久久久久婷婷天堂 | 国产在线观 | 午夜在线电影 | 日韩av手机在线免费观看 | 久久精品在线视频 | 久久久久久久av | 自拍偷拍小视频 | 成人av免费观看 | 日韩视频中文字幕 | 国产一级特黄aaa大片 | 国产精品成人一区二区 | 日一日干一干 | 欧美一区二区三区四区视频 | 精品不卡| 成人国产精品久久久 | 精品国产乱码久久久久久1区2区 | 亚洲二区视频 | 人人看超碰 | 欧美在线激情 | 国产黄色av| 成人免费视频网 | 色婷婷亚洲| 日韩一级免费在线观看 | 日日操夜夜操免费视频 | 国产一区二区视频在线 | a视频在线观看 | 中国女人黄色大片 | 亚洲国产精品久久久久久女王 | 国产精品美女在线观看 | 久久久亚洲精品视频 | 国产视频一视频二 | 成人欧美一区二区三区黑人孕妇 | 91看片| 在线看欧美 | 超碰最新在线 | 欧美中文在线 | 午夜免费| 91精品一区二区 | 久久久久久国产 | 亚洲自拍一区在线 | 国产精品一区二区三区在线播放 | 躁躁躁日躁夜夜躁 | 亚洲一区二区日韩 | 欧美精品1区 | 91成人在线| 久久伊人中文字幕 | 国产精品视频在线观看 | 日韩专区一区二区三区 | 亚洲综合欧美日韩 | a级黄色在线观看 | 免费成人高清 | 在线成人国产 | 在线观看欧美一区二区三区 | 国产精品久久精品 | 色播99| 北条麻妃99精品青青久久 | 国产91精选| 一区电影 | 精品久久ai | 亚洲 中文 欧美 日韩 在线观看 | 黄色网址av | 国产精品久久国产精品 | av大片在线观看 | 男女视频在线 | 黄色一级片视频 | 91在线视频观看 | 欧美精品一区二区蜜臀亚洲 | 成人影音 | 成年人看的羞羞网站 | 久在线视频| 欧美激情精品久久久久久变态 | 国产成人精品网站 | 999久久国产 | 少妇淫片aaaaa毛片叫床爽 | 精品影院| 欧美成人免费一级人片100 | 久久久久久91香蕉国产 | 激情综合网五月婷婷 | 在线免费黄 | 午夜久久视频 | 奇米色欧美一区二区三区 | 免费看a | 国产日韩中文字幕 | 在线a电影 | 欧美一区二区久久久 | 国产日本欧美在线 | 亚洲一区二区中文字幕在线观看 | 国产极品视频在线观看 | 精品综合久久 | 一区二区三区在线观看免费 | 国产欧精精久久久久久久 | 免费观看一区二区三区 | 国产在线小视频 | 国产激情在线看 | 欧美国产日韩在线观看 | baoyu133. con永久免费视频 | 黄网站免费在线观看 | 伊人伊人 | 亚洲36d大奶网 | 精品久久一区二区三区 | 一区电影 | 秋霞av电影| 久久精品一区二区三区四区毛片 | 91视频网址| 日韩精品1区2区3区 成人黄页在线观看 | 四虎首页| 国产精品99久久 | 可以在线观看的黄色 | 国产精品一区一区三区 | 免费在线一区二区三区 | 国产精品第一区第27页 | 中文字幕 视频一区 | 黄免费看 | 午夜在线视频免费观看 | 中文字幕久久精品 | 午夜电影 | 日日爱夜夜爽 | 五月激情综合 | 欧美一区二区三区国产精品 | 欧美精品亚洲 | 999久久久国产精品 欧美成人h版在线观看 | 一区在线观看视频 | 91在线视频免费播放 | 最新国产视频 | 中文字幕亚洲一区 | 欧美午夜一区二区福利视频 | 一级黄色生活视频 | 色综合天天综合网国产成人网 | 色综合久久伊人 | www.成人 | av一级毛片 | 玖玖玖影院 | 一级毛片免费完整视频 | 97精品超碰一区二区三区 | 日本三级电影免费 | 日韩快播电影网 | 国产乱肥老妇国产一区二 | 超碰官网 | 超碰在线天天 | 毛片免费看 | 三级av网站 | 女人毛片a毛片久久人人 | 电影91久久久 | 日韩视频三区 | 日韩视频欧美视频 | 日韩欧美亚洲 | 特黄级国产片 | 99r在线 | 91在线网址 | 97精品国产 | 一二三四在线视频观看社区 | 国产精品亚洲天堂 | 亚洲精品一区久久久久久 | 亚洲成人精品 | 91欧美| 狠狠色狠狠色合久久伊人 | 国产成人精品a视频一区www | 午夜激情视频在线观看 | 国产成人在线一区二区 | 精品久久久久久国产 | 国产福利91精品 | 亚洲一区二区三区视频 | 国产精品久久久久国产a级 日韩在线二区 | 成人欧美一区二区三区黑人孕妇 | 野狼在线社区2017入口 | 97久久久国产精品 | 羞羞视频免费观看 | 99久久婷婷国产综合亚洲 | 高清国产午夜精品久久久久久 | 亚洲一区二区精品 | 精品国产91久久久久久久 | 国产在线一级片 | 日韩一区二区三区精品 | 中文字幕亚洲欧美日韩在线不卡 | 毛片91 | 国产成人福利视频 | 成人免费高清 | 精品一区二区在线观看 | 国产18av| 亚洲一区免费观看 | 人人爱夜夜爽日日视频 | 国产欧美精品一区二区三区四区 | 91香蕉视频| 91精品国产色综合久久不卡98 | 国产精品视频 | 国产精品毛片无码 | 欧美精品一区三区 | 蜜臀91精品国产高清在线观看 | 亚洲国产精品久久久 | 日韩成人免费视频 | 黄视频在线播放 | 国产精品2 | 91精品国产91综合久久蜜臀 | 亚洲三区视频 | 亚洲男人av | 一级在线| 不卡视频一区二区三区 | 国产免费av在线 |