午夜视频免费看_日韩三级电影网站_国产精品久久一级_亚洲一级在线播放_人妻体内射精一区二区三区_91夜夜揉人人捏人人添红杏_91福利在线导航_国产又粗又猛又黄又爽无遮挡_欧美日韩一区在线播放_中文字幕一区二区三区四区不卡 _日日夜夜精品视频免费观看_欧美韩日一区二区三区

主頁 > 知識庫 > Redis和springboot 整合redisUtil類的示例代碼

Redis和springboot 整合redisUtil類的示例代碼

熱門標簽:南京手機外呼系統廠家 高碑店市地圖標注app 臺灣電銷 地圖標注工廠入駐 b2b外呼系統 廊坊外呼系統在哪買 400電話辦理的口碑 一個地圖標注多少錢 四川穩定外呼系統軟件

一、引入依賴

dependency>
  groupId>org.springframework.boot/groupId>
  artifactId>spring-boot-starter-data-redis/artifactId>
/dependency>

二、在application.yml 配置redis服務器

spring:
 # 環境 dev|test|prod
 profiles:
  active: dev
 servlet:
  multipart:
   max-file-size: 100MB
   max-request-size: 100MB
   enabled: true
 redis:
  database: 0      # Redis服務器數據庫
  host: 192.168.6.27  # Redis服務器地址
  port: 6379      # Redis服務器連接端口
  password: 123456   # Redis服務器連接密碼(默認為空)
  timeout: 6000ms    # 連接超時時間(毫秒)
  jedis:
   pool:
    max-active: 200  # 連接池最大連接數(使用負值表示沒有限制)
    max-wait: -1   # 連接池最大阻塞等待時間(使用負值表示沒有限制)
    max-idle: 10   # 連接池中的最大空閑連接
    min-idle: 0    # 連接池中的最小空閑連接

三、寫一個redis配置類

(1)聊聊RedisTemplate的自動配置 其實現在就可以在代碼中注入RedisTemplate,為啥可以直接注入呢?先看下源碼吧。下圖為RedisAutoConfiguration類中的截圖,為了防止圖片失效,代碼也貼上。

通過源碼可以看出,SpringBoot自動幫我們在容器中生成了一個RedisTemplate和一個StringRedisTemplate。但是,這個RedisTemplate的泛型是Object,Object>,寫代碼不方便,需要寫好多類型轉換的代碼;我們需要一個泛型為String,Object>形式的RedisTemplate。并且,這個RedisTemplate沒有設置數據存在Redis時,key及value的序列化方式。
看到這個@ConditionalOnMissingBean注解后,就知道如果Spring容器中有了RedisTemplate對象了,這個自動配置的RedisTemplate不會實例化。因此我們可以直接自己寫個配置類,配置RedisTemplate。(2)既然自動配置不好用,就重新配置一個RedisTemplate

包的結構如下

代碼如下:

package com.yux.redisdemo.redis;
 
import org.springframework.context.annotation.Bean;
 
import org.springframework.context.annotation.Configuration;
 
import org.springframework.data.redis.connection.RedisConnectionFactory;
 
import org.springframework.data.redis.core.RedisTemplate;
 
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
 
import org.springframework.data.redis.serializer.StringRedisSerializer;
 
import com.fasterxml.jackson.annotation.JsonAutoDetect;
 
import com.fasterxml.jackson.annotation.PropertyAccessor;
 
import com.fasterxml.jackson.databind.ObjectMapper;
 
/**
15
 * redis配置類
16
 * @author YUX
17
 * @date  2018年6月6日
18
 *
19
 */
 
@Configuration
public class RedisConfig {
 
  @Bean
  @SuppressWarnings("all")
  public RedisTemplateString, Object> redisTemplate(RedisConnectionFactory factory) {
 
    RedisTemplateString, Object> template = new RedisTemplateString, Object>();
 
    template.setConnectionFactory(factory);
 
    Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
 
    ObjectMapper om = new ObjectMapper();
 
    om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
 
    om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
 
    jackson2JsonRedisSerializer.setObjectMapper(om);
 
    StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
 
    // key采用String的序列化方式
 
    template.setKeySerializer(stringRedisSerializer);
 
    // hash的key也采用String的序列化方式
 
    template.setHashKeySerializer(stringRedisSerializer);
 
    // value序列化方式采用jackson
 
    template.setValueSerializer(jackson2JsonRedisSerializer);
 
    // hash的value序列化方式采用jackson
    template.setHashValueSerializer(jackson2JsonRedisSerializer);
 
    template.afterPropertiesSet();
 
    return template;
 
  }
 
}

 四、編寫一個RedisUtil類

