RedisTemplate常用集合使用说明

RedisTemplate常用集合使用说明-boundValueOps
RedisTemplate常用集合使用说明-boundSetOps
RedisTemplate常用集合使用说明-boundZSetOps
RedisTemplate常用集合使用说明-boundListOps
RedisTemplate常用集合使用说明-boundHashOps

一、RedisTemplate常用集合使用说明-boundZSetOps

BoundZSetOperations boundZSetOperations = redisTemplate.boundZSetOps("bzso");  

1.add(V value, double score)

 绑定键中添加值,同时指定值的分数

Java代码 收藏代码

boundZSetOperations.add("a",1);  
boundZSetOperations.add("b",2);  

2.range(long start, long end)

获取绑定键的指定区间值

Java代码 收藏代码

//集合中的值  
boundZSetOperations.range(0,-1).forEach(v -> System.out.println("集合中的值:" + v));  

3.count(double min, double max)

 获取从指定位置开始(起始下标不再为0),到结束位置位置的值个数

Java代码 收藏代码

//获取从指定位置开始(下标起始坐标为1)到结束位置为止的值个数  
System.out.println("获取从指定位置开始(下标起始坐标为1)到结束位置为止的值个数:" + boundZSetOperations.count(1,2));  

4.add(Set<ZSetOperations.TypedTuple> tuples)

以TypedTuple的方式新增值

Java代码 收藏代码

//通过TypedTuple方式新增数据  
ZSetOperations.TypedTuple<Object> typedTuple1 = new DefaultTypedTuple<Object>("E",6.0);  
ZSetOperations.TypedTuple<Object> typedTuple2 = new DefaultTypedTuple<Object>("F",7.0);  
ZSetOperations.TypedTuple<Object> typedTuple3 = new DefaultTypedTuple<Object>("G",5.0);  
Set<ZSetOperations.TypedTuple<Object>> typedTupleSet = new HashSet<ZSetOperations.TypedTuple<Object>>();  
typedTupleSet.add(typedTuple1);  
typedTupleSet.add(typedTuple2);  
typedTupleSet.add(typedTuple3);  
boundZSetOperations.add(typedTupleSet);  
boundZSetOperations.range(0,-1).forEach(v -> System.out.println("通过TypedTuple方式新增数据:" + v));  

5.incrementScore(V value, double delta)

自增长指定键的分数

Java代码 收藏代码

//自增长后的数据  
boundZSetOperations.incrementScore("a",1);  
boundZSetOperations.range(0,-1).forEach(v -> System.out.println("自增长后的数据:" + v));  

6.intersectAndStore(Collection otherKeys, K destKey)和intersectAndStore(K otherKey, K destKey)

 比较特定键中相同的值并存储

Java代码 收藏代码

//获取相同值,并存储  
boundZSetOperations.intersectAndStore("bzso1","bzso2");  
redisTemplate.opsForZSet().range("bzso2",0,-1).forEach(v -> System.out.println("获取相同值,并存储" + v));  

7.scan(ScanOptions options)

 匹配获取键值对,ScanOptions.NONE为获取全部键值对;ScanOptions.scanOptions().match("C").build()匹配获取键位map1的键值对,不能模糊匹配。

Java代码 收藏代码

Cursor<ZSetOperations.TypedTuple> cursor = boundZSetOperations.scan(ScanOptions.NONE);  
while (cursor.hasNext()){  
      ZSetOperations.TypedTuple typedTuple = cursor.next();  
      System.out.println("扫描绑定数据:" + typedTuple.getValue() + "--->" + typedTuple.getScore());  
}  

8.rangeByLex(RedisZSetCommands.Range range)

 根据Range排序区间获取值

Java代码 收藏代码

//按照值来排序的取值,这个排序只有在有相同分数的情况下才能使用,如果有不同的分数则返回值不确定  
RedisZSetCommands.Range range = new RedisZSetCommands.Range();  
range.lte("b");  
//range.gte("F");  
boundZSetOperations.rangeByLex(range).forEach(v -> System.out.println("按照值来排序的取值:" + v));  

9.rangeByLex(RedisZSetCommands.Range range, RedisZSetCommands.Limit limit)

 根据Range排序区间和Limit设置的下标及设置的长度获取值

Java代码 收藏代码

