成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁(yè) > 知識(shí)庫(kù) > Redis和springboot 整合redisUtil類(lèi)的示例代碼

Redis和springboot 整合redisUtil類(lèi)的示例代碼

熱門(mén)標(biāo)簽:南京手機(jī)外呼系統(tǒng)廠家 高碑店市地圖標(biāo)注app 臺(tái)灣電銷(xiāo) 地圖標(biāo)注工廠入駐 b2b外呼系統(tǒng) 廊坊外呼系統(tǒng)在哪買(mǎi) 400電話辦理的口碑 一個(gè)地圖標(biāo)注多少錢(qián) 四川穩(wěn)定外呼系統(tǒng)軟件

一、引入依賴

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

二、在application.yml 配置redis服務(wù)器

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

三、寫(xiě)一個(gè)redis配置類(lèi)

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

通過(guò)源碼可以看出,SpringBoot自動(dòng)幫我們?cè)谌萜髦猩闪艘粋€(gè)RedisTemplate和一個(gè)StringRedisTemplate。但是,這個(gè)RedisTemplate的泛型是Object,Object>,寫(xiě)代碼不方便,需要寫(xiě)好多類(lèi)型轉(zhuǎn)換的代碼;我們需要一個(gè)泛型為String,Object>形式的RedisTemplate。并且,這個(gè)RedisTemplate沒(méi)有設(shè)置數(shù)據(jù)存在Redis時(shí),key及value的序列化方式。
看到這個(gè)@ConditionalOnMissingBean注解后,就知道如果Spring容器中有了RedisTemplate對(duì)象了,這個(gè)自動(dòng)配置的RedisTemplate不會(huì)實(shí)例化。因此我們可以直接自己寫(xiě)個(gè)配置類(lèi),配置RedisTemplate。(2)既然自動(dòng)配置不好用,就重新配置一個(gè)RedisTemplate

包的結(jié)構(gòu)如下

代碼如下:

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配置類(lèi)
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;
 
  }
 
}

 四、編寫(xiě)一個(gè)RedisUtil類(lèi)

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工具類(lèi)
15
 * @author YUX
16
 * @date  2018年6月7日
17
 */
 
@Component
public final class RedisUtil {
 
 
  @Autowired
 
  private RedisTemplateString, Object> redisTemplate;
 
  // =============================common============================
 
  /**
   * 26
   * 指定緩存失效時(shí)間
   * 27
   *
   * @param key 鍵
   *       28
   * @param time 時(shí)間(秒)
   *       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
   * 根據(jù)key 獲取過(guò)期時(shí)間
   * 45
   *
   * @param key 鍵 不能為null
   *      46
   * @return 時(shí)間(秒) 返回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 可以傳一個(gè)值 或多個(gè)
   *      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
   * 普通緩存放入并設(shè)置時(shí)間
   * 110
   *
   * @param key  鍵
   *       111
   * @param value 值
   *       112
   * @param time 時(shí)間(秒) time要大于0 如果time小于等于0 將設(shè)置無(wú)限期
   *       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 項(xiàng) 不能為null
   *       160
   * @return 值
   * 161
   */
 
  public Object hget(String key, String item) {
 
    return redisTemplate.opsForHash().get(key, item);
 
  }
 
  /**
   * 167
   * 獲取hashKey對(duì)應(yīng)的所有鍵值
   * 168
   *
   * @param key 鍵
   *      169
   * @return 對(duì)應(yīng)的多個(gè)鍵值
   * 170
   */
 
  public MapObject, Object> hmget(String key) {
 
    return redisTemplate.opsForHash().entries(key);
 
  }
 
  /**
   * 176
   * HashSet
   * 177
   *
   * @param key 鍵
   *      178
   * @param map 對(duì)應(yīng)多個(gè)鍵值
   *      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 并設(shè)置時(shí)間
   * 193
   *
   * @param key 鍵
   *       194
   * @param map 對(duì)應(yīng)多個(gè)鍵值
   *       195
   * @param time 時(shí)間(秒)
   *       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表中放入數(shù)據(jù),如果不存在將創(chuàng)建
   * 213
   *
   * @param key  鍵
   *       214
   * @param item 項(xiàng)
   *       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表中放入數(shù)據(jù),如果不存在將創(chuàng)建
   * 230
   *
   * @param key  鍵
   *       231
   * @param item 項(xiàng)
   *       232
   * @param value 值
   *       233
   * @param time 時(shí)間(秒) 注意:如果已存在的hash表有時(shí)間,這里將會(huì)替換原有的時(shí)間
   *       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 項(xiàng) 可以使多個(gè) 不能為null
   *       253
   */
 
  public void hdel(String key, Object... item) {
 
    redisTemplate.opsForHash().delete(key, item);
 
  }
 