package com.yux.redisdemo.redis;
 
import java.util.List;
 
import java.util.Map;
 
import java.util.Set;
 
import java.util.concurrent.TimeUnit;
 
import org.springframework.beans.factory.annotation.Autowired;
 
import org.springframework.data.redis.core.RedisTemplate;
 
import org.springframework.stereotype.Component;
 
import org.springframework.util.CollectionUtils;
 
/**
14
 * Redis工具類
15
 * @author YUX
16
 * @date  2018年6月7日
17
 */
 
@Component
public final class RedisUtil {
 
 
  @Autowired
 
  private RedisTemplateString, Object> redisTemplate;
 
  // =============================common============================
 
  /**
   * 26
   * 指定緩存失效時間
   * 27
   *
   * @param key 鍵
   *       28
   * @param time 時間(秒)
   *       29
   * @return 30
   */
 
  public boolean expire(String key, long time) {
 
    try {
 
      if (time > 0) {
 
        redisTemplate.expire(key, time, TimeUnit.SECONDS);
 
      }
 
      return true;
 
    } catch (Exception e) {
 
      e.printStackTrace();
 
      return false;
 
    }
 
  }
 
  /**
   * 44
   * 根據key 獲取過期時間
   * 45
   *
   * @param key 鍵 不能為null
   *      46
   * @return 時間(秒) 返回0代表為永久有效
   * 47
   */
 
  public long getExpire(String key) {
 
    return redisTemplate.getExpire(key, TimeUnit.SECONDS);
 
  }
 
  /**
   * 53
   * 判斷key是否存在
   * 54
   *
   * @param key 鍵
   *      55
   * @return true 存在 false不存在
   * 56
   */
 
  public boolean hasKey(String key) {
 
    try {
 
      return redisTemplate.hasKey(key);
 
    } catch (Exception e) {
 
      e.printStackTrace();
 
      return false;
 
    }
 
  }
 
  /**
   * 67
   * 刪除緩存
   * 68
   *
   * @param key 可以傳一個值 或多個
   *      69
   */
 
  @SuppressWarnings("unchecked")
 
  public void del(String... key) {
 
    if (key != null  key.length > 0) {
 
      if (key.length == 1) {
 
        redisTemplate.delete(key[0]);
 
      } else {
 
        redisTemplate.delete(CollectionUtils.arrayToList(key));
 
      }
 
    }
 
  }
 
  // ============================String=============================
 
  /**
   * 83
   * 普通緩存獲取
   * 84
   *
   * @param key 鍵
   *      85
   * @return 值
   * 86
   */
 
  public Object get(String key) {
 
    return key == null ? null : redisTemplate.opsForValue().get(key);
 
  }
 
  /**
   * 92
   * 普通緩存放入
   * 93
   *
   * @param key  鍵
   *       94
   * @param value 值
   *       95
   * @return true成功 false失敗
   * 96
   */
 
  public boolean set(String key, Object value) {
 
    try {
 
      redisTemplate.opsForValue().set(key, value);
 
      return true;
 
    } catch (Exception e) {
 
      e.printStackTrace();
 
      return false;
 
    }
 
  }
 
  /**
   * 109
   * 普通緩存放入并設置時間
   * 110
   *
   * @param key  鍵
   *       111
   * @param value 值
   *       112
   * @param time 時間(秒) time要大于0 如果time小于等于0 將設置無限期
   *       113
   * @return true成功 false 失敗
   * 114
   */
 
  public boolean set(String key, Object value, long time) {
 
    try {
 
      if (time > 0) {
 
        redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
 
      } else {
 
        set(key, value);
 
      }
 
      return true;
 
    } catch (Exception e) {
 
      e.printStackTrace();
 
      return false;
 
    }
 
  }
 
  /**
   * 130
   * 遞增
   * 131
   *
   * @param key  鍵
   *       132
   * @param delta 要增加幾(大于0)
   *       133
   * @return 134
   */
 
  public long incr(String key, long delta) {
 
    if (delta  0) {
 
      throw new RuntimeException("遞增因子必須大于0");
 
    }
 
    return redisTemplate.opsForValue().increment(key, delta);
 
  }
 