//获取从设置下标开始的设置长度的元素值  
RedisZSetCommands.Limit limit = new RedisZSetCommands.Limit();  
limit.count(2);  
//起始下标为0  
limit.offset(1);  
boundZSetOperations.rangeByLex(range,limit).forEach(v -> System.out.println("按照值来排序的限定取值:" + v));  

10.rangeByScore(double min, double max)

 根据分数区间值排序取值

Java代码 收藏代码

//按照分数排序  
boundZSetOperations.rangeByScore(3,7).forEach(v -> System.out.println("按照分数排序:" + v));  

11.rangeWithScores(long start, long end)

按照位置排序对指定区间取值和分数

Java代码 收藏代码

//按照位置排序取值和分数  
Set<ZSetOperations.TypedTuple> tupleSet = boundZSetOperations.rangeWithScores(3,5);  
tupleSet.forEach(v -> System.out.printf("按照位置排序取值和分数:%s-->%s\n",v.getValue(),v.getScore()));  

12.rangeByScoreWithScores(double min, double max)

按照分数排序对指定区间取值和分数

Java代码 收藏代码

//按照分数位置排序取值和分数  
Set<ZSetOperations.TypedTuple> scoreSet = boundZSetOperations.rangeByScoreWithScores(1,5);  
scoreSet.forEach(v -> System.out.printf("按照分数位置排序取值和分数:%s-->%s\n",v.getValue(),v.getScore()));  

13.reverseRange(long start, long end)

  倒序排序获取指定区间的值

Java代码 收藏代码

//按照值来倒序取值  
boundZSetOperations.reverseRange(0,3).forEach(v -> System.out.println("按照值来倒序取值:" + v));  

14.reverseRangeByScore(double min, double max)

 按照分数倒序排序获取区间取值

Java代码 收藏代码

//按照分数来倒序取值  
boundZSetOperations.reverseRangeByScore(2,5).forEach(v -> System.out.println("按照分数来倒序取值:" + v));  

15.reverseRangeWithScores(long start, long end)

 倒序排序获取指定区间的值和分数

Java代码 收藏代码

//按照位置倒序取值和分数  
tupleSet = boundZSetOperations.reverseRangeWithScores(2,5);  
tupleSet.forEach(v -> System.out.printf("按照位置倒序取值和分数:%s-->%s\n",v.getValue(),v.getScore()));  
  1. reverseRangeByScoreWithScores(double min, double max)

    按照分数倒序排序获取指定区间的值和分数
    Java代码 收藏代码

    //按照分数位置倒序取值和分数
    scoreSet = boundZSetOperations.reverseRangeByScoreWithScores(2,5);
    scoreSet.forEach(v -> System.out.printf(“按照分数位置倒序取值和分数:%s–>%s\n”,v.getValue(),v.getScore()));

17.count(double min, double max)

 统计分数在某个区间的个数

Java代码 收藏代码

//统计分数在某个区间的个数  
System.out.println("统计分数在某个区间的个数:" + boundZSetOperations.count(2,5));  

18.rank(Object o)

  获取绑定键中的元素的下标

Java代码 收藏代码

//获取变量中元素的索引,下标开始位置为0  
System.out.println("获取变量中元素的索引:" + boundZSetOperations.rank("b"));  

19.score(Object o)

 获取绑定键中元素的分数

Java代码 收藏代码

System.out.println("获取变量中元素的分数:" + boundZSetOperations.score("b"));  
  1. zCard()

    获取绑定键中元素的个数
    Java代码 收藏代码

    //获取变量中元素的个数
    System.out.println(“获取变量中元素的个数:” + boundZSetOperations.zCard());

21.intersectAndStore(Collection otherKeys, K destKey)和intersectAndStore(K otherKey, K destKey)

 比较相同的值并存储

Java代码 收藏代码

//intersectAndStore后的数据  
boundZSetOperations.intersectAndStore("abc","bac");  
redisTemplate.opsForSet().members("bac").forEach(v -> System.out.println("intersectAndStore后的数据:" + v));  
  
//intersectAndStore集合后的数据  
List list = new ArrayList<>(Arrays.asList("abc","acb"));  
boundZSetOperations.intersectAndStore(list,"bac");  
redisTemplate.opsForSet().members("bac").forEach(v -> System.out.println("intersectAndStore集合后的数据:" + v));  