  /**
   * 259
   * 判斷hash表中是否有該項(xiàng)的值
   * 260
   *
   * @param key 鍵 不能為null
   *       261
   * @param item 項(xiàng) 不能為null
   *       262
   * @return true 存在 false不存在
   * 263
   */
 
  public boolean hHasKey(String key, String item) {
 
    return redisTemplate.opsForHash().hasKey(key, item);
 
  }
 
  /**
   * 269
   * hash遞增 如果不存在,就會(huì)創(chuàng)建一個(gè) 并把新增后的值返回
   * 270
   *
   * @param key 鍵
   *       271
   * @param item 項(xiàng)
   *       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 項(xiàng)
   *       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
   * 根據(jù)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
   * 根據(jù)value從一個(gè)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
   * 將數(shù)據(jù)放入set緩存
   * 322
   *
   * @param key  鍵
   *        323
   * @param values 值 可以是多個(gè)
   *        324
   * @return 成功個(gè)數(shù)
   * 325
   */
 
  public long sSet(String key, Object... values) {
 
    try {
 
      return redisTemplate.opsForSet().add(key, values);
 
    } catch (Exception e) {
 
      e.printStackTrace();
 
      return 0;
 
    }
 
  }
 
  /**
   * 336
   * 將set數(shù)據(jù)放入緩存
   * 337
   *
   * @param key  鍵
   *        338
   * @param time  時(shí)間(秒)
   *        339
   * @param values 值 可以是多個(gè)
   *        340
   * @return 成功個(gè)數(shù)
   * 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緩存的長(zhǎng)度
   * 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 值 可以是多個(gè)
   *        372
   * @return 移除的個(gè)數(shù)
   * 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緩存的內(nèi)容
   * 387
   *
   * @param key  鍵
   *       388
   * @param start 開(kāi)始
   *       389
   * @param end  結(jié)束 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緩存的長(zhǎng)度
   * 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
   * 通過(guò)索引 獲取list中的值
   * 417
   *
   * @param key  鍵
   *       418
   * @param index 索引 index>=0時(shí), 0 表頭,1 第二個(gè)元素,依次類(lèi)推;index0時(shí),-1,表尾,-2倒數(shù)第二個(gè)元素,依次類(lèi)推
   *       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 時(shí)間(秒)
   *       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 時(shí)間(秒)
   * @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 時(shí)間(秒)
   *       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 時(shí)間(秒)
   *       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
   * 根據(jù)索引修改list中的某條數(shù)據(jù)
   * 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個(gè)值為value
   * 522
   *
   * @param key  鍵
   *       523
   * @param count 移除多少個(gè)
   *       524
   * @param value 值
   *       525
   * @return 移除的個(gè)數(shù)
   * 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可用

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

您可能感興趣的文章:
  • springboot整合redis集群過(guò)程解析
  • SpringBoot中Shiro緩存使用Redis、Ehcache的方法
  • SpringBoot 整合 Lettuce Redis的實(shí)現(xiàn)方法
  • 基于springboot和redis實(shí)現(xiàn)單點(diǎn)登錄
  • Scala 操作Redis使用連接池工具類(lèi)RedisUtil

標(biāo)簽:泰州 南寧 河源 定州 甘南 畢節(jié) 拉薩 伊春

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Redis和springboot 整合redisUtil類(lèi)的示例代碼》,本文關(guān)鍵詞  Redis,和,springboot,整合,redisUtil,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Redis和springboot 整合redisUtil類(lèi)的示例代碼》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于Redis和springboot 整合redisUtil類(lèi)的示例代碼的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    亚洲第一区第二区| 日本在线观看视频| 久久国产在线视频| 中国美女乱淫免费看视频| 日韩在线观看a| 成人午夜电影在线观看| 丰满少妇被猛烈进入高清播放| 一级毛片美女欧洲| 国产一区二区三区在线观看免费| yw在线观看| 午夜理伦三级做爰电影| 福利视频电影| 成人午夜国产福到在线| 日本午夜在线| 日韩精品欧美成人高清一区二区| 精品国产户外野外| 国产中文字幕在线| 国产久一道中文一区| 久久久久se| 国产精品视频免费一区二区三区| 欧美日韩国产一区在线| 日韩精品一区二区三区丰满| 国产三级欧美三级日产三级99| 国产午夜亚洲精品午夜鲁丝片| 非洲一级黄色片| 成人欧美大片| 国产一二三区精品视频| 日本免费不卡一区二区| 欧美精品成人91久久久久久久| 久久人人97超碰国产公开结果| av免费中文字幕| 欧美日韩一级视频| 人成在线免费网站| 婷婷激情五月网| 成人免费午夜电影| 国产黄色网址在线观看| 极品国产人妖chinesets亚洲人妖| 国产免费久久精品| 久久久噜噜噜www成人网| 天天射天天综合网| 天天综合色天天综合色hd| 欧美日韩在线视频首页| 国产精品丝袜高跟| 国产又大又粗又爽| 欧美裸体视频| 欧美jizzhd精品欧美满| 成人女性视频| 麻豆蜜桃在线观看| 免费v片在线观看| 1024在线视频| 日本黄色免费观看| 一级黄色片在线| 亚洲国产女人aaa毛片在线| 国产精品第13页| 亚洲大片免费观看| 日韩精品欧美精品| 成人乱人伦精品视频在线观看| 潮喷失禁大喷水aⅴ无码| 国产人成视频在线观看| www.嫩草免费在线观看| 国产精品麻豆一区| 懂色av蜜臀av粉嫩av分享吧| 2022国产精品| 亚洲AV第二区国产精品| 视频一区视频二区视频三区高| 欧美精品第一页| 九九国产精品视频| 日韩一级理论片| 国产精品手机播放| 顶级黑人搡bbw搡bbbb搡| 国产欧美日韩精品a在线观看| 欧美国产第一页| 免播放器亚洲一区| 天堂а在线中文在线无限看推荐| 国产欧美日韩一区二区三区| 茄子视频成人免费观看| av成人毛片| 国产成人一级电影| 91福利在线免费观看| 在线a视频网站| 欧美大交乱xxxxxbbb| 国产精品久久7| 大胆人体一区| 欧美肥老妇视频| 国产精品白浆一区二小说| 女同毛片一区二区三区| 亚洲综合网站| 亚洲男人的天堂av| 日本在线视频一区二区三区| 国产亚洲福利社区一区| 日本欧美一区二区三区不卡视频| 亚洲男人天堂2020| 久久综合色天天久久综合图片| 免费观看a级片| 久久久伊人欧美| 日韩 欧美 视频| 九九这里只精品视在线99| xxxxwww一片| 美女视频黄频大全不卡视频在线播放| 天天干夜夜操| jizzjizz亚洲中国少妇| 亚洲国产精品第一区二区三区| 免费看污污网站| 少妇精品一区二区| 国产精品免费视频久久久| 欧美激情精品久久久久久黑人| 男男视频亚洲欧美| 91精品久久久久久久久久久久久久| 亚洲视频 欧美视频| 国产无遮挡aaa片爽爽| 久久最新视频| 欧美aa在线| 91成人在线视频观看| 成人在线视频你懂的| 踪合国产第二页| 久久精品99久久久久久| 91超碰国产精品| 男女无套免费视频网站动漫| 日韩黄色片网站| 日本精品网站| 欧美极品少妇xxxxⅹ免费视频| 久久先锋影音av鲁色资源| 欧美视频二区36p| 欧美激情一区二区三区p站| 奇米四色…亚洲| eeuss影院网站免费观看| 免费观看久久久4p| 午夜精品久久一牛影视| 神马久久久久久久久久| av影片在线看| yes4444视频在线观看| 欧美日本亚洲| 久久久久久97三级| 国产激情综合五月久久| 天天看天天干| 秋霞网一区二区| 国产精品视频a| 免费一级黄色录像| 秋霞国产午夜精品免费视频| 亚洲黄色免费av| 中文字幕一区二区三区在线视频| 中文字幕乱码人妻综合二区三区| 69ww免费视频播放器| 色播色播色播色播色播在线| 日本不卡一二三| 丁香久久综合| 亚洲黄色在线播放| 日韩一级片在线观看| 欧美性猛交xxxx| 一个人看免费www视频有多爽| 国产小视频在线高清播放| 日韩有码一区| 欧美男男青年gay1069videost| 91九色porny视频| 日韩精品一卡二卡| 伊人影院在线视频| 精品国模一区二区三区| av一区在线| 国产日产欧美a一级在线| 九色网com| 精品视频在线观看一区| 久久av免费| 五月婷婷激情综合网| 色视频在线免费| 美女久久久久久| 日本午夜一区二区三区| 中国日本在线视频中文字幕| 女人香蕉久久**毛片精品| 亚洲国产高清国产精品| 日韩免费观看一区二区| 亚洲国产精品嫩草影院久久av| wwwwxxxxx欧美| 91小视频在线观看| 欧美激情在线一区二区| 国产白袜脚足j棉袜在线观看| 国产日韩欧美精品在线| 日韩综合另类| 99久久夜色精品国产亚洲1000部| 一区二区三区精品视频在线观看| 狠狠色狠狠色综合日日五| 日本久久伊人| 丰满人妻一区二区三区四区53| 国偷自产av一区二区三区麻豆| 中文字幕av在线免费观看| 亚洲精品乱码久久久久久久| 一级片免费在线观看| 日韩视频在线观看免费| 久久丁香综合五月国产三级网站| 午夜av免费在线观看| 奇米777影视成人四色| 受虐m奴xxx在线观看| 欧美人与性动交α欧美精品图片| 亚洲最新av网站| eeuss影院一区二区三区| 国产精品视频一二区| 69xxxx欧美| 免费一级特黄特色毛片久久看| 欧美在线一区二区三区四| 国产乱女淫av麻豆国产| 美国精品一区二区| 色婷婷精品大视频在线蜜桃视频| 久久久精品欧美丰满| 国产乱淫av一区二区三区| 毛片在线看网站| 777午夜精品视频在线播放| 综合久久综合久久| 99久久精品免费看| 欧美人xxxx| 2020色愉拍亚洲偷自拍| 久久久久久久久艹| 中文不卡1区2区3区| 狼人综合视频| 先锋影音资源综合在线播放av| 国产乱国产乱老熟| 欧美激情一级二级| 中文字幕免费在线观看视频| 亚洲精品久久久久久久久久| 亚洲人成人一区二区在线观看| 欧美成人免费va影院高清| 我的公把我弄高潮了视频| 91免费黄视频| 欧美极品少妇xxxxⅹ高跟鞋| 久久亚洲AV成人无码国产野外| 自拍偷自拍亚洲精品播放| 日韩视频在线免费看| 久久精品黄色片| 亚洲视频在线免费观看| 欧美多人猛交狂配| 精品国产999| 欧美国产大片| 免费不卡视频| 91九色丨porny丨肉丝| 亚洲成年电人电影网站| 欧美电影免费观看高清完整| 国产成人无码精品久久二区三| 午夜欧美不卡精品aaaaa| 国产一区二区女| 亚洲欧洲一区二区三区久久| 欧美黑人3p| 黄色片网站免费| 亚洲春色一区二区三区| 久久精品亚洲人成影院| 亚洲国产精品久久久久婷婷884| 99视频入口| 国产在线拍偷自揄拍精品| 久久久精品欧美| 日韩黄色在线播放| 最近2019中文字幕大全第二页| 中文字幕人妻一区二区在线视频| 国产精品自拍在线观看| 国产suv一区二区三区| 中文字幕在线观看免费| 国产一区玩具在线观看| 麻豆影视国产在线观看| 久久蜜桃香蕉精品一区二区三区| 91影院在线播放| 人妻激情另类乱人伦人妻| 99re这里只有精品6| 色老综合老女人久久久| 国产综合av| 亚洲人成在线观| 99在线观看视频| 亚洲午夜精品一区 二区 三区| 无码国产色欲xxxx视频| 久久不见久久见国语| 日本爱爱爱视频| 亚洲高清一区二区三区| 91精品国产自产91精品| 激情综合在线| 男男做性免费视频网| 一区二区三区黄| 天堂网视频在线观看| 欧美久久一区二区三区| 97免费视频观看| 一级黄色片在线观看| 亚洲欧洲另类国产综合| 欧洲金发美女大战黑人| 国产黄色免费在线观看| 久草免费福利视频| 一本一道久久a久久精品综合蜜臀| 中文字幕精品一区久久久久| 毛片毛片女人毛片毛片| 可以看av的网站久久看| 久久艹国产精品| 国产av 一区二区三区| 日韩精品视频在线观看一区二区三区| 欧美ab在线视频| 亚洲美女15p| 中文字幕免费高清在线观看| 中文字幕网在线| 欧美三级日韩在线| 亚洲国产欧美在线人成| 日韩美女激情视频| 国产女同互慰高潮91漫画| 国产人妻精品久久久久野外| 综合蜜桃精品| 日本不卡在线视频| 国产三级精品三级在线观看国产| 中文字幕视频在线免费观看| sm国产在线调教视频| 成人在线中文字幕| 天天色 色综合| 永久免费精品影视网站| 国产精品人人做人人爽| 法国空姐在线观看免费| 久久这里只有精品9| ckplayer中文字幕| av在线app| 日本wwwwwwwzzzzz视频| 亚洲黄色在线观看| 亚洲护士老师的毛茸茸最新章节| 国产一区二区三区在线观看网站| 精品视频一二区| 可播放的18gay1069| 欧美一级片免费| 小毛片在线观看| 伊人狠狠色丁香综合尤物| 蜜桃av一区二区三区电影| 另类小说欧美激情| 丰满大乳奶做爰ⅹxx视频| 92看片淫黄大片欧美看国产片| 国产综合无码一区二区色蜜蜜| 最新av在线免费观看| 欧美精品 - 色网| 亚洲欧美福利一区二区| 中日韩免视频上线全都免费| 日韩大片b站免费观看直播| 国产淫片免费看|