  /**
   * 143
   * 遞減
   * 144
   *
   * @param key  鍵
   *       145
   * @param delta 要減少幾(小于0)
   *       146
   * @return 147
   */
 
  public long decr(String key, long delta) {
 
    if (delta  0) {
 
      throw new RuntimeException("遞減因子必須大于0");
 
    }
 
    return redisTemplate.opsForValue().increment(key, -delta);
 
  }
 
  // ================================Map=================================
 
  /**
   * 157
   * HashGet
   * 158
   *
   * @param key 鍵 不能為null
   *       159
   * @param item 項 不能為null
   *       160
   * @return 值
   * 161
   */
 
  public Object hget(String key, String item) {
 
    return redisTemplate.opsForHash().get(key, item);
 
  }
 
  /**
   * 167
   * 獲取hashKey對應的所有鍵值
   * 168
   *
   * @param key 鍵
   *      169
   * @return 對應的多個鍵值
   * 170
   */
 
  public MapObject, Object> hmget(String key) {
 
    return redisTemplate.opsForHash().entries(key);
 
  }
 
  /**
   * 176
   * HashSet
   * 177
   *
   * @param key 鍵
   *      178
   * @param map 對應多個鍵值
   *      179
   * @return true 成功 false 失敗
   * 180
   */
 
  public boolean hmset(String key, MapString, Object> map) {
 
    try {
 
      redisTemplate.opsForHash().putAll(key, map);
 
      return true;
 
    } catch (Exception e) {
 
      e.printStackTrace();
 
      return false;
 
    }
 
  }
 
  /**
   * 192
   * HashSet 并設置時間
   * 193
   *
   * @param key 鍵
   *       194
   * @param map 對應多個鍵值
   *       195
   * @param time 時間(秒)
   *       196
   * @return true成功 false失敗
   * 197
   */
 
  public boolean hmset(String key, MapString, Object> map, long time) {
 
    try {
 
      redisTemplate.opsForHash().putAll(key, map);
 
      if (time > 0) {
 
        expire(key, time);
 
      }
 
      return true;
 
    } catch (Exception e) {
 
      e.printStackTrace();
 
      return false;
 
    }
 
  }
 
  /**
   * 212
   * 向一張hash表中放入數據,如果不存在將創建
   * 213
   *
   * @param key  鍵
   *       214
   * @param item 項
   *       215
   * @param value 值
   *       216
   * @return true 成功 false失敗
   * 217
   */
 
  public boolean hset(String key, String item, Object value) {
 
    try {
 
      redisTemplate.opsForHash().put(key, item, value);
 
      return true;
 
    } catch (Exception e) {
 
      e.printStackTrace();
 
      return false;
 
    }
 
  }
 
  /**
   * 229
   * 向一張hash表中放入數據,如果不存在將創建
   * 230
   *
   * @param key  鍵
   *       231
   * @param item 項
   *       232
   * @param value 值
   *       233
   * @param time 時間(秒) 注意:如果已存在的hash表有時間,這里將會替換原有的時間
   *       234
   * @return true 成功 false失敗
   * 235
   */
 
  public boolean hset(String key, String item, Object value, long time) {
 
    try {
 
      redisTemplate.opsForHash().put(key, item, value);
 
      if (time > 0) {
 
        expire(key, time);
 
      }
 
      return true;
 
    } catch (Exception e) {
 
      e.printStackTrace();
 
      return false;
 
    }
 
  }
 
  /**
   * 250
   * 刪除hash表中的值
   * 251
   *
   * @param key 鍵 不能為null
   *       252
   * @param item 項 可以使多個 不能為null
   *       253
   */
 
  public void hdel(String key, Object... item) {
 
    redisTemplate.opsForHash().delete(key, item);
 
  }
 
  /**
   * 259
   * 判斷hash表中是否有該項的值
   * 260
   *
   * @param key 鍵 不能為null
   *       261
   * @param item 項 不能為null
   *       262
   * @return true 存在 false不存在
   * 263
   */
 
  public boolean hHasKey(String key, String item) {
 
    return redisTemplate.opsForHash().hasKey(key, item);
 
  }
 
  /**
   * 269
   * hash遞增 如果不存在,就會創建一個 并把新增后的值返回
   * 270
   *
   * @param key 鍵
   *       271
   * @param item 項
   *       272
   * @param by  要增加幾(大于0)
   *       273
   * @return 274
   */
 