22.unionAndStore(Collection otherKeys, K destKey)和unionAndStore(K otherKey, K destKey)

合并所有的值并存储

Java代码 收藏代码

//unionAndStore后的数据  
boundZSetOperations.unionAndStore("abc","bca");  
redisTemplate.opsForZSet().range("bca",0,-1).forEach(v -> System.out.println("unionAndStore后的数据:" + v));  
  
//unionAndStore集合后的数据  
boundZSetOperations.unionAndStore(list,"bca");  
redisTemplate.opsForZSet().range("bca",0,-1).forEach(v -> System.out.println("unionAndStore集合后的数据:" + v));  

23.remove(Object… values)

 按值批量删除绑定键中的元素

Java代码 收藏代码

//移除给定值中的变量  
long removeCount = boundZSetOperations.remove("a","b");  
System.out.println("移除给定值中的变量个数:" + removeCount);  
boundZSetOperations.range(0,-1).forEach(v -> System.out.println("移除给定值中的变量后剩余的值:" + v));  

23.removeRange(long start, long end)

 删除绑定键中按值排序的区间的值

Java代码 收藏代码

/移除区间值的变量  
boundZSetOperations.removeRange(2,3);  
boundZSetOperations.range(0,-1).forEach(v -> System.out.println("移除区间值的变量后剩余的值:" + v));  

24.removeRangeByScore(double min, double max)

 按照分数排序删除区间的值

Java代码 收藏代码

//移除分数区间值的变量  
boundZSetOperations.removeRangeByScore(3,5);  
boundZSetOperations.range(0,-1).forEach(v -> System.out.println("移除分数区间值的变量后剩余的值:" + v)); 

二、RedisTemplate常用集合使用说明-boundListOps

//定义绑定的键  
BoundListOperations boundListOperations = redisTemplate.boundListOps("lk");  

1.leftPush(V value)和rightPush(V value)

 在绑定键中添加值

Java代码 收藏代码

//在绑定的键中添加值  
boundListOperations.leftPush("h");  
boundListOperations.leftPush("i");  
boundListOperations.rightPush("a");  
boundListOperations.rightPush("b");  

2.range(long start, long end)

 获取绑定键中给定的区间值

Java代码 收藏代码

//获取绑定的键中的值  
boundListOperations.range(0,-1).forEach(v -> System.out.println("获取绑定的键中的值" + v));  

3.index(long index)

获取给定位置的值

Java代码 收藏代码

//获取特定位置的值  
ystem.out.println("获取特定位置的值:" + boundListOperations.index(0));  

4.leftPop()

弹出左边的值

Java代码 收藏代码

//弹出左边的值  
System.out.println("弹出左边的值:" + boundListOperations.leftPop());  

5.rightPop()

弹出右边的值

Java代码 收藏代码

//弹出右边的值  
ystem.out.println("弹出右边的值:" + boundListOperations.rightPop());  

6.leftPush(V pivot, V value)

在指定的第一个值出现的左边添加值

Java代码 收藏代码

//在指定的出现第一个值左边添加值  
boundListOperations.leftPush("i","w");  
boundListOperations.range(0,-1).forEach(v -> System.out.println("在指定的出现第一个值左边添加值:" + v));  

7.rightPush(V pivot, V value)

在指定的第一个值出现的右边添加值

Java代码 收藏代码

//在指定的出现第一个值右边添加值  
boundListOperations.rightPush("i","x");  
boundListOperations.range(0,-1).forEach(v -> System.out.println("在指定的出现第一个值左边添加值:" + v));  

8.leftPop(long timeout, TimeUnit unit)

在指定的时间后弹出左边的值

Java代码 收藏代码

//在指定的时间过后弹出左边的值  
boundListOperations.leftPop(1, TimeUnit.SECONDS);  

9.rightPop(long timeout, TimeUnit unit)

 在指定的时间后弹出右边的值

Java代码 收藏代码

//在指定的时间过后弹出右边的值  
oundListOperations.rightPop(1, TimeUnit.SECONDS);  

10.leftPushAll(V… values)

 在左边批量添加值

Java代码 收藏代码

//在左边批量添加值  
boundListOperations.leftPushAll("y","g");  
boundListOperations.range(0,-1).forEach(v -> System.out.println("在左边批量添加值:" + v));  

