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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

Spring Boot学习之旅:(六)springboot 整合 redis 以及 redis 通用工具类

發(fā)布時(shí)間:2024/1/18 javascript 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Boot学习之旅:(六)springboot 整合 redis 以及 redis 通用工具类 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

這編文章主要介紹了springboot整合redis,以及redis配置和一些redis操作數(shù)據(jù)的工具類。
首先倒入redis依賴

一.依賴

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

二.配置文件

創(chuàng)建一個(gè)redis.properties配置redis
redis.host=localhost
redis.port=6379
redis.password=
redis.database=1
redis.maxActive=8
redis.maxWait=-1
redis.maxIdle=8
redis.minIdle=1
redis.timeOut=0
創(chuàng)建一個(gè)與redis.properties的配置類方便直接使用配置的參數(shù)。

@Configuration @PropertySource(value = "classpath:redis.properties") @ConfigurationProperties(prefix = "redis") public class RedisConfigProperties {// 主機(jī)地址 public String host;//端口public int port;//密碼沒有不填寫public String password;// Redis數(shù)據(jù)庫(kù)索引(默認(rèn)為0)public int database;//最大活躍連接public int maxActive;//連接池最大阻塞等待時(shí)間(使用負(fù)值表示沒有限制)public int maxWait;//連接池中的最大空閑連接public int maxIdle;//連接池中的最小空閑連接public int minIdle;//連接超時(shí)時(shí)間(毫秒)public int timeOut;public String getHost() {return host;}public void setHost(String host) {this.host = host;}public int getPort() {return port;}public void setPort(int port) {this.port = port;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public int getDatabase() {return database;}public void setDatabase(int database) {this.database = database;}public int getMaxActive() {return maxActive;}public void setMaxActive(int maxActive) {this.maxActive = maxActive;}public int getMaxWait() {return maxWait;}public void setMaxWait(int maxWait) {this.maxWait = maxWait;}public int getMaxIdle() {return maxIdle;}public void setMaxIdle(int maxIdle) {this.maxIdle = maxIdle;}public int getMinIdle() {return minIdle;}public void setMinIdle(int minIdle) {this.minIdle = minIdle;}public int getTimeOut() {return timeOut;}public void setTimeOut(int timeOut) {this.timeOut = timeOut;}}

三.整合配置

聽說(shuō)某寶的fastjson的json和序列化性能很好這里的序列化我們使用fastjson的序列化。
創(chuàng)建一個(gè)自定義序列化配置類

public class FastJson2JsonRedisSerializer<T> implements RedisSerializer<T> {public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");private Class<T> clazz;public FastJson2JsonRedisSerializer(Class<T> clazz) {super();this.clazz = clazz;}public byte[] serialize(T t) throws SerializationException {if (t == null) {return new byte[0];}return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(DEFAULT_CHARSET);}public T deserialize(byte[] bytes) throws SerializationException {if (bytes == null || bytes.length <= 0) {return null;}String str = new String(bytes, DEFAULT_CHARSET);return (T) JSON.parseObject(str, clazz);} }

將項(xiàng)目進(jìn)行整合

@Configuration public class RedisConfig {@Autowiredprivate RedisConfigProperties redis;@Beanpublic RedisSerializer fastJson2JsonRedisSerializer() { ParserConfig.getGlobalInstance().setAutoTypeSupport(true); return new FastJson2JsonRedisSerializer<Object>(Object.class);}@Beanpublic RedisConnectionFactory redisConnectionFactory() {JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();//最大空閑接連jedisPoolConfig.setMaxIdle(redis.getMaxIdle());//最小空閑連接jedisPoolConfig.setMinIdle(redis.getMinIdle());//連接池最大阻塞等待時(shí)間jedisPoolConfig.setMaxWaitMillis(redis.getMaxWait());JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();//主機(jī)地址jedisConnectionFactory.setHostName(redis.getHost())//端口jedisConnectionFactory.setPort(redis.getPort());//密碼jedisConnectionFactory.setPassword(redis.getPassword());//索引jedisConnectionFactory.setDatabase(redis.getDatabase());//超時(shí)時(shí)間jedisConnectionFactory.setTimeout(redis.getTimeOut());jedisConnectionFactory.setUsePool(true); jedisConnectionFactory.setPoolConfig(jedisPoolConfig);return jedisConnectionFactory;}@Beanpublic RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory, RedisSerializer fastJson2JsonRedisSerializer) {StringRedisTemplate redisTemplate = new StringRedisTemplate(factory); redisTemplate.setConnectionFactory(redisConnectionFactory());//redis 開啟事務(wù)redisTemplate.setEnableTransactionSupport(true);//hash 使用jdk 的序列化redisTemplate.setHashValueSerializer(fastJson2JsonRedisSerializer/*new JdkSerializationRedisSerializer()*/);//StringRedisSerializer key 序列化redisTemplate.setHashKeySerializer(new StringRedisSerializer());//keySerializer 對(duì)key的默認(rèn)序列化器。默認(rèn)值是StringSerializerredisTemplate.setKeySerializer(new StringRedisSerializer());// valueSerializerredisTemplate.setValueSerializer(fastJson2JsonRedisSerializer);redisTemplate.afterPropertiesSet();return redisTemplate;} }

四.操作數(shù)據(jù)工具類

接口:

public interface BaseRedisDao<K, V> {/*** 用戶排序通過(guò)注冊(cè)時(shí)間的 權(quán)重值* @param date* @return*/double getCreateTimeScore(long date);/*** 獲取Redis中所有的鍵的key* @return*/Set<K> getAllKeys();/*** 獲取所有的普通key-value* @return*/Map<K,V> getAllString();/*** 獲取所有的Set -key-value* @return*/Map<K,Set<V>> getAllSet();/*** 獲取所有的ZSet正序 -key-value 不獲取權(quán)重值* @return*/Map<K,Set<V>> getAllZSetReverseRange();/*** 獲取所有的ZSet倒序 -key-value 不獲取權(quán)重值* @return*/Map<K,Set<V>> getAllZSetRange();/*** 獲取所有的List -key-value* @return*/Map<K,List<V>> getAllList();/*** 獲取所有的Map -key-value* @return*/Map<K,Map<K,V>> getAllMap();/*** 添加一個(gè)list* @param key* @param objectList*/void addList(K key, List<V> objectList);/*** 向list中增加值* @param key* @param obj* @return 返回在list中的下標(biāo)*/long addList(K key,V obj);/*** 向list中增加值* @param key* @param obj* @return 返回在list中的下標(biāo)*/long addList(K key,V ...obj);/**** 輸出list* @param key List的key* @param s 開始下標(biāo)* @param e 結(jié)束的下標(biāo)* @return*/List<V> getList(K key, long s, long e);/*** 輸出完整的list* @param key*/List<V> getList(K key);/*** 獲取list集合中元素的個(gè)數(shù)* @param key* @return*/long getListSize(K key);/*** 移除list中某值* 移除list中 count個(gè)value為object的值,并且返回移除的數(shù)量,* 如果count為0,或者大于list中為value為object數(shù)量的總和,* 那么移除所有value為object的值,并且返回移除數(shù)量* @param key* @param object* @return 返回移除數(shù)量*/long removeListValue(K key,V object);/*** 移除list中某值* @param key* @param object* @return 返回移除數(shù)量*/long removeListValue(K key,V... object);/*** 批量刪除key對(duì)應(yīng)的value* @param keys*/void remove(final K... keys);/*** 刪除緩存* 根據(jù)key精確匹配刪除* @param key*/void remove(final K key);/*** 通過(guò)分?jǐn)?shù)刪除ZSet中的值* @param key* @param s* @param e*/void removeZSetRangeByScore(String key,double s , double e);/*** 設(shè)置Set的過(guò)期時(shí)間* @param key* @param time* @return*/Boolean setSetExpireTime(String key,Long time);/*** 設(shè)置ZSet的過(guò)期時(shí)間* @param key* @param time* @return*/Boolean setZSetExpireTime(String key,Long time);/*** 判斷緩存中是否有key對(duì)應(yīng)的value* @param key* @return*/boolean exists(final K key);/*** 讀取String緩存 可以是對(duì)象* @param key* @return*/V get(final K key);/*** 讀取String緩存 可以是對(duì)象* @param key* @return*/List<V> get(final K... key);/*** 讀取緩存 可以是對(duì)象 根據(jù)正則表達(dá)式匹配* @param regKey* @return*/List<Object> getByRegular(final K regKey);/*** 寫入緩存 可以是對(duì)象* @param key* @param value*/void set(final K key, V value);/*** 寫入緩存* @param key* @param value* @param expireTime 過(guò)期時(shí)間 -單位s* @return*/void set(final K key, V value, Long expireTime);/*** 設(shè)置一個(gè)key的過(guò)期時(shí)間(單位:秒)* @param key* @param expireTime* @return*/boolean setExpireTime(K key, Long expireTime);/*** 獲取key的類型* @param key* @return*/DataType getType(K key);/*** 刪除map中的某個(gè)對(duì)象* @param key map對(duì)應(yīng)的key* @param field map中該對(duì)象的key*/void removeMapField(K key, V... field);/** 獲取map對(duì)象* @param key map對(duì)應(yīng)的key* @return*/Map<K,V> getMap(K key);/** 獲取map對(duì)象* @param key map對(duì)應(yīng)的key* @return*/Long getMapSize(K key);/*** 獲取map緩存中的某個(gè)對(duì)象* @param key map對(duì)應(yīng)的key* @param field map中該對(duì)象的key* @return*/<T> T getMapField(K key, K field);/*** 判斷map中對(duì)應(yīng)key的key是否存在* @param key map對(duì)應(yīng)的key* @return*/Boolean hasMapKey(K key,K field);/*** 獲取map對(duì)應(yīng)key的value* @param key map對(duì)應(yīng)的key* @return*/List<V> getMapFieldValue(K key);/*** 獲取map的key* @param key map對(duì)應(yīng)的key* @return*/Set<V> getMapFieldKey(K key);/*** 添加map* @param key* @param map*/void addMap(K key, Map<K,V> map);/*** 向key對(duì)應(yīng)的map中添加緩存對(duì)象* @param key cache對(duì)象key* @param field map對(duì)應(yīng)的key* @param value 值*/void addMap(K key, K field, Object value);/*** 向key對(duì)應(yīng)的map中添加緩存對(duì)象* @param key cache對(duì)象key* @param field map對(duì)應(yīng)的key* @param time 過(guò)期時(shí)間-整個(gè)MAP的過(guò)期時(shí)間* @param value 值*/void addMap(K key, K field, V value,long time);/*** 向set中加入對(duì)象* @param key 對(duì)象key* @param obj 值*/void addSet(K key, V... obj);/*** 處理事務(wù)時(shí)鎖定key* @param key*/void watch(String key);/*** 移除set中的某些值* @param key 對(duì)象key* @param obj 值*/long removeSetValue(K key, V obj);/*** 移除set中的某些值* @param key 對(duì)象key* @param obj 值*/long removeSetValue(K key, V... obj);/*** 獲取set的對(duì)象數(shù)* @param key 對(duì)象key*/long getSetSize(K key);/*** 判斷set中是否存在這個(gè)值* @param key 對(duì)象key*/Boolean hasSetValue(K key,V obj);/*** 獲得整個(gè)set* @param key 對(duì)象key*/Set<V> getSet(K key);/*** 獲得set 并集* @param key* @param otherKey* @return*/Set<V> getSetUnion(K key,K otherKey);/*** 獲得set 并集* @param key* @param set* @return*/Set<V> getSetUnion(K key,Set<Object> set);/*** 獲得set 交集* @param key* @param otherKey* @return*/Set<V> getSetIntersect(K key,K otherKey);/*** 獲得set 交集* @param key* @param set* @return*/Set<V> getSetIntersect(K key,Set<Object> set);/*** 模糊移除 支持*號(hào)等匹配移除* @param blears*/void removeBlear(K... blears);/*** 修改key名 如果不存在該key或者沒有修改成功返回false* @param oldKey* @param newKey* @return*/Boolean renameIfAbsent(String oldKey,String newKey);/*** 模糊移除 支持*號(hào)等匹配移除* @param blear*/void removeBlear(K blear);/*** 根據(jù)正則表達(dá)式來(lái)移除key-value* @param blears*/void removeByRegular(String... blears);/*** 根據(jù)正則表達(dá)式來(lái)移除key-value* @param blears*/void removeByRegular(String blears);/*** 根據(jù)正則表達(dá)式來(lái)移除 Map中的key-value* @param key* @param blears*/void removeMapFieldByRegular(K key,K... blears);/*** 根據(jù)正則表達(dá)式來(lái)移除 Map中的key-value* @param key* @param blear*/void removeMapFieldByRegular(K key,K blear);/*** 移除key 對(duì)應(yīng)的value* @param key* @param value* @return*/Long removeZSetValue(K key, V... value);/*** 移除key ZSet* @param key* @return*/void removeZSet(K key);/***刪除,鍵為K的集合,索引start<=index<=end的元素子集* @param key* @param start* @param end* @return*/void removeZSetRange(K key,Long start,Long end);/*** 并集 將key對(duì)應(yīng)的集合和key1對(duì)應(yīng)的集合合并到key2中* 如果分?jǐn)?shù)相同的值,都會(huì)保留* 原來(lái)key2的值會(huì)被覆蓋* @param key* @param key1* @param key2*/void setZSetUnionAndStore(String key,String key1, String key2);/*** 獲取整個(gè)有序集合ZSET,正序* @param key*/<T> T getZSetRange(K key);/*** 獲取有序集合ZSET* 鍵為K的集合,索引start<=index<=end的元素子集,正序* @param key* @param start 開始位置* @param end 結(jié)束位置*/<T> T getZSetRange(K key,long start,long end);/*** 獲取整個(gè)有序集合ZSET,倒序* @param key*/Set<Object> getZSetReverseRange(K key);/*** 獲取有序集合ZSET* 鍵為K的集合,索引start<=index<=end的元素子集,倒序* @param key* @param start 開始位置* @param end 結(jié)束位置*/Set<V> getZSetReverseRange(K key,long start,long end);/*** 通過(guò)分?jǐn)?shù)(權(quán)值)獲取ZSET集合 正序 -從小到大* @param key* @param start* @param end* @return*/Set<V> getZSetRangeByScore(String key, double start, double end);/*** 通過(guò)分?jǐn)?shù)(權(quán)值)獲取ZSET集合 倒序 -從大到小* @param key* @param start* @param end* @return*/Set<V> getZSetReverseRangeByScore(String key, double start, double end);/*** 鍵為K的集合,索引start<=index<=end的元素子集* 返回泛型接口(包括score和value),正序* @param key* @param start* @param end* @return*/Set<ZSetOperations.TypedTuple<V>> getZSetRangeWithScores(K key, long start, long end);/*** 鍵為K的集合,索引start<=index<=end的元素子集* 返回泛型接口(包括score和value),倒序* @param key* @param start* @param end* @return*/Set<ZSetOperations.TypedTuple<V>> getZSetReverseRangeWithScores(K key, long start, long end);/*** 鍵為K的集合* 返回泛型接口(包括score和value),正序* @param key* @return*/Set<ZSetOperations.TypedTuple<V>> getZSetRangeWithScores(K key);/*** 鍵為K的集合* 返回泛型接口(包括score和value),倒序* @param key* @return*/Set<ZSetOperations.TypedTuple<V>> getZSetReverseRangeWithScores(K key);/*** 鍵為K的集合,sMin<=score<=sMax的元素個(gè)數(shù)* @param key* @param sMin* @param sMax* @return*/long getZSetCountSize(K key,double sMin,double sMax);/*** 獲取Zset 鍵為K的集合元素個(gè)數(shù)* @param key* @return*/long getZSetSize(K key);/*** 獲取鍵為K的集合,value為obj的元素分?jǐn)?shù)* @param key* @param value* @return*/double getZSetScore(K key,V value);/*** 元素分?jǐn)?shù)增加,delta是增量* @param key* @param value* @param delta* @return*/double incrementZSetScore(K key,V value,double delta);/*** 添加有序集合ZSET* 默認(rèn)按照score升序排列,存儲(chǔ)格式K(1)==V(n),V(1)=S(1)* @param key* @param score* @param value* @return*/Boolean addZSet(String key ,double score, Object value);/*** 添加有序集合ZSET* @param key* @param value* @return*/Long addZSet(K key,TreeSet<V> value);/*** 添加有序集合ZSET* @param key* @param score* @param value* @return*/Boolean addZSet(K key,double[] score, Object[] value); }

實(shí)現(xiàn)類

@Repository("redisHandle") public class RedisHandle implements BaseRedisDao<String, Object> {private Logger logger = LoggerFactory.getLogger(this.getClass());@Resource(name="redisTemplate")protected RedisTemplate redisTemplate;/*** 出異常,重復(fù)操作的次數(shù)*/private static Integer times = 5;public double getCreateTimeScore(long date) {return date/ 100000.0;}public Set<String> getAllKeys() {return redisTemplate.keys("*");}public Map<String, Object> getAllString() {Set<String> stringSet = getAllKeys();Map<String, Object> map = new HashMap<String, Object>();Iterator<String> iterator = stringSet.iterator();while (iterator.hasNext()) {String k = iterator.next();if (getType(k) == DataType.STRING) {map.put(k, get(k));}}return map;}public Map<String, Set<Object>> getAllSet() {Set<String> stringSet = getAllKeys();Map<String, Set<Object>> map = new HashMap<String, Set<Object>>();Iterator<String> iterator = stringSet.iterator();while (iterator.hasNext()) {String k = iterator.next();if (getType(k) == DataType.SET) {map.put(k, getSet(k));}}return map;}public Map<String, Set<Object>> getAllZSetRange() {Set<String> stringSet = getAllKeys();Map<String, Set<Object>> map = new HashMap<String, Set<Object>>();Iterator<String> iterator = stringSet.iterator();while (iterator.hasNext()) {String k = iterator.next();if (getType(k) == DataType.ZSET) {logger.debug("k:"+k);map.put(k, getZSetRange(k));}}return map;}public Map<String, Set<Object>> getAllZSetReverseRange() {Set<String> stringSet = getAllKeys();Map<String, Set<Object>> map = new HashMap<String, Set<Object>>();Iterator<String> iterator = stringSet.iterator();while (iterator.hasNext()) {String k = iterator.next();if (getType(k) == DataType.ZSET) {map.put(k, getZSetReverseRange(k));}}return map;}public Map<String, List<Object>> getAllList() {Set<String> stringSet = getAllKeys();Map<String, List<Object>> map = new HashMap<String, List<Object>>();Iterator<String> iterator = stringSet.iterator();while (iterator.hasNext()) {String k = iterator.next();if (getType(k) == DataType.LIST) {map.put(k, getList(k));}}return map;}public Map<String, Map<String, Object>> getAllMap() {Set<String> stringSet = getAllKeys();Map<String, Map<String, Object>> map = new HashMap<String, Map<String, Object>>();Iterator<String> iterator = stringSet.iterator();while (iterator.hasNext()) {String k = iterator.next();if (getType(k) == DataType.HASH) {map.put(k, getMap(k));}}return map;}public void addList(String key, List<Object> objectList) {for (Object obj : objectList) {addList(key, obj);}}public long addList(String key, Object obj) {return redisTemplate.boundListOps(key).rightPush(obj);}public long addList(String key, Object... obj) {return redisTemplate.boundListOps(key).rightPushAll(obj);}public List<Object> getList(String key, long s, long e) {return redisTemplate.boundListOps(key).range(s, e);}public List<Object> getList(String key) {return redisTemplate.boundListOps(key).range(0, getListSize(key));}public long getListSize(String key) {return redisTemplate.boundListOps(key).size();}public long removeListValue(String key, Object object) {return redisTemplate.boundListOps(key).remove(0, object);}public long removeListValue(String key, Object... objects) {long r = 0;for (Object object : objects) {r += removeListValue(key, object);}return r;}public void remove(String... key) {if (key != null && key.length > 0) {if (key.length == 1) {remove(key[0]);} else {redisTemplate.delete(CollectionUtils.arrayToList(key));}}}public void removeBlear(String... blears) {for (String blear : blears) {removeBlear(blear);}}public Boolean renameIfAbsent(String oldKey, String newKey) {return redisTemplate.renameIfAbsent(oldKey, newKey);}public void removeBlear(String blear) {redisTemplate.delete(redisTemplate.keys(blear));}public void removeByRegular(String... blears) {for (String blear : blears) {removeBlear(blear);}}public void removeByRegular(String blear) {Set<String> stringSet = getAllKeys();for (String s : stringSet) {if (Pattern.compile(blear).matcher(s).matches()) {redisTemplate.delete(s);}}}public void removeMapFieldByRegular(String key, String... blears) {for (String blear : blears) {removeMapFieldByRegular(key, blear);}}public void removeMapFieldByRegular(String key, String blear) {Map<String, Object> map = getMap(key);Set<String> stringSet = map.keySet();for (String s : stringSet) {if (Pattern.compile(blear).matcher(s).matches()) {redisTemplate.boundHashOps(key).delete(s);}}}public Long removeZSetValue(String key, Object... value) {return redisTemplate.boundZSetOps(key).remove(value);}public void removeZSet(String key) {removeZSetRange(key, 0L, getZSetSize(key));}public void removeZSetRange(String key, Long start, Long end) {redisTemplate.boundZSetOps(key).removeRange(start, end);}public void setZSetUnionAndStore(String key,String key1, String key2) {redisTemplate.boundZSetOps(key).unionAndStore(key1,key2);}public Set<Object> getZSetRange(String key) {return getZSetRange(key, 0, getZSetSize(key));}public Set<Object> getZSetRange(String key, long s, long e) {return redisTemplate.boundZSetOps(key).range(s, e);}public Set<Object> getZSetReverseRange(String key) {return getZSetReverseRange(key, 0, getZSetSize(key));}public Set<Object> getZSetReverseRange(String key, long start, long end) {return redisTemplate.boundZSetOps(key).reverseRange(start, end);}public Set<Object> getZSetRangeByScore(String key, double start, double end) {return redisTemplate.boundZSetOps(key).rangeByScore(start, end);}public Set<Object> getZSetReverseRangeByScore(String key, double start, double end) {return redisTemplate.boundZSetOps(key).reverseRangeByScore(start, end);}public Set<ZSetOperations.TypedTuple<Object>> getZSetRangeWithScores(String key, long start, long end) {return redisTemplate.boundZSetOps(key).rangeWithScores(start, end);}public Set<ZSetOperations.TypedTuple<Object>> getZSetReverseRangeWithScores(String key, long start, long end) {return redisTemplate.boundZSetOps(key).reverseRangeWithScores(start, end);}public Set<ZSetOperations.TypedTuple<Object>> getZSetRangeWithScores(String key) {return getZSetRangeWithScores(key, 0, getZSetSize(key));}public Set<ZSetOperations.TypedTuple<Object>> getZSetReverseRangeWithScores(String key) {return getZSetReverseRangeWithScores(key, 0, getZSetSize(key));}public long getZSetCountSize(String key, double sMin, double sMax) {return redisTemplate.boundZSetOps(key).count(sMin, sMax);}public long getZSetSize(String key) {return redisTemplate.boundZSetOps(key).size();}public double getZSetScore(String key, Object value) {return redisTemplate.boundZSetOps(key).score(value);}public double incrementZSetScore(String key, Object value, double delta) {return redisTemplate.boundZSetOps(key).incrementScore(value, delta);}public Boolean addZSet(String key, double score, Object value) {return redisTemplate.boundZSetOps(key).add(value, score);}public Long addZSet(String key, TreeSet<Object> value) {return redisTemplate.boundZSetOps(key).add(value);}public Boolean addZSet(String key, double[] score, Object[] value) {if (score.length != value.length) {return false;}for (int i = 0; i < score.length; i++) {if (addZSet(key, score[i], value[i]) == false) {return false;}}return true;}public void remove(String key) {if (exists(key)) {redisTemplate.delete(key);}}public void removeZSetRangeByScore(String key,double s , double e) {redisTemplate.boundZSetOps(key).removeRangeByScore(s,e);}public Boolean setSetExpireTime(String key, Long time) {return redisTemplate.boundSetOps(key).expire(time, TimeUnit.SECONDS);}public Boolean setZSetExpireTime(String key, Long time) {return redisTemplate.boundZSetOps(key).expire(time, TimeUnit.SECONDS);}public boolean exists(String key) {return redisTemplate.hasKey(key);}public Object get(int key) {return this.get(String.valueOf(key));}public Object get(long key) {return this.get(String.valueOf(key));}public Object get(String key) {return redisTemplate.boundValueOps(key).get();}public List<Object> get(String... keys) {List<Object> list = new ArrayList<Object>();for (String key : keys) {list.add(get(key));}return list;}public List<Object> getByRegular(String regKey) {Set<String> stringSet = getAllKeys();List<Object> objectList = new ArrayList<Object>();for (String s : stringSet) {if (Pattern.compile(regKey).matcher(s).matches() && getType(s) == DataType.STRING) {objectList.add(get(s));}}return objectList;}public void set(long key, Object value) {this.set(String.valueOf(key) ,value);}public void set(int key, Object value) {this.set(String.valueOf(key) ,value);}public void set(String key, Object value) {redisTemplate.boundValueOps(key).set(value);}public void set(String key, Object value, Long expireTime) {redisTemplate.boundValueOps(key).set(value, expireTime, TimeUnit.SECONDS);}public boolean setExpireTime(String key, Long expireTime) {return redisTemplate.expire(key, expireTime, TimeUnit.SECONDS);}public DataType getType(String key) {return redisTemplate.type(key);}public void removeMapField(String key, Object... field) {redisTemplate.boundHashOps(key).delete(field);}public Long getMapSize(String key) {return redisTemplate.boundHashOps(key).size();}public Map<String, Object> getMap(String key) {return redisTemplate.boundHashOps(key).entries();}public <T> T getMapField(String key, String field) {return (T) redisTemplate.boundHashOps(key).get(field);}public Boolean hasMapKey(String key, String field) {return redisTemplate.boundHashOps(key).hasKey(field);}public List<Object> getMapFieldValue(String key) {return redisTemplate.boundHashOps(key).values();}public Set<Object> getMapFieldKey(String key) {return redisTemplate.boundHashOps(key).keys();}public void addMap(String key, Map<String, Object> map) {redisTemplate.boundHashOps(key).putAll(map);}public void addMap(String key, String field, Object value) {redisTemplate.boundHashOps(key).put(field, value);}public void addMap(String key, String field, Object value, long time) {redisTemplate.boundHashOps(key).put(field, value);redisTemplate.boundHashOps(key).expire(time, TimeUnit.SECONDS);}public void watch(String key) {redisTemplate.watch(key);}public void addSet(String key, Object... obj) {redisTemplate.boundSetOps(key).add(obj);}public long removeSetValue(String key, Object obj) {return redisTemplate.boundSetOps(key).remove(obj);}public long removeSetValue(String key, Object... obj) {if (obj != null && obj.length > 0) {return redisTemplate.boundSetOps(key).remove(obj);}return 0L;}public long getSetSize(String key) {return redisTemplate.boundSetOps(key).size();}public Boolean hasSetValue(String key, Object obj) {Boolean boo = null;int t =0;while (true){try {boo = redisTemplate.boundSetOps(key).isMember(obj);break;} catch (Exception e) {logger.error("key[" + key + "],obj[" + obj + "]判斷Set中的值是否存在失敗,異常信息:" + e.getMessage());t++;}if(t>times){break;}}logger.info("key[" + key + "],obj[" + obj + "]是否存在,boo:" + boo);return boo;}public Set<Object> getSet(String key) {return redisTemplate.boundSetOps(key).members();}public Set<Object> getSetUnion(String key, String otherKey) {return redisTemplate.boundSetOps(key).union(otherKey);}public Set<Object> getSetUnion(String key, Set<Object> set) {return redisTemplate.boundSetOps(key).union(set);}public Set<Object> getSetIntersect(String key, String otherKey) {return redisTemplate.boundSetOps(key).intersect(otherKey);}public Set<Object> getSetIntersect(String key, Set<Object> set) {return redisTemplate.boundSetOps(key).intersect(set);} }

五.單元測(cè)試
創(chuàng)建一個(gè)測(cè)試的base了后面的類只需要繼承這個(gè)父類即可

@RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes=App.class) @WebAppConfiguration public class BaseTest { }

測(cè)試:

public class RedisTest extends BaseTest {private final Logger logger = LoggerFactory.getLogger(this.getClass());@ResourceRedisHandle rs;@Testpublic void RedisTest() throws Exception {rs.set(1, "11");System.out.println(rs.get(1)); }}

文章來(lái)源: http://www.haha174.top/article/details/251216
項(xiàng)目源碼: https://github.com/haha174/boot.git

總結(jié)

以上是生活随笔為你收集整理的Spring Boot学习之旅:(六)springboot 整合 redis 以及 redis 通用工具类的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

五月婷婷六月丁香 | av不卡免费看 | 伊人婷婷 | 国产精品久久久久久婷婷天堂 | 国产精品video | 欧美久久久久久久久久久久久 | 在线韩国电影免费观影完整版 | av免费观看网站 | 91插插插免费视频 | 激情久久综合网 | 九九九九九精品 | 久草在线网址 | 精品一二三区 | 中文字幕在线网 | 视频一区久久 | 欧美久久99 | 天天爽网站 | 久久久综合九色合综国产精品 | 最新av免费在线观看 | 国产精品一区二区三区在线 | 日韩成人免费在线观看 | 久久午夜影院 | 国产伦精品一区二区三区四区视频 | 国产中出在线观看 | 日日躁你夜夜躁你av蜜 | 久久国产一区二区 | 亚洲婷婷丁香 | 成人手机在线视频 | 免费中午字幕无吗 | 久草精品在线播放 | 成人免费网站在线观看 | 国产精品18久久久久久久久 | 中文字字幕在线 | 国产视频第二页 | 国产精品麻豆99久久久久久 | 欧美不卡在线 | 九九热1| 欧美小视频在线观看 | 国产a级免费 | 在线观看一区视频 | 国产精品久久免费看 | 亚洲欧美日韩精品久久奇米一区 | 99视频精品视频高清免费 | 欧美巨大 | 色黄www小说 | 少妇性xxx| 在线电影a| 91麻豆福利 | 亚洲最大免费成人网 | 国产精品一区二区免费看 | 国产精品 视频 | 日韩r级电影在线观看 | 亚洲黄色一级电影 | 欧亚日韩精品一区二区在线 | 热久久国产精品 | 亚洲动漫在线观看 | 欧美极品少妇xxxx | av电影免费 | 国产日韩在线观看一区 | 手机在线永久免费观看av片 | 国产视频1 | 婷婷色中文字幕 | 日日射av | 7777xxxx| 国产999精品久久久久久麻豆 | 欧美做受69 | 五月开心色 | 五月天高清欧美mv | 黄色的片子| 日韩网站在线播放 | 一级片免费在线 | 就操操久久 | 激情 一区二区 | 999久久久久 | 欧美一级性 | 97在线免费视频观看 | 国产精品福利视频 | 日韩一区二区三区高清在线观看 | 欧美色综合天天久久综合精品 | 最新色站 | 美女禁18| 久久国产视屏 | 免费国产一区二区 | 草久久精品 | 国产涩图| 亚洲精品中文字幕在线 | 欧美一级黄色网 | 成人9ⅰ免费影视网站 | 久精品视频在线 | 99热精品国产一区二区在线观看 | 久久成人资源 | 日韩在观看线 | 中文永久免费观看 | 人人舔人人爱 | 中文字幕永久在线 | 免费高清无人区完整版 | 永久免费看av | 91大神dom调教在线观看 | 黄色在线免费观看网站 | 国内精品久久久久久久久 | 国产麻豆电影 | 成人av一区二区三区 | 国产在线观看黄 | 国产精品视频久久久 | 色视频在线观看免费 | 一区中文字幕在线观看 | 免费视频色 | 欧美精品一二 | 久久国产精品免费一区二区三区 | 精品夜夜嗨av一区二区三区 | 亚洲男男gaygay无套同网址 | 一级一片免费视频 | 99色免费视频 | 久久久午夜视频 | 亚洲精品成人av在线 | 久久精品美女视频网站 | 天海翼一区二区三区免费 | 久久999精品 | 黄污视频网站 | 国产999精品久久久久久绿帽 | 视频在线观看入口黄最新永久免费国产 | 中文字幕久久精品亚洲乱码 | 日韩激情在线视频 | 肉色欧美久久久久久久免费看 | 亚洲视频1区2区 | 日韩网站一区 | 国产精品 中文字幕 亚洲 欧美 | 天堂网一区二区 | 五月天激情综合网 | 国产精品3 | 99热这里只有精品久久 | 激情喷水 | 麻豆传媒一区二区 | 色噜噜在线观看 | 欧美成人日韩 | 国产精品亚 | 日韩免费大片 | 一级黄色网址 | 久久久久久久国产精品视频 | 91精品办公室少妇高潮对白 | 国产欧美精品xxxx另类 | 免费av观看 | 午夜av片| 91漂亮少妇露脸在线播放 | 国产成人久久精品 | 干天天| 久久久久区 | 特级西西人体444是什么意思 | 激情电影影院 | 欧洲精品视频一区二区 | www.黄色片网站 | 久久久私人影院 | 夜夜操天天干, | 国产成人精品久久亚洲高清不卡 | 国产精品青青 | 精品一区电影国产 | av电影免费 | 日韩av在线免费看 | 中文字幕一区二区在线观看 | 在线91观看 | 久久久亚洲国产精品麻豆综合天堂 | 国产视频一区二区在线观看 | 波多野结衣电影一区 | 韩国av在线播放 | 国产裸体bbb视频 | av一级一片 | 国产精品一区二区三区四区在线观看 | 99久久99久久免费精品蜜臀 | 久草在线视频网站 | 在线国产能看的 | 国产精品 日韩精品 | 久久97久久97精品免视看 | 免费在线观看日韩欧美 | 免费h精品视频在线播放 | 最近中文字幕在线 | 天天天插| 天天干亚洲| av久久在线| 亚洲老妇xxxxxx| 免费韩国av| 91精品在线免费观看视频 | 国产最新在线视频 | 日韩欧美在线一区二区 | 天天操天天操一操 | 伊人五月综合 | 色婷婷成人 | av免费网站 | 91视视频在线直接观看在线看网页在线看 | 插综合网 | 亚洲电影一区二区 | 久久电影色| 97精品国产91久久久久久久 | 992tv在线成人免费观看 | www.日日日.com | 在线国产一区二区三区 | 欧美黄色成人 | 日本黄色黄网站 | 国产尤物在线观看 | 成人免费在线视频观看 | www,黄视频 | 亚洲经典视频 | 久久免费看av | 久久久久区 | 99精品偷拍视频一区二区三区 | 日韩免费电影网 | 国产日韩亚洲 | 人人干在线观看 | 操高跟美女 | 国产中文字幕亚洲 | 亚洲视频在线免费看 | 黄色av网站在线免费观看 | 国产精品尤物视频 | 久久er99热精品一区二区三区 | 欧美久久久久久久久久久久久 | 国产欧美精品在线观看 | 欧美日韩国产精品一区二区亚洲 | 久久精品视频4 | 中文字幕国内精品 | 超碰成人av | 最新av网址在线 | 中文字幕久久久精品 | 婷婷网五月天 | 91视频专区 | 九九免费精品视频在线观看 | 91av视频导航 | 一级久久久 | 色av男人的天堂免费在线 | 少妇超碰在线 | 日韩在线观看视频中文字幕 | 成年人在线观看 | 九九九九精品 | 国产综合片 | 久久精品中文字幕免费mv | 99久久精品久久亚洲精品 | 精品一区精品二区 | 天天综合网天天综合色 | 久久免费视频5 | 久草在线视频在线 | 欧美日韩中字 | a精品视频 | 99热在线观看免费 | 一级黄色片在线免费看 | 婷婷色在线资源 | 欧美一级性生活 | 午夜精品av在线 | 久久久久久久国产精品影院 | 日韩免费视频线观看 | 天天搞天天干天天色 | 91精品人成在线观看 | 91成人精品国产刺激国语对白 | 亚洲四虎在线 | 五月色婷| 亚洲精品乱码白浆高清久久久久久 | 欧美色噜噜噜 | 日韩久久精品一区二区三区 | 一区二区三区久久 | 欧美日韩国产二区三区 | 99精品视频在线观看免费 | 欧美激情va永久在线播放 | 久久精品五月 | 精品久久久久久国产 | 九色视频网址 | 黄色成年网站 | 亚洲另类视频在线观看 | 日韩欧美在线观看一区二区三区 | 国产视频在线免费 | 日韩在线视频二区 | 精品国产诱惑 | 中文字幕制服丝袜av久久 | 丁香六月国产 | 91成人区 | 亚洲六月丁香色婷婷综合久久 | 国产精品爽爽爽 | 人人射人人爱 | 亚洲激情校园春色 | 日韩精品一区二区在线观看 | 最近免费在线观看 | 欧美精品网站 | 四虎8848免费高清在线观看 | 国产精品网站一区二区三区 | 福利网在线 | 在线观看中文字幕2021 | 日韩一级黄色大片 | 永久免费精品视频网站 | 中文在线字幕免费观看 | 免费福利片2019潦草影视午夜 | 日韩精品免费一区二区三区 | 四虎视频 | 永久免费的啪啪网站免费观看浪潮 | 国产在线一线 | 免费人做人爱www的视 | 国产日本亚洲高清 | 成人在线网站观看 | 日本xxxx.com | 欧美成人69av | 久久久精品日本 | www狠狠| 日韩一区二区三区免费视频 | 欧洲亚洲国产视频 | 91av视频播放| 国产精品mv在线观看 | 麻豆视频在线播放 | 国产一区二区日本 | 亚洲黄色三级 | 成人免费网站在线观看 | 久久久久这里只有精品 | 国产日韩欧美在线一区 | 久色免费视频 | 激情视频久久 | 亚洲在线网址 | 菠萝菠萝蜜在线播放 | 日韩综合在线观看 | 国产日女人 | 久久久午夜精品福利内容 | 一区在线免费观看 | 久久久久久蜜av免费网站 | 国产精品免费一区二区三区 | www.xxxx欧美| 天天射天天干天天操 | 黄色在线观看污 | 九九免费在线看完整版 | 夜夜高潮夜夜爽国产伦精品 | 黄色a在线观看 | 婷婷色九月 | 91av网址| 国产一区视频免费在线观看 | 国产精品欧美久久久久天天影视 | 香蕉视频在线免费 | 成人在线观看你懂的 | 色天天综合久久久久综合片 | 免费一级片视频 | 国产精品久久久久永久免费观看 | 久久国产精品成人免费浪潮 | 最近av在线| 九九热免费精品视频 | 在线观看视频一区二区三区 | 在线观看免费 | 粉嫩av一区二区三区四区五区 | 久久黄色免费观看 | 一级黄网| 一本一道波多野毛片中文在线 | 国产在线观看国语版免费 | 在线色视频小说 | 激情综合色图 | 免费看国产视频 | 国产精品毛片一区视频播不卡 | 久久视频在线视频 | 亚洲做受高潮欧美裸体 | 五月天久久婷 | 国模视频一区二区 | 伊人天天狠天天添日日拍 | 中文字幕人成不卡一区 | 丁香花在线视频观看免费 | 蜜臀91丨九色丨蝌蚪老版 | 国产视频日韩视频欧美视频 | 国产精品欧美日韩在线观看 | 十八岁以下禁止观看的1000个网站 | av导航福利 | 久久噜噜少妇网站 | 亚州人成在线播放 | 久久人人爽视频 | 久久久午夜精品理论片中文字幕 | 天天拍天天干 | 午夜神马福利 | 深爱开心激情网 | www.夜夜骑.com | 日产乱码一二三区别在线 | 成人免费在线视频观看 | 国产不卡精品视频 | 24小时日本在线www免费的 | 狠狠干夜夜操 | 热99在线| 日韩91精品 | 国产91精品看黄网站在线观看动漫 | 亚洲激情在线播放 | 成人一区二区在线 | 五月天综合网站 | 免费黄色av | 最新av免费在线观看 | 中文av日韩 | 日韩理论在线播放 | 怡春院av | 99久热在线精品视频成人一区 | 亚洲欧美日韩国产精品一区午夜 | 成人夜晚看av | 97视频人人免费看 | 成人羞羞视频在线观看免费 | 欧美性做爰猛烈叫床潮 | 国产精品国内免费一区二区三区 | 国产黄网在线 | 99久热在线精品视频 | 日本午夜免费福利视频 | 中文乱幕日产无线码1区 | 欧美一级视频免费 | 国产在线播放观看 | 视频在线99re | 97国产大学生情侣酒店的特点 | 国产爽视频 | 久久久久日本精品一区二区三区 | 久久中文精品视频 | 久草在线免 | 亚洲欧洲国产日韩精品 | 欧美日韩国产精品爽爽 | 开心激情婷婷 | 黄色精品一区 | 欧美精品在线观看免费 | 久草在线免费在线观看 | 亚洲a色| 亚洲精品88欧美一区二区 | 美女黄视频免费看 | 免费精品在线视频 | 欧美日本国产在线观看 | 五月婷婷视频 | 99视频精品免费观看, | 六月色婷 | 欧美日韩免费一区二区 | 国产香蕉97碰碰久久人人 | 国产成a人亚洲精v品在线观看 | 天天在线操 | 91传媒在线 | 久久99国产一区二区三区 | 五月婷婷导航 | 午夜天使 | 91精品1区2区 | 中文字幕av免费在线观看 | 欧美va天堂在线电影 | 麻豆久久精品 | 99久久精品国产亚洲 | 午夜精品久久久久久久99热影院 | 亚洲综合在线五月天 | 国产精品毛片久久久久久久久久99999999 | 国际av在线 | 黄色最新网址 | 国产高清精 | 久久视精品 | 国产精品女同一区二区三区久久夜 | 99久久99视频 | av在线精品 | 国产精品成人国产乱一区 | 欧美性色综合网 | 国产一级不卡毛片 | 五月婷婷在线播放 | 亚洲高清色综合 | 久久午夜国产精品 | 九九欧美视频 | 久久国产精品视频免费看 | 丁香婷婷深情五月亚洲 | 国产一级三级 | 色综合久久中文综合久久牛 | 久久久久国产精品厨房 | 国产成人专区 | 亚洲激情国产精品 | 色噜噜日韩精品欧美一区二区 | 欧美老女人xx | 国产在线欧美在线 | 丁香av| 欧美日韩国产免费视频 | 免费看黄网站在线 | 国产视频在线免费观看 | 日韩欧美黄色网址 | 五月婷婷激情 | 久草精品电影 | 久久综合给合久久狠狠色 | 婷婷丁香激情五月 | 免费观看成人网 | 色国产精品 | 成人av电影在线观看 | 伊人宗合| 日韩免费不卡av | 亚洲区另类春色综合小说校园片 | 亚洲久在线 | 久草在线免 | 亚洲一级片在线观看 | 日韩精品久久久久久 | 99精品久久久久久久久久综合 | 精品亚洲免费视频 | 97色se| 五月天激情综合 | 国产精品久久久久久久av大片 | 免费看三级网站 | 综合天天色 | 国产精品久久久久久高潮 | 欧美午夜性 | 五月婷婷在线观看 | 天天av天天 | 国产xx在线 | 婷婷中文字幕在线观看 | avcom在线| 中文字幕在线人 | 天天综合天天综合 | 亚洲春色综合另类校园电影 | 偷拍精偷拍精品欧洲亚洲网站 | 午夜精品久久久久 | 国产精品99精品久久免费 | 日本三级大片 | 久久九九九九 | 免费a网址 | 色婷婷视频在线 | 日韩色爱| 玖玖在线看 | 婷婷六月天在线 | 亚洲性xxxx | 五月天六月色 | 日韩免费高清在线 | 日韩欧美视频免费观看 | 亚洲国产成人久久 | 国产精品一区二区中文字幕 | www国产亚洲精品久久麻豆 | 天天色官网 | 国产日韩欧美在线影视 | 丝袜av一区 | japanese黑人亚洲人4k | 国产精品欧美在线 | 黄色成年 | 久久国产网站 | 中文字幕亚洲欧美 | 国产精品涩涩屋www在线观看 | 在线视频精品播放 | av一二三区 | 一区二区视频免费在线观看 | 久久只有精品 | 五月天色站 | 婷婷亚洲综合 | 最近中文字幕免费观看 | 成人在线一区二区 | 婷婷开心久久网 | 欧美天堂视频在线 | 免费观看黄| h文在线观看免费 | 婷婷精品在线 | av激情五月 | 一区二区三区免费在线观看 | 国产专区日韩专区 | 精品国产一区二区三区久久久久久 | 欧美性色综合网站 | 精品播放 | 国产成人精品久久二区二区 | 国产精品一区二区三区在线播放 | 精品夜夜嗨av一区二区三区 | 中文字幕在线色 | 久久国产精品久久精品国产演员表 | 亚洲 成人 欧美 | 99免费看片| 国产午夜精品一区二区三区 | 国产亚洲情侣一区二区无 | 韩日三级在线 | 欧美91精品国产自产 | 349k.cc看片app| 国产区在线看 | 国产一区成人 | 免费观看一级特黄欧美大片 | 狠狠色丁香婷综合久久 | 日韩免费三区 | 日韩激情小视频 | 亚洲午夜久久久久久久久久久 | 久久精品网站免费观看 | av免费观看高清 | 欧美日韩成人一区 | 日本久久久久 | 欧美污网站 | 天天爱天天操 | 国产字幕在线看 | 免费在线观看亚洲视频 | 韩国av免费看 | 国产最顶级的黄色片在线免费观看 | 毛片视频网址 | 最新极品jizzhd欧美 | 国产91在线免费视频 | 五月婷婷色播 | 啪一啪在线 | 一区二区三区在线观看免费 | 欧美网址在线观看 | 久久天堂精品视频 | 在线观看91精品视频 | 亚洲视频在线免费观看 | 国产亚洲精品久久久久久久久久 | 亚洲精品777 | 成人免费视频网站在线观看 | 中文字幕在线影院 | 成人国产精品 | 亚洲dvd| 成年人国产在线观看 | 日本久久综合网 | 一区二区三区高清不卡 | 在线观看国产一区二区 | 精品一区二区免费 | 成年人app网址 | 在线观看免费版高清版 | 黄色一级大片免费看 | 日韩中文字幕免费在线播放 | 国产婷婷精品av在线 | 婷婷六月激情 | 久久久高清 | 欧美天天综合 | 久热超碰 | 黄色一级免费网站 | 亚洲mv大片欧洲mv大片免费 | 国产一区二区免费看 | 韩日三级在线 | 午夜在线免费观看 | av在线最新 | 深爱开心激情网 | 亚洲欧洲成人精品av97 | 2019久久精品| av在线一级 | 999久久久欧美日韩黑人 | 久久精品黄色 | 97热久久免费频精品99 | 人人爽人人爽人人爽人人爽 | 亚洲综合在线五月 | 正在播放国产一区二区 | 久久免费视频1 | 国产字幕在线看 | 日日操日日操 | 午夜少妇一区二区三区 | 久草爱 | 91免费在线播放 | av中文在线影视 | 日本黄色大片免费 | av软件在线观看 | 国产精品永久免费视频 | 亚洲va欧美va人人爽 | 亚洲国产高清在线 | 婷婷丁香花五月天 | 色妞色视频一区二区三区四区 | 久久蜜臀一区二区三区av | 91激情小视频| 日本黄色免费大片 | 久久人视频| 国产精品一区二区三区在线播放 | 成人亚洲综合 | 久久最新 | 在线v| 91禁在线观看 | 激情一区二区三区欧美 | 久久国产精品99久久久久久丝袜 | jizzjizzjizz亚洲| 久福利 | 国产中文自拍 | 丁香六月网 | 亚洲,播放 | 色在线最新 | www激情com| 国产日韩中文在线 | 国产高清在线永久 | 美女黄频在线观看 | 夜夜澡人模人人添人人看 | 黄色成人免费电影 | 国产成人久久精品亚洲 | 国产亚洲欧美精品久久久久久 | 亚洲一区精品人人爽人人躁 | 日韩电影中文字幕 | 日本一区二区高清不卡 | 国产高清视频免费 | 麻豆影视网站 | 成人黄色片免费看 | 91丨九色丨国产在线 | 国内揄拍国内精品 | 天天草天天干天天射 | 一本一道波多野毛片中文在线 | 国产成人精品一区二区三区福利 | 特黄特色特刺激视频免费播放 | 精品国产乱码一区二区三区在线 | 国产精品久久久久久久7电影 | 91视频免费网站 | av在线精品 | 久草在线免费在线观看 | 久久极品 | 啪啪动态视频 | 999久久久免费视频 午夜国产在线观看 | 亚洲自拍偷拍色图 | 亚洲最大免费成人网 | 操一草| 三日本三级少妇三级99 | 婷婷六月综合网 | www.夜夜操.com| 国产精品综合久久久久 | 成人手机在线视频 | 久久国产露脸精品国产 | 亚洲精品看片 | 亚洲成人动漫在线观看 | 午夜视频在线观看一区二区三区 | 欧美精品久久久久久久久老牛影院 | 日韩一区二区三区高清在线观看 | 久久久噜噜噜久久久 | 日本精品一区二区三区在线观看 | 亚洲免费黄色 | 丝袜精品视频 | 丁香六月综合网 | 亚洲精品久久久蜜桃直播 | 国产一二区精品 | 成人久久久精品国产乱码一区二区 | 中文字幕精品三级久久久 | 人人玩人人添人人澡97 | 超碰人人草人人 | 麻豆国产电影 | 国产一级视频在线免费观看 | 三级黄色在线 | 日日日干| 超碰.com| 91麻豆精品国产自产 | 一区二区三区中文字幕在线观看 | 少妇搡bbb| 99久在线精品99re8热视频 | 久久精品激情 | 日本久久电影 | 伊人狠狠干 | 香蕉影视在线观看 | 欧美日韩中文在线观看 | 韩日精品视频 | 欧美国产三区 | 中文av一区二区 | 中文字幕免费观看全部电影 | 97视频在线看 | 午夜少妇一区二区三区 | 国产精品1区 | 久久精品免费观看 | 国产成人av福利 | 中文字幕人成一区 | 大片网站久久 | 免费在线观看视频a | 国产麻豆精品在线观看 | 91女子私密保健养生少妇 | 成人免费视频在线观看 | 天天爱av导航 | 欧美 日韩 久久 | 国产色久| 九九热在线视频 | 中文字幕在线播放一区 | 黄色精品久久 | 91久久精品一区二区三区 | 91理论片午午伦夜理片久久 | 91成人区 | 四虎在线观看精品视频 | 国产精品麻豆免费版 | 国产精品一区二区三区四区在线观看 | 成人午夜精品福利免费 | 青草视频在线免费 | 久久精品99久久 | 黄色一级大片在线观看 | 日韩欧美一二三 | 国产一级大片免费看 | 欧美夫妻性生活电影 | 成人在线视频免费观看 | 美女网站视频免费黄 | 亚洲精品视频国产 | 最新精品国产 | 婷婷久久久 | 亚洲全部视频 | 五月激情视频 | 四虎成人精品永久免费av九九 | 国产黄色精品网站 | 91精品国产欧美一区二区 | 伊人五月 | 欧美成人影音 | 成人高清av在线 | av天天澡天天爽天天av | 日日干网址| 免费观看一级特黄欧美大片 | 日韩日韩日韩日韩 | 色婷婷综合视频在线观看 | 亚洲精品a区 | 91精品国产一区二区三区 | 国产在线小视频 | 亚洲精品在线观看的 | 免费视频91 | 国产成人综合精品 | 在线中文字幕视频 | 精品美女久久久久 | 四川妇女搡bbbb搡bbbb搡 | 久久女同性恋中文字幕 | 欧美视频www | 日韩三级一区 | 精品美女久久久久久免费 | 亚洲高清视频在线播放 | 天天操综 | 久久综合天天 | 欧美99精品 | 国产免费视频一区二区裸体 | www视频在线观看 | 天堂久色 | 91亚洲精品久久久蜜桃 | 日日日视频 | 久久公开免费视频 | 99爱这里只有精品 | 天天做天天射 | 97超碰在线免费观看 | 国产免费又爽又刺激在线观看 | 亚洲黄色片一级 | 日韩有码专区 | 午夜日b视频 | 久久久久久久毛片 | 欧美淫aaa免费观看 日韩激情免费视频 | 密桃av在线| 亚洲理论在线 | 天天性天天草 | 91麻豆福利 | 日韩av网页 | 91亚洲综合 | 久久99在线观看 | 亚洲视频精品在线 | 亚洲精品在线观看不卡 | 欧美在线视频不卡 | 久久久久久高潮国产精品视 | 国产亲近乱来精品 | 91欧美视频网站 | 六月激情婷婷 | 欧美一级裸体视频 | 国产精品久久久久久久久大全 | 不卡国产在线 | 中文字幕精| 国产成人久久av免费高清密臂 | 97超碰人人干 | 91精品国自产在线 | 国产精品一级在线 | 国产一在线精品一区在线观看 | 日本在线观看一区二区 | 欧美激情综合色综合啪啪五月 | 中文字幕亚洲综合久久五月天色无吗'' | 国产精品色在线 | 91爱看片| 久久国产免费 | 在线免费精品视频 | 激情丁香在线 | 91在线视频在线观看 | 久草爱视频 | 国产精品九九久久久久久久 | 日韩精品中文字幕在线不卡尤物 | 黄色免费av | 在线黄色观看 | 婷婷五月色综合 | 日本三级人妇 | 婷婷av综合 | 日韩午夜电影网 | 免费在线中文字幕 | 国产精品久久精品 | 人九九精品 | 91福利视频免费 | 五月天久久婷婷 | 一本一本久久aa综合精品 | 国产精品久久久久久久久免费 | 成人动态视频 | 国产无套视频 | 超碰免费观看 | 日本一区二区三区视频在线播放 | 日本不卡一区二区三区在线观看 | 丁香视频在线观看 | 日韩av午夜 | 五月婷婷综合久久 | 午夜影院一级片 | 久青草影院 | 久久国精品 | 日p视频在线观看 | 日本韩国精品一区二区在线观看 | 国产在线观看污片 | 国产中年夫妇高潮精品视频 | 精品久久久久久久久久久院品网 | 国产精品美 | 九草在线视频 | 97精品国产97久久久久久春色 | 夜夜操天天摸 | 在线免费中文字幕 | 国产在线观看免费 | 天天av在线播放 | 精品成人久久 | 999久久a精品合区久久久 | 久久99中文字幕 | 欧美天天射 | 四川妇女搡bbbb搡bbbb搡 | 97精品国产97久久久久久粉红 | 又黄又爽又无遮挡的视频 | 黄色大片免费网站 | 91最新地址永久入口 | 久草免费色站 | 在线中文字幕播放 | 美女网站一区 | 中文字幕在线视频免费播放 | 午夜黄网 | 久久精品xxx | 天堂av一区二区 | 日韩中文字幕在线看 | 福利久久久| 国产精品久久久久久久免费 | 在线影视 一区 二区 三区 | 久草视频在线播放 | 亚洲jizzjizz日本少妇 | 97精品伊人 | 精品国产黄色片 | 久草资源在线观看 | 激情小说久久 | 97超碰在线资源 | 又黄又爽又湿又无遮挡的在线视频 | 欧美激情综合五月色丁香 | 99久久久久久久 | 综合在线色 | 精品成人久久 | 国产成人精品一区二区在线 | 日韩在线观看第一页 | 韩国av一区二区三区在线观看 | 97操操操 | 国产精品综合久久 | 久久精品综合一区 | 欧美大片aaa | 亚洲天堂毛片 | 狠狠操综合网 | 人人舔人人| 不卡的一区二区三区 | 免费观看黄 | 成人毛片100免费观看 | 国产精品第一 | 天天天天色综合 | 99精品在这里 | 四虎在线免费观看视频 | 成人午夜在线电影 | 人人舔人人爱 | 日本黄色免费播放 | 99这里只有 | 视频在线一区 | 精品国产成人av | 91视频高清免费 | 午夜性盈盈 | 中文在线字幕观看电影 | 91色九色| 91亚洲精品国产 | 久久综合干| www最近高清中文国语在线观看 | 精品久久久久久亚洲综合网站 | 久久精品日本啪啪涩涩 | 日本久久免费电影 | 亚洲黄色成人 | 国产精品你懂的在线观看 | 亚洲视频专区在线 | av色图天堂网 | 九九九九九九精品任你躁 | 超碰夜夜 | 国产中出在线观看 | 欧美一级黄色视屏 | 久久ww| av免费福利| 亚洲视频综合 | 免费网站观看www在线观看 | 欧美另类69 | 高清av免费看 | 丝袜美腿一区 | 一区二区三区国产精品 | 狠狠干在线 | 欧美日性视频 | a级国产乱理论片在线观看 伊人宗合网 | 亚洲欧洲av在线 | 成人黄色影片在线 | 国产精品成人一区二区三区吃奶 | 99精品视频一区 | 在线视频观看国产 | 免费高清av在线看 | 色综合天天狠天天透天天伊人 | 精品国产成人在线 | 欧洲色吧 | 久久免费片 | 就要色综合 | 久久亚洲美女 | av大全在线免费观看 | 欧美日韩高清一区二区 国产亚洲免费看 | 久一在线| 成人在线观看免费 | 日韩videos高潮hd | 青青网视频| 在线看成人片 | 国产一区二区三区在线免费观看 | 久久精品久久精品 | 亚洲在线网址 | 欧美日韩成人 | 久草手机视频 | 少妇bbbb| 国产日韩精品一区二区三区在线 | 久久精品综合网 | 超碰官网| www.黄色片网站 | 99久热在线精品视频成人一区 | 玖玖视频免费在线 | 91av在线免费 | 日日草夜夜操 | 91视频 - x99av| 探花视频在线版播放免费观看 | 日韩中文字幕国产精品 | 亚洲精品乱码久久久久 | 国产麻豆精品95视频 | 最新免费中文字幕 | 欧美乱码精品一区二区 | 国产综合视频在线观看 | 国产很黄很色的视频 | 91视频88av | 一级精品视频在线观看宜春院 | 精品国产免费观看 | 国偷自产中文字幕亚洲手机在线 | 久久成人免费电影 | 婷婷五月在线视频 | 日韩精品最新在线观看 | 日本黄色免费播放 |