  public double hincr(String key, String item, double by) {
 
    return redisTemplate.opsForHash().increment(key, item, by);
 
  }
 
  /**
   * 280
   * hash遞減
   * 281
   *
   * @param key 鍵
   *       282
   * @param item 項
   *       283
   * @param by  要減少記(小于0)
   *       284
   * @return 285
   */
 
  public double hdecr(String key, String item, double by) {
 
    return redisTemplate.opsForHash().increment(key, item, -by);
 
  }
 
  // ============================set=============================
 
  /**
   * 292
   * 根據key獲取Set中的所有值
   * 293
   *
   * @param key 鍵
   *      294
   * @return 295
   */
 
  public SetObject> sGet(String key) {
 
    try {
 
      return redisTemplate.opsForSet().members(key);
 
    } catch (Exception e) {
 
      e.printStackTrace();
 
      return null;
 
    }
 
  }
 
  /**
   * 306
   * 根據value從一個set中查詢,是否存在
   * 307
   *
   * @param key  鍵
   *       308
   * @param value 值
   *       309
   * @return true 存在 false不存在
   * 310
   */
 
  public boolean sHasKey(String key, Object value) {
 
    try {
 
      return redisTemplate.opsForSet().isMember(key, value);
 
    } catch (Exception e) {
 
      e.printStackTrace();
 
      return false;
 
    }
 
  }
 
  /**
   * 321
   * 將數據放入set緩存
   * 322
   *
   * @param key  鍵
   *        323
   * @param values 值 可以是多個
   *        324
   * @return 成功個數
   * 325
   */
 
  public long sSet(String key, Object... values) {
 
    try {
 
      return redisTemplate.opsForSet().add(key, values);
 
    } catch (Exception e) {
 
      e.printStackTrace();
 
      return 0;
 
    }
 
  }
 
  /**
   * 336
   * 將set數據放入緩存
   * 337
   *
   * @param key  鍵
   *        338
   * @param time  時間(秒)
   *        339
   * @param values 值 可以是多個
   *        340
   * @return 成功個數
   * 341
   */
 
  public long sSetAndTime(String key, long time, Object... values) {
 
    try {
 
      Long count = redisTemplate.opsForSet().add(key, values);
 
      if (time > 0)
 
        expire(key, time);
 
      return count;
 
    } catch (Exception e) {
 
      e.printStackTrace();
 
      return 0;
 
    }
 
  }
 
  /**
   * 355
   * 獲取set緩存的長度
   * 356
   *
   * @param key 鍵
   *      357
   * @return 358
   */
 
  public long sGetSetSize(String key) {
 
    try {
 
      return redisTemplate.opsForSet().size(key);
 
    } catch (Exception e) {
 
      e.printStackTrace();
 
      return 0;
 
    }
 
  }
 
  /**
   * 369
   * 移除值為value的
   * 370
   *
   * @param key  鍵
   *        371
   * @param values 值 可以是多個
   *        372
   * @return 移除的個數
   * 373
   */
 
  public long setRemove(String key, Object... values) {
 
    try {
 
      Long count = redisTemplate.opsForSet().remove(key, values);
 
      return count;
 
    } catch (Exception e) {
 
      e.printStackTrace();
 
      return 0;
 
    }
 
  }
 
  // ===============================list=================================
 
  /**
   * 386
   * 獲取list緩存的內容
   * 387
   *
   * @param key  鍵
   *       388
   * @param start 開始
   *       389
   * @param end  結束 0 到 -1代表所有值
   *       390
   * @return 391
   */
 
  public ListObject> lGet(String key, long start, long end) {
 
    try {
 
      return redisTemplate.opsForList().range(key, start, end);
 
    } catch (Exception e) {
 
      e.printStackTrace();
 
      return null;
 
    }
 
  }
 
  /**
   * 402
   * 獲取list緩存的長度
   * 403
   *
   * @param key 鍵
   *      404
   * @return 405
   */
 
  public long lGetListSize(String key) {
 
    try {
 
      return redisTemplate.opsForList().size(key);
 
    } catch (Exception e) {
 
      e.printStackTrace();
 
      return 0;
 
    }
 
  }
 
  /**
   * 416
   * 通過索引 獲取list中的值
   * 417
   *
   * @param key  鍵
   *       418
   * @param index 索引 index>=0時, 0 表頭,1 第二個元素,依次類推;index0時,-1,表尾,-2倒數第二個元素,依次類推
   *       419
   * @return 420
   */
 