11.rightPushAll(V… values)

在右边批量添加值

Java代码 收藏代码

//在右边批量添加值  
boundListOperations.rightPushAll("b","r");  
boundListOperations.range(0,-1).forEach(v -> System.out.println("在右边批量添加值:" + v));  

12.leftPushIfPresent(V value)

  在左边添加不存在的值

Java代码 收藏代码

//向左边添加不存在的值  
boundListOperations.leftPushIfPresent("k");  
boundListOperations.leftPushIfPresent(";");  
boundListOperations.range(0,-1).forEach(v -> System.out.println("向左边添加不存在的值:" + v));  

13.rightPushIfPresent(V value)

 在右边添加不存在的值

Java代码 收藏代码

//向右边添加不存在的值  
boundListOperations.rightPushIfPresent("k");  
boundListOperations.rightPushIfPresent(";");  
System.out.println("向右边添加不存在的值:" + boundListOperations.range(0,-1).toString());  

14.remove(long count, Object value)

移除指定个数的值

Java代码 收藏代码

//移除指定值的个数  
long removeCount = boundListOperations.remove(2,"i");  
System.out.println("移除指定值的个数:" + removeCount);  
System.out.println("移除指定值的个数后剩余的值:" + boundListOperations.range(0,-1).toString());  

15.set(long index, V value)

在指定位置添加值

Java代码 收藏代码

//在指定位置设置值  
boundListOperations.set(0,"j");  
System.out.println("在指定位置设置值:" + boundListOperations.range(0,-1).toString());  

16.trim(long start, long end)

截取原来区间的值为新值

Java代码 收藏代码

//截取指定区间位置的值  
boundListOperations.trim(1,3);  
System.out.println("截取指定区间位置的值:" + boundListOperations.range(0,-1).toString());  

三、RedisTemplate常用集合使用说明-boundValueOps

BoundValueOperations boundValueOperations = redisTemplate.boundValueOps("bvo");  

1.append(String value)

 在原来值的末尾添加值

Java代码 收藏代码

boundValueOperations.append("a");  
boundValueOperations.append("b");  

2.get(long start, long end)

获取指定区间位置的值

Java代码 收藏代码

//获取从指定位置开始,到指定位置为止的值  
System.out.println("获取从指定位置开始,到指定位置为止的值:" + boundValueOperations.get(0,2));  

3.get()

 获取字符串所有值

Java代码 收藏代码

//获取所有值  
System.out.println("获取所有值:" + boundValueOperations.get());  

4.set(V value)

 给绑定键重新设置值

Java代码 收藏代码

//重新设置值  
boundValueOperations.set("f");  
System.out.println("重新设置值:" + boundValueOperations.get());  

5.set(V value, long timeout, TimeUnit unit)

在指定时间后重新设置值

Java代码 收藏代码

//在指定时间后重新设置  
boundValueOperations.set("wwww",5,TimeUnit.SECONDS);  
System.out.println("在指定时间后重新设置:" + boundValueOperations.get());  

6.set(V value, long offset)

截取原有值的指定长度后添加新值在后面

Java代码 收藏代码

//截取原有值的指定长度后添加新值在后面  
boundValueOperations.set("nnnnnn",3);  
System.out.println("截取原有值的指定长度后添加新值在后面:" + boundValueOperations.get());  

7.setIfAbsent(V value)

没有值存在则添加

Java代码 收藏代码

 //没有值存在则添加  
boundValueOperations.setIfAbsent("mmm");  
System.out.println("没有值存在则添加:" + boundValueOperations.get());  

8.getAndSet(V value)

 获取原来的值并重新赋新值

Java代码 收藏代码

 //获取原来的值,并覆盖为新值  
Object object = boundValueOperations.getAndSet("yyy");  
System.out.print("获取原来的值" + object);  
System.out.println(",覆盖为新值:" + boundValueOperations.get());  

9.size()

获取绑定值的长度

Java代码 收藏代码

System.out.println("value值的长度:" + boundValueOperations.size());  

10.increment(double delta)和increment(long delta)

自增长键值,前提是绑定值的类型是doule或long类型
Java代码 收藏代码

//自增长只能在为数字类型的时候才可以  
boundValueOperations.increment(1);  
System.out.println("自增长只能在为数字类型的时候才可以:" + boundValueOperations.get());  