  public Object lGetIndex(String key, long index) {
 
    try {
 
      return redisTemplate.opsForList().index(key, index);
 
    } catch (Exception e) {
 
      e.printStackTrace();
 
      return null;
 
    }
 
  }
 
  /**
   * 431
   * 將list放入緩存
   * 432
   *
   * @param key  鍵
   *       433
   * @param value 值
   *       434
   * @param time 時間(秒)
   *       435
   * @return 436
   */
 
  public boolean lSet(String key, Object value) {
 
    try {
 
      redisTemplate.opsForList().rightPush(key, value);
 
      return true;
 
    } catch (Exception e) {
 
      e.printStackTrace();
 
      return false;
 
    }
 
  }
 
  /**
   * 將list放入緩存
   *
   * @param key  鍵
   * @param value 值
   * @param time 時間(秒)
   * @return
   */
 
  public boolean lSet(String key, Object value, long time) {
 
    try {
 
      redisTemplate.opsForList().rightPush(key, value);
 
      if (time > 0)
 
        expire(key, time);
 
      return true;
 
    } catch (Exception e) {
 
      e.printStackTrace();
 
      return false;
 
    }
 
  }
 
  /**
   * 467
   * 將list放入緩存
   * 468
   *
   * @param key  鍵
   *       469
   * @param value 值
   *       470
   * @param time 時間(秒)
   *       471
   * @return 472
   */
 
  public boolean lSet(String key, ListObject> value) {
 
    try {
 
      redisTemplate.opsForList().rightPushAll(key, value);
 
      return true;
 
    } catch (Exception e) {
 
      e.printStackTrace();
 
      return false;
 
    }
 
  }
 
  /**
   * 484
   * 將list放入緩存
   * 485
   * p>
   * 486
   *
   * @param key  鍵
   *       487
   * @param value 值
   *       488
   * @param time 時間(秒)
   *       489
   * @return 490
   */
 
  public boolean lSet(String key, ListObject> value, long time) {
 
    try {
 
      redisTemplate.opsForList().rightPushAll(key, value);
 
      if (time > 0)
 
        expire(key, time);
 
      return true;
 
    } catch (Exception e) {
 
      e.printStackTrace();
 
      return false;
 
    }
 
  }
 
  /**
   * 504
   * 根據索引修改list中的某條數據
   * 505
   *
   * @param key  鍵
   *       506
   * @param index 索引
   *       507
   * @param value 值
   *       508
   * @return 509
   */
 
  public boolean lUpdateIndex(String key, long index, Object value) {
 
    try {
 
      redisTemplate.opsForList().set(key, index, value);
 
      return true;
 
    } catch (Exception e) {
 
      e.printStackTrace();
 
      return false;
 
    }
 
  }
 
  /**
   * 521
   * 移除N個值為value
   * 522
   *
   * @param key  鍵
   *       523
   * @param count 移除多少個
   *       524
   * @param value 值
   *       525
   * @return 移除的個數
   * 526
   */
 
  public long lRemove(String key, long count, Object value) {
 
    try {
 
      Long remove = redisTemplate.opsForList().remove(key, count, value);
 
      return remove;
 
    } catch (Exception e) {
 
      e.printStackTrace();
 
      return 0;
 
    }
 
  }
}

五、在service中注入RedisUtil可用

到此這篇關于Redis和springboot 整合redisUtil類的示例代碼的文章就介紹到這了,更多相關Redis和springboot 整合redisUtil類內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • springboot整合redis集群過程解析
  • SpringBoot中Shiro緩存使用Redis、Ehcache的方法
  • SpringBoot 整合 Lettuce Redis的實現方法
  • 基于springboot和redis實現單點登錄
  • Scala 操作Redis使用連接池工具類RedisUtil

標簽:泰州 南寧 河源 定州 甘南 畢節 拉薩 伊春

巨人網絡通訊聲明:本文標題《Redis和springboot 整合redisUtil類的示例代碼》,本文關鍵詞  Redis,和,springboot,整合,redisUtil,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Redis和springboot 整合redisUtil類的示例代碼》相關的同類信息!
  • 本頁收集關于Redis和springboot 整合redisUtil類的示例代碼的相關信息資訊供網民參考!
  • 推薦文章
    国产日本欧美一区二区三区在线 | 91精品国产91| 男人添女荫道口女人有什么感觉| 福利所第一导航| thepron国产精品| 精品亚洲一区二区三区| 日本一区免费| 久久国产精品波多野结衣| 成人免费福利片| 国产亚洲精品久久久久久777 | 全国精品久久少妇| 制服丝袜av成人在线看| 国产区二精品视| 成人无码精品1区2区3区免费看| 久久精品国内一区二区三区| 欧美男女性生活在线直播观看| 亚洲一区精品电影| 国产精品手机在线观看| 国产特黄一级片| 欧美黑人极品猛少妇色xxxxx| 久久好看免费视频| 亚洲一区二区三区免费看| 国产精品第二十页| 影音先锋男人资源在线观看| 国产真实精品久久二三区| 亚洲天堂影视av| 久久婷婷国产精品| 熟妇人妻中文av无码| 日韩欧美不卡一区| 可以在线看的av网站| 天天爱天天干天天操| 欧美在线播放高清精品| 国产中文一区二区| 欧美成人aaaaⅴ片在线看| 丁香一区二区三区| 一本色道综合亚洲| 日韩精品国内| 国产精品一区二区免费视频| 一本大道av一区二区在线播放| 国产精品一二区| 久草网视频在线观看| 欧美体内she精视频| 男人天堂成人网| 亚洲 国产 日韩 欧美| 色欧美片视频在线观看在线视频| 亚洲高清视频在线观看| 久久伊人亚洲| 亚洲福利精品在线| 香蕉视频禁止18| 国产人成亚洲第一网站在线播放| 久久久久久久999| 杨幂一区二区国产精品| 极品美女销魂一区二区三区免费| 亚洲人线精品午夜| 波多野结衣之无限发射| 日韩一区二区视频在线| 欧美一区二区三区成人| 午夜剧场在线免费观看| 97se亚洲国产综合自在线| 国产精品老牛影院在线观看| 日日碰狠狠添天天爽| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 欧美国产视频在线| 日本久久久久久久久久久| 欧美大片xxxx| 欧美成人精品3d动漫h| 北条麻妃亚洲一区| 亚洲人成网站在线| av亚洲天堂网| 风流少妇一区二区| 日韩电影大片中文字幕| 538任你躁在线精品免费| 国产偷人妻精品一区二区在线| 欧美日韩一卡二卡三卡| 丰满人妻一区二区三区53视频| 亚洲h动漫在线| 欧美性受xxxxxx黑人xyx性爽| 久久免费精品国产久精品久久久久| 国产性色av一区二区| 亚洲国产精品无码久久久久高潮| 在线观看欧美精品| 久久久久久蜜桃一区二区| 一区二区三区欧美日韩| 手机在线看福利| 欧美日韩在线影院| 国产精品一区二区人妻喷水| 激情亚洲一区二区三区四区| 日本va中文字幕| 色婷婷综合久久久中文字幕| 制服丝袜在线第一页| 91精品欧美一区二区三区综合在| 成人三级做爰av| 51午夜精品国产| 亚洲精品一区二区毛豆| 免费观看成年人视频| 成人动漫视频在线观看完整版| 国产一区二区三区香蕉| 一区二区三区一级片| 波多野结衣91| 色一情一区二区三区四区 | 欧美三级午夜理伦三级中视频| 一区二区传媒有限公司| 26uuu国产一区二区三区| 国产毛片视频网站| 国产厕所精品在线观看| 先锋影音一区二区三区| 日本一区二区三区视频在线播放| 国产成人精品一区二区三区福利| 国产精品777| 亚洲超碰97人人做人人爱| 国产乱子伦精品无码码专区| 99热这里只有精品在线播放| 国产一区二区三区奇米久涩| 久久久av电影| 国产一区二区看久久| 国产精品二区视频| 国产女大学生av| 激情五月综合色婷婷一区二区| 91麻豆6部合集magnet| 成人高清dvd| 日韩av免费在线观看| 亚洲欧洲xxxx| 天堂成人免费av电影一区| 午夜激情福利电影| 中文字幕在线视频一区二区| 亚洲女在线观看| 黄色激情视频在线观看| 激情五月五月婷婷| 亚洲人成网7777777国产| 一区二区三区在线高清| 潘金莲一级黄色片| 成人国产精品av| 天天干视频在线| 91九色露脸| 国产乱一区二区| 精品人妻无码一区二区三区| 久久99精品久久久久久久久久| 欧美高清在线观看| 成人99免费视频| 亚洲v欧美v另类v综合v日韩v| 日韩一本二本av| 国产美女精品人人做人人爽| 精品人妻一区二区色欲产成人| 韩国一区二区三区四区| 欧美激情喷水视频| 国产精品国产三级国产有无不卡| 精品人妻在线视频| 岛国视频一区免费观看| 国内精品在线一区| 一区二区日韩av| 一级黄色a视频| 最新中文字幕视频| 97夜夜澡人人双人人人喊| 狠狠躁夜夜躁人人爽超碰91| 精品国产xxx| 成人做爰www看视频软件| 国产精品99免视看9| 亚洲成人黄色影院| 成人永久免费视频| 日韩成人毛片视频| 精品无码在线视频| 美女黄色片视频| 天天夜碰日日摸日日澡性色av| 中文字幕一区二区三区四区五区人 | 日本黄色三级视频| 不卡中文字幕在线观看| 国产亚洲一区二区三区在线播放 | 久久免费电影网| 亚洲 小说区 图片区| 99久久国产宗和精品1上映| 亚洲综合色av| 欧美日韩国产综合一区二区| 久久国产精品99精品国产| 国产又大又粗又爽的毛片| 欧美精品久久久| 欧美黑人xxx| 欧美日韩久久久| 永久免费未满蜜桃| 妞干网在线免费视频| 久久99精品久久久久久青青日本 | 日韩三级av在线| 一路向西2在线观看| 91超碰rencao97精品| 国产精品高清网站| 日韩欧美亚洲综合| 亚洲人妻一区二区| 青青草成人免费视频| 久久资源亚洲| 国产精品成人v| 中文字幕欧美视频在线| 亚洲尤物视频在线| 伊人久久大香线蕉综合75| www国产成人免费观看视频 深夜成人网| 日韩人妻无码精品综合区| 亚洲爆乳无码精品aaa片蜜桃| 成人av中文| 欧美激情在线有限公司| 中文字幕av一区二区| 亚洲欧美综合图区| 一区二区三区四区亚洲| 黑人精品欧美一区二区蜜桃| 亚洲精品人妻无码| 成人国产一区二区三区精品| 国产黄色录像片| www插插插无码视频网站| 7777免费精品视频| 在线中文字幕一区| 国产又黄又大又粗的视频| 国产交换配乱淫视频免费| 欧美一区二区三区电影| 韩国毛片一区二区三区| 中文字幕黄色片| 亚洲视频重口味| 性欧美丰满熟妇xxxx性仙踪林| 国产青草视频在线观看| 亚洲精品乱码久久久久久动漫| 国产一级精品aaaaa看| 性欧美视频videos6一9| 亚洲国产美女久久久久| 欧美性色aⅴ视频一区日韩精品| 亚洲另类图片色| 先锋影音网一区| 在线免费一区| 国产区二精品视| 国产精品视频资源| 欧美在线视频免费观看| 亚洲の无码国产の无码步美| 老司机精品视频导航| 久久影院在线观看| 国产无套内射久久久国产| 无码h黄肉3d动漫在线观看| 亚洲成av人**亚洲成av**| 中文字幕免费精品一区高清| 亚洲xxx大片| 日韩网址在线观看| www.av视频| 可以免费看不卡的av网站| 蜜臀av一区二区在线免费观看| av在线亚洲天堂| 久久久久久久久久影院| www亚洲视频| 日本中文在线播放| 精品人妻无码一区二区性色| 亚洲天堂男人网| 亚洲av激情无码专区在线播放| 国产美女主播在线观看| 波多野结衣在线电影| 97人妻一区二区精品免费视频 | 免费看日b视频| 日韩av中文字幕第一页| 日韩视频在线视频| 一个人看的视频www| 欧美激情 亚洲| 中文字幕黄色av| 一本到在线视频| 性网爆门事件集合av| 国产ts变态重口人妖hd| 蜜臀精品久久久久久蜜臀| 久久久精品国产免大香伊| 欧美一级大片免费看| 国产69精品久久久久久久| 免费激情视频网站| 亚洲欧美一区二区三区极速播放| 在线不卡欧美精品一区二区三区| 日韩综合视频在线观看| 国产精品久久久久久久久久久不卡| 精品一区二区三区自拍图片区| 翔田千里亚洲一二三区| 97碰在线视频| 成年人视频软件| 日韩中文字幕区一区有砖一区 | 伊人久久久久久久久久久| 亚洲精品欧美极品| 欧美三级午夜理伦三级| 久久精品性爱视频| 成人sese在线| 成人精品在线视频| 久久人人爽人人爽人人片| 五月天婷婷社区| 色阁综合伊人av| 丝袜一区二区三区| 久久精品在线观看视频| 中文字幕精品无| 成人免费视频播放| 在线成人av影院| 国产精品欧美日韩| www.日本在线视频| 91精品国产乱码在线观看| 99久久精品国产麻豆演员表| 一本一道久久a久久精品综合蜜臀| 日韩成人av在线| 久久久久久久电影| 日韩中文字幕1| 亚洲高清免费在线| 亚洲国产精品久久91精品| 国产精品成人v| 亚洲熟妇av一区二区三区漫画| 久久久综合久久| xfplay精品久久| 亚洲精品一二区| 欧美日韩日本网| 美女100%无挡| 日韩电影免费在线看| 7777精品久久久大香线蕉| 91丨九色丨国产| 黄色国产在线观看| 奇米精品一区二区三区在线观看一| 欧美色成人综合| 高清一区二区三区视频| 久久成人激情视频| 成人免费视频app| 国产一区二区三区四区福利| 亚洲成人天堂网| 亚洲综合精品在线| 午夜私人影院久久久久| 欧美巨大黑人极品精男| 久久精品aaaaaa毛片| 黄色av片三级三级三级免费看| 91色综合久久久久婷婷| 欧美激情18p| 亚洲精品鲁一鲁一区二区三区 | 免费成人在线视频网站| 亚洲综合成人av| 日韩欧美亚洲一二三区| 97免费资源站| 午夜精品久久久久99蜜桃最新版 | 亚州精品天堂中文字幕| 欧美成人福利在线观看| 麻豆freexxxx性91精品| 亚洲免费视频观看| 国产三级三级看三级| 国产麻豆视频精品| 91精品国产免费久久久久久| 欧美日韩理论片| www国产成人| 88国产精品欧美一区二区三区| 免费成人深夜夜行p站| 日韩精品五月天| 日韩免费高清av| 国产一区二区网| 久久国产精品一区二区| 中文字幕在线视频日韩| 黑人玩弄人妻一区二区三区| 亚洲国产成人午夜在线一区 | 亚洲 国产 欧美 日韩| 久久久成人精品视频| 韩国三级在线看| 亚洲精品中文字幕在线观看| 国产综合精品一区二区三区| 中文字幕欧美色图| 亚洲人成网站色ww在线| 特级黄色片视频| 亚洲黄色av一区| 黑人巨大国产9丨视频| 日韩高清不卡一区二区三区| 久久久精品久久| 国产三级黄色片| 欧美美女一区二区在线观看| 手机免费av片| 国产精品三级电影| 日韩精品伦理第一区| 蜜臀91精品一区二区三区| 欧美在线视频一区二区| 国产精品-色哟哟| 欧美黑人一级爽快片淫片高清| 久久精品亚洲无码| 欧美精品一区二区久久久| 午夜免费看毛片| 亚洲三级电影网站| 欧美亚洲视频一区| 粉嫩av亚洲一区二区图片| 另类欧美小说| 成人h动漫精品一区二区| 欧美一进一出视频| 国产福利91精品一区| 欧美深深色噜噜狠狠yyy| 国产大陆a不卡| 六月婷婷久久| 91社区在线播放| 欧洲精品一区二区三区久久| 国产精品久久久久久久久晋中| 一本色道久久综合亚洲精品婷婷 | 可以直接看的黄色网址| 精品三级在线观看| 老熟妇高潮一区二区三区| 亚洲男人第一av网站| 黄网在线观看视频| 97精品国产91久久久久久| 伊人久久亚洲综合| 26uuu国产精品视频| 午夜精品久久久久久久99热黄桃| 日本午夜人人精品| 女人18毛片水真多18精品| 中文字幕中文字幕在线中一区高清| 麻豆一区二区三区| www.18av.com| 播五月开心婷婷综合| 久久香蕉综合色| 北条麻妃一区二区三区| 116极品美女午夜一级| 色综合一区二区| 手机在线免费看片| 国模私拍视频一区| 免费观看成人av| 国产精品视频二| 91精品欧美久久久久久动漫| 国产污视频在线看| 好看的日韩精品| 中文子幕无线码一区tr| gogo亚洲国模私拍人体|