四、RedisTemplate常用集合使用说明-boundSetOps

BoundSetOperations boundSetOperations = redisTemplate.boundSetOps("bso");  

1.add(V… values)和members()

批量添加值,获取所有值
Java代码 收藏代码

//添加新值后查看所有的值  
boundSetOperations.add("a","b","c");  
boundSetOperations.members().forEach(v -> System.out.println("添加新值后查看所有的值:" + v));  

2.scan(ScanOptions options)

匹配获取键值对,ScanOptions.NONE为获取全部键值对;ScanOptions.scanOptions().match("c").build()匹配获取键位map1的键值对,不能模糊匹配。

Java代码 收藏代码

Cursor<String> cursor = boundSetOperations.scan(ScanOptions.NONE);  
while (cursor.hasNext()){  
      System.out.println("遍历所有值:" + cursor.next());  
}  

3.randomMember()

 随机获取一个值

Java代码 收藏代码

System.out.println("随机获取一个值:" + boundSetOperations.randomMember());  

4.randomMembers(long count)

随机获取指定数量的值
Java代码 收藏代码

System.out.println("随机获取指定数量的值:" + boundSetOperations.randomMembers(2));  

5.distinctRandomMembers(long count)

获取唯一的随机数量值
Java代码 收藏代码

System.out.println("获取唯一的随机数量值:" + boundSetOperations.distinctRandomMembers(2));  

6.diff(Collection keys)

比较多个特定键中的不同值

Java代码 收藏代码

//这里比较的也应该是特定的集合名称,且名称不能和已经在比较的set集合中存在,否则报错  
Set list = new HashSet<>();  
list.add("bso1");  
boundSetOperations.diff(list).forEach(v -> System.out.println("比较给定集合中的set的不同元素:" + v));  

7.diff(K key)

比较2个特定键中的不同值
Java代码 收藏代码

boundSetOperations.diff("bso2").forEach(v -> System.out.println("比较给定set的不同元素:" + v));  

8.diffAndStore(Collection keys, K destKey)和diffAndStore(K keys, K destKey)

比较键中的不同值并存储
Java代码 收藏代码

//比较不同集合并存储  
boundSetOperations.diffAndStore("bso2","bso3");  
redisTemplate.opsForSet().members("bso3").forEach(v -> System.out.println("比较不同set并存储:" + v));  

9.intersect(Collection keys)和intersect(K key)

比较键中的相同值
Java代码 收藏代码

//比较给定集合中的相同值  
boundSetOperations.intersect("bso2").forEach(v -> System.out.println("比较给定集合中的相同值:" + v));  
boundSetOperations.intersect(list).forEach(v -> System.out.println("比较给定集合中的相同值:" + v));  

10.intersectAndStore(Collection keys, K destKey)和intersectAndStore(K key, K destKey)

比较键中的相同值并存储
Java代码 收藏代码

//比较给定集合中的相同值并存储  
boundSetOperations.intersectAndStore("bso3","bso4");  
redisTemplate.opsForSet().members("bso4").forEach(v -> System.out.println("比较给定set的相同元素:" + v));  

11.union(Collection keys)和union(K key)

将特定键中的所有值合并
Java代码 收藏代码

//将给定集合中的所有值合并  
 boundSetOperations.union("bso2").forEach(v -> System.out.println("将给定集合中的所有值合并:" + v));  
boundSetOperations.union(list).forEach(v -> System.out.println("将给定集合中的所有值合并:" + v));  

12.unionAndStore(Collection keys, K destKey)和unionAndStore(K key, K destKey)

  将特定键中的所有值合并并存储

Java代码 收藏代码

boundSetOperations.unionAndStore("bso3","bso5");  
redisTemplate.opsForSet().members("bso5").forEach(v -> System.out.println("将给定集合中的所有值合并:" + v));  

13.move(K destKey, V value)

将value值转移到特定键中

Java代码 收藏代码

//将集合中的value值移动到另外一个集合中  
boolean moveSuc = boundSetOperations.move("bso6","a");  
System.out.println("将集合中的值移动到另外一个集合中是否成功:" + moveSuc);  
redisTemplate.opsForSet().members("bso6").forEach(v -> System.out.println("将集合中的值移动到另外一个集合中:" + v));  
boundSetOperations.members().forEach(v -> System.out.println("将集合中的值移动到另外一个集合中原集合剩余的值:" + v));  

14.pop()

 弹出集合中的值

Java代码 收藏代码

 //弹出集合中的值  
Object p = boundSetOperations.pop();  
System.out.println("弹出集合中的值:" + p);  
boundSetOperations.members().forEach(v -> System.out.println("弹出集合中的值原集合剩余的值:" + v));  

15.remove(Object… values)

 批量移除元素

Java代码 收藏代码

//移除特定元素  
long removeCount = boundSetOperations.remove("c");  
System.out.println("移除特定元素个数:" + removeCount);  
boundSetOperations.members().forEach(v -> System.out.println("移除特定元素个数后原集合剩余的值:" + v));  

五、 BoundHashOperations<String, String, Object> boundHashOperations = redisTemplate.boundHashOps(“li”);

1、put(HK key, HV value)

新增元素到指定键中
Java代码 收藏代码

boundHashOperations.put("ww","i");  
boundHashOperations.put("w1","i1");  
boundHashOperations.put("w2","i2");  

2、getKey()

获取指定键中的值
Java代码 收藏代码

//获取设置的绑定key值  
System.out.println("获取设置的绑定key值:" + boundHashOperations.getKey());  

3、values()

获取map中的值jdk要求1.8及以上
Java代码 收藏代码

//获取map中的value值  
boundHashOperations.values().forEach(v -> System.out.println("获取map中的value值" + v));  

4、entries()

 获取map中的键值对

Java代码 收藏代码

//获取map键值对  
boundHashOperations.entries().forEach((m,n) -> System.out.println("获取map键值对:" + m + "-" + n));  

5、get(Object member)

获取map键中的值
Java代码 收藏代码

//获取map键的值  
System.out.println("获取map建的值:" + boundHashOperations.get("w1"));  

6、keys()

获取map的键
Java代码 收藏代码

//获取map的键  
boundHashOperations.keys().forEach(v -> System.out.println("获取map的键:" + v));  

7、multiGet(Collection keys)

根据map键批量获取map值
Java代码 收藏代码

//根据map键批量获取map值  
List list = new ArrayList<>(Arrays.asList("ww","w1"));  
boundHashOperations.multiGet(list).forEach(v -> System.out.println("根据map键批量获取map值:" + v));  

8、putAll(Map<? extends HK,? extends HV> m)

批量添加键值对
Java代码 收藏代码

//批量添加键值对  
Map map = new HashMap<>();  
map.put("m1","n1");  
map.put("m2","n2");  
boundHashOperations.putAll(map);  
boundHashOperations.entries().forEach((m,n) -> System.out.println("批量添加键值对:" + m + "-" + n));  

9、increment(HK key, long delta)

自增长map键的值
Java代码 收藏代码

//自增长map键的值  
boundHashOperations.increment("c",1);  
System.out.println("自增长map键的值:" + boundHashOperations.get("c"));  

10、putIfAbsent(HK key, HV value)

添加不存在的map键
Java代码 收藏代码

//如果map键不存在,则新增,存在,则不变  
boundHashOperations.putIfAbsent("m2","n2-1");  
boundHashOperations.putIfAbsent("m3","n3");  
boundHashOperations.entries().forEach((m,n) -> System.out.println("新增不存在的键值对:" + m + "-" + n));  

11、size()

获取特定键对应的map大小
Java代码 收藏代码

//查看绑定建的map大小  
System.out.println("查看绑定建的map大小:" + boundHashOperations.size());  

12、scan(ScanOptions options)

扫描特定键所有值
Java代码 收藏代码

//遍历绑定键获取所有值  
Cursor<Map.Entry<String, Object>> cursor = boundHashOperations.scan(ScanOptions.NONE);  
while (cursor.hasNext()){  
        Map.Entry<String, Object> entry = cursor.next();  
         System.out.println("遍历绑定键获取所有值:" + entry.getKey() + "---" + entry.getValue());  
 }  

13、delete(Object… keys)

批量删除map值
Java代码 收藏代码

long delSize = boundHashOperations.delete("m3","m2");  
System.out.println("删除的键的个数:" + delSize);  
boundHashOperations.entries().forEach((m,n) -> System.out.println("删除后剩余map键值对:" + m + "-" + n));  
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值