jedis使用_使用 JedisAPI 操作 Redis

一 使用 JedisAPI 操作 Redis

Jedis 集成了 redis 的一些命令操作,封装了对 redis 命令的 Java 客户端。

1 使用 Jedis 操作 Redis 单机版

1.1 创建一个jar工程

1.2 修改 POM 文件添加 Jedis 坐标

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.y</groupId>
  <artifactId>jedisDemo</artifactId>
  <version>0.0.1-SNAPSHOT</version>
	<dependencies>
		<dependency>
			<groupId>redis.clients</groupId>
			<artifactId>jedis</artifactId>
			<version>2.9.0</version>
		</dependency>
	</dependencies>
</project>

1.3 测试 Jedis 操作 Redis 单机版

package com.y;

import java.io.IOException;
import java.util.HashSet;
import java.util.Set;

import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPool;

public class TestJedis {

	public static void main(String[] args) throws Exception {
		TestJedis test = new TestJedis();
		test.testJedisSingle();
	}
	
	public void testJedisSingle(){
		Jedis jedis = new Jedis("192.168.178.3",6379);
		String result = jedis.set("name","tom");
		System.out.println(result);
		String str = jedis.get("name");
		System.out.println(str);
		Long l = jedis.hset("user", "username", "jery");
		System.out.println(l);
		String hres = jedis.hget("user","username");
		System.out.println(hres);
		jedis.close();
	}
   
}

1.4 测试使用连接池操作 Redis 单机版

package com.y;

import java.io.IOException;
import java.util.HashSet;
import java.util.Set;

import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPool;

public class TestJedis {

	public static void main(String[] args) throws Exception {	
		TestJedis test = new TestJedis();
		test.testJedisPool();	
        }
	public void testJedisPool(){
	
		JedisPool pool = new JedisPool("192.168.178.3",6379);
		Jedis jedis =  pool.getResource();
		String result = jedis.set("name","tom");
		System.out.println(result);
		String str = jedis.get("name");
		System.out.println(str);
		Long l = jedis.hset("user", "username", "jery");
		System.out.println(l);
		String hres = jedis.hget("user","username");
		System.out.println(hres);
		jedis.close();
	}
}

2 使用 Jedis 操作 Redis 集群

 package com.y;

import java.io.IOException;
import java.util.HashSet;
import java.util.Set;

import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPool;

public class TestJedis {

	public static void main(String[] args) throws Exception {	
		TestJedis test = new TestJedis();
		test.testJeidsCluster();
	}
	public void testJeidsCluster() throws Exception{
		
		Set<HostAndPort> nodes = new HashSet<>();
		nodes.add(new HostAndPort("192.168.178.3",8001));
		nodes.add(new HostAndPort("192.168.178.3",8002));
		nodes.add(new HostAndPort("192.168.178.3",8003));
		nodes.add(new HostAndPort("192.168.178.3",8004));
		nodes.add(new HostAndPort("192.168.178.3",8005));
		nodes.add(new HostAndPort("192.168.178.3",8006));
		JedisCluster jc = new JedisCluster(nodes);
		String result = jc.set("name","tom");
		System.out.println(result);
		String str = jc.get("name");
		System.out.println(str);
		Long l = jc.hset("user", "username", "jery");
		System.out.println(l);
		String hres = jc.hget("user","username");
		System.out.println(hres);
		jc.close();
	}
}

七、 Spring 整合 Jedis

1 整合单机版

1.1 创建一个jar工程

1.2 修改 POM 文件添加 Jedis 与 Spring 的坐标

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.y</groupId>
	<artifactId>spring-JedisDemo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<dependencies>
		<dependency>
			<groupId>redis.clients</groupId>
			<artifactId>jedis</artifactId>
			<version>2.9.0</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>4.1.3.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>4.1.3.RELEASE</version>
		</dependency>
	</dependencies>
</project>

1.3 创建 JedisDao 接口与接口实现类

JedisDao :

package com.y.dao;

public interface JedisDao {
	public String set(String key ,String value);
	public String get (String key);
	public Long  hset(String hkey,String key,String value );
	public String hget(String hkey, String key);
}

JedisDaoImpl :

package com.y.dao.impl;

import org.springframework.beans.factory.annotation.Autowired;
import com.y.dao.JedisDao;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

public class JedisSingleDaoImpl implements JedisDao {

	@Autowired
	private JedisPool jedisPool;
	
	@Override
	public String set(String key, String value) {	
		Jedis jedis = jedisPool.getResource();	
		return jedis.set(key, value);
	}

	@Override
	public String get(String key) {	
		Jedis jedis = jedisPool.getResource();	
		return jedis.get(key);
	}

	@Override
	public Long hset(String hkey, String key, String value) {
		Jedis jedis = jedisPool.getResource();
		return jedis.hset(hkey, key, value);
	}

	@Override
	public String hget(String hkey, String key) {
		Jedis jedis = jedisPool.getResource();
		return jedis.hget(hkey, key);
	}
}

1.4 在 Spring 配置文件中整合 Jedis

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
	<context:component-scan base-package="com.y.dao"></context:component-scan>

	<!-- jedisPool 的配置 -->
	<bean id="poolconfig" class="redis.clients.jedis.JedisPoolConfig">
		<!-- 最大连接数 -->
		<property name="maxTotal" value="30" />
		<!-- 最大空闲连接数 -->
		<property name="maxIdle" value="10" />
		<!-- 每次释放连接的最大数目 -->
		<property name="numTestsPerEvictionRun" value="1024" />
		<!-- 释放连接的扫描间隔(毫秒) -->
		<property name="timeBetweenEvictionRunsMillis" value="30000" />
		<!-- 连接最小空闲时间 -->
		<property name="minEvictableIdleTimeMillis" value="1800000" />
		<!-- 连接空闲多久后释放, 当空闲时间>该值 且 空闲连接>最大空闲连接数 时直接释放 -->
		<property name="softMinEvictableIdleTimeMillis" value="10000" />
		<!-- 获取连接时的最大等待毫秒数,小于零:阻塞不 确定的时间,默认-1 -->
		<property name="maxWaitMillis" value="1500" />
		<!-- 在获取连接的时候检查有效性, 默认 false -->
		<property name="testOnBorrow" value="true" />
		<!-- 在空闲时检查有效性, 默认 false -->
		<property name="testWhileIdle" value="true" />
		<!-- 连接耗尽时是否阻塞, false 报异常,ture 阻塞 直到超时, 默认 true -->
		<property name="blockWhenExhausted" value="false" />
	</bean>

	<bean id="jedisPool" class="redis.clients.jedis.JedisPool">
		<constructor-arg name="poolConfig">
			<ref bean="poolconfig" />
		</constructor-arg>
		<constructor-arg name="host">
			<value>192.168.178.3</value>
		</constructor-arg>
		<constructor-arg name="port">
			<value>6379</value>
		</constructor-arg>
	</bean>
	<bean id="jedisSingleDaoImpl" class="com.y.dao.impl.JedisSingleDaoImpl"></bean>
</beans>

1.5 测试单机版

package com.y;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.y.dao.JedisDao;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

public class Test {

	public static void main(String[] args) {
		Test.testJedisSingle();
	}
	
	public static void testJedisPool(){
		JedisPool jp =new JedisPool("192.168.178.3",6379);
		Jedis jedis = jp.getResource();
		jedis.set("name", "tom");
		String str = jedis.get("name");
		System.out.println(str);
		jedis.close();
	}
	
	public static void testJedisSingle(){
		ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext-Jedis.xml");
		JedisDao jd = (JedisDao) ac.getBean("jedisClusterDaoImpl");
		String str = jd.set("端午节","五月五日");
		System.out.println(str);
		String result = jd.get("端午节");
		System.out.println(result);	
	}
}

2 整合集群版

2.1 添加 JedisDao 实现类。基于 JedisCluster 的实现

JedisDao与单机版一样,实现类JedisClusterDaoImpl为:

package com.y.dao.impl;

import org.springframework.beans.factory.annotation.Autowired;
import com.y.dao.JedisDao;
import redis.clients.jedis.JedisCluster;
public class JedisClusterDaoImpl implements JedisDao {

	@Autowired
	private JedisCluster jedisCluster;
	@Override
	public String set(String key, String value) {	
		return jedisCluster.set(key, value);
	}

	@Override
	public String get(String key) {
		return jedisCluster.get(key);
	}

	@Override
	public Long hset(String hkey, String key, String value) {
		return jedisCluster.hset(hkey, key, value);
	}

	@Override
	public String hget(String hkey, String key) {
		return jedisCluster.hget(hkey, key);
	}
}

2.2 在 Spring 配置文件中整合 JedisCluster

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
	<context:component-scan base-package="com.y.dao"></context:component-scan>

	<!-- jedisPool 的配置 -->
	<bean id="poolconfig" class="redis.clients.jedis.JedisPoolConfig">
		<!-- 最大连接数 -->
		<property name="maxTotal" value="30" />
		<!-- 最大空闲连接数 -->
		<property name="maxIdle" value="10" />
		<!-- 每次释放连接的最大数目 -->
		<property name="numTestsPerEvictionRun" value="1024" />
		<!-- 释放连接的扫描间隔(毫秒) -->
		<property name="timeBetweenEvictionRunsMillis" value="30000" />
		<!-- 连接最小空闲时间 -->
		<property name="minEvictableIdleTimeMillis" value="1800000" />
		<!-- 连接空闲多久后释放, 当空闲时间>该值 且 空闲连接>最大空闲连接数 时直接释放 -->
		<property name="softMinEvictableIdleTimeMillis" value="10000" />
		<!-- 获取连接时的最大等待毫秒数,小于零:阻塞不 确定的时间,默认-1 -->
		<property name="maxWaitMillis" value="1500" />
		<!-- 在获取连接的时候检查有效性, 默认 false -->
		<property name="testOnBorrow" value="true" />
		<!-- 在空闲时检查有效性, 默认 false -->
		<property name="testWhileIdle" value="true" />
		<!-- 连接耗尽时是否阻塞, false 报异常,ture 阻塞 直到超时, 默认 true -->
		<property name="blockWhenExhausted" value="false" />
	</bean>

	<bean id="jedisPool" class="redis.clients.jedis.JedisPool">
		<constructor-arg name="poolConfig">
			<ref bean="poolconfig" />
		</constructor-arg>
		<constructor-arg name="host">
			<value>192.168.178.3</value>
		</constructor-arg>
		<constructor-arg name="port">
			<value>6379</value>
		</constructor-arg>
	</bean>
	<bean id="JedisCluster" class="redis.clients.jedis.JedisCluster">
		<constructor-arg name="nodes">
			<set>
				<bean class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host">
						<value>192.168.178.3</value>
					</constructor-arg>
					<constructor-arg name="port">
						<value>8001</value>
					</constructor-arg>
				</bean>
				<bean class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host">
						<value>192.168.178.3</value>
					</constructor-arg>
					<constructor-arg name="port">
						<value>8002</value>
					</constructor-arg>
				</bean>
				<bean class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host">
						<value>192.168.178.3</value>
					</constructor-arg>
					<constructor-arg name="port">
						<value>8003</value>
					</constructor-arg>
				</bean>
				<bean class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host">
						<value>192.168.178.3</value>
					</constructor-arg>
					<constructor-arg name="port">
						<value>8004</value>
					</constructor-arg>
				</bean>
				<bean class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host">
						<value>192.168.178.3</value>
					</constructor-arg>
					<constructor-arg name="port">
						<value>8005</value>
					</constructor-arg>
				</bean>
				<bean class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host">
						<value>192.168.178.3</value>
					</constructor-arg>
					<constructor-arg name="port">
						<value>8006</value>
					</constructor-arg>
				</bean>
			</set>
		</constructor-arg>
		<constructor-arg name="poolConfig">
			<ref bean="poolconfig" />
		</constructor-arg>
	</bean>
	<bean id="jedisClusterDaoImpl" class="com.y.dao.impl.JedisClusterDaoImpl"></bean>
</beans>

2.3 测试集群版

package com.y;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.y.dao.JedisDao;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

public class Test {

	public static void main(String[] args) {
		Test.testJedisCluster();
	}
	
	public static void testJedisPool(){
		JedisPool jp =new JedisPool("192.168.178.3",6379);
		Jedis jedis = jp.getResource();
		jedis.set("name", "tom");
		String str = jedis.get("name");
		System.out.println(str);
		jedis.close();
	}
	
	public static void testJedisCluster(){
		ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext-Jedis.xml");
		JedisDao jd = (JedisDao) ac.getBean("jedisClusterDaoImpl");
		String str = jd.set("端午节","五月五日");
		System.out.println(str);
		String result = jd.get("端午节");
		System.out.println(result);
	}
}

八、 Redis Desktop Manager 的使用

1 创建与 Redis 的链接

8125328c3f9f8deaacc883561c7a220d.png

e6ed6a7dc030ef9108eff9f0ea88b827.png

c423150ba413215fd2f26aff87019fa6.png

九、 实战案例

1 需求

  • 实现用户添加功能。
  • 实现用户查询功能,并使用 Redis 作为查询缓存。
  • 实现用户更新功能,同步缓存。

2 数据库的表结构

CREATE TABLE `user` (
  `userid` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(30) DEFAULT NULL,
  `userage` int(11) DEFAULT NULL,
  PRIMARY KEY (`userid`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8

3 创建项目

创建一个war项目。

4 修改 POM 文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>com.y</groupId>
		<artifactId>redis_parent</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<groupId>com.y</groupId>
	<artifactId>usermanager</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>
	<dependencies>
		<dependency>
			<groupId>redis.clients</groupId>
			<artifactId>jedis</artifactId>
		</dependency>
		<!-- 单元测试 -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
		</dependency>
		<!-- 日志处理 -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
		</dependency>
		<!-- Mybatis -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
		</dependency>
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
		</dependency>
		<!-- MySql -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>
		<!-- 连接池 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
		</dependency>
		<!-- Spring -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aspects</artifactId>
		</dependency>
		<!-- JSP相关 -->
		<dependency>
			<groupId>jstl</groupId>
			<artifactId>jstl</artifactId>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jsp-api</artifactId>
			<scope>provided</scope>
		</dependency>
		<!-- Jackson Json处理工具包 -->
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>${jackson.version}</version>
		</dependency>
	</dependencies>

	<build>
		<resources>
			<resource>
				<directory>src/main/java</directory>
				<includes>
					<include>**/*.xml</include>
				</includes>
			</resource>
			<resource>
				<directory>src/main/resources</directory>
				<includes>
					<include>**/*.xml</include>
					<include>**/*.properties</include>
				</includes>
			</resource>
		</resources>
		<!-- tomcat插件,由于子项目不一定每个都是web项目,所以该插件只是声明,并未开启 -->
		<plugins>
			<!-- 配置Tomcat插件 -->
			<plugin>
				<groupId>org.apache.tomcat.maven</groupId>
				<artifactId>tomcat7-maven-plugin</artifactId>
				<configuration>
					<path>/</path>
					<port>8080</port>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

5 框架整合

bdb9ca03f4a6d98477fc48b33bcd3047.png

24c3a02f30c28b3b917aa2a6334213de.png

6 实现业务

6.1 UserMapper 与 UserMapper 映射配置文件

UserMapper 接口 :

package com.y.mapper;
import java.util.List;
import com.y.pojo.User;
public interface UserMapper {
	public void insertUser(User user);
	public List<User> selectUserAll();
	User findUserById(int userid);
	void updateUser(User user);
}

映射配置文件 :

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.y.mapper.UserMapper" >

  <insert id="insertUser" parameterType="com.y.pojo.User">
  		insert into user(username,userage) values(#{username},#{userage})
  </insert>
  
  <select id="selectUserAll" resultType="com.y.pojo.User">
  		select * from user
  </select>
  
  <select id="findUserById" resultType="com.y.pojo.User">
  		select * from user where userid = #{userid}
  </select>
  
  <update id="updateUser" parameterType="com.y.pojo.User">
  		update user set username = #{username},userage = #{userage} where userid=#{userid}
  </update>
</mapper>

6.2UserService接口和UserServiceImpl实现类

UserService接口 :

package com.y.service;
import com.y.pojo.User;
public interface UserService {
	void addUser(User user);
	User findUserById(int userid);	
	void updateUser(User user);
}

UserServiceImpl实现类 :

package com.y.service.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import com.y.commons.JsonUtils;
import com.y.jedisdao.JedisDao;
import com.y.mapper.UserMapper;
import com.y.pojo.User;
import com.y.service.UserService;

@Service
public class UserServiceImpl implements UserService {

	@Autowired
	private UserMapper userMapper;
	@Autowired
	private JedisDao jedisDao;
	@Value("${REDIS_USERS_PRIFX}")
	private String REDIS_USERS_PRIFX;
	@Override
	public void addUser(User user) {
		this.userMapper.insertUser(user);
	}

	//实现查询缓存业务
        @Override
	public User findUserById(int userid) {
		//先查询内存中的redis有没有如果有则返回,如果没有,从关系型数据库查
                try {	
			String json = this.jedisDao.get(this.REDIS_USERS_PRIFX + ":" + userid);
			if (json != null && json.length() > 0) {
				System.out.println(".........................");
				User user = JsonUtils.jsonToPojo(json, User.class);
				return user;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
                 //从关系型数据库查,
		User user = this.userMapper.findUserById(userid);
		System.out.println(",,,,,,,,,,,,,,,,,,,,,,,,,,,,,");
		//从关系型数据库中查完后放入到redis中
                try {
			String res = JsonUtils.objectToJson(user);
			this.jedisDao.set(this.REDIS_USERS_PRIFX + ":" + userid, res);
			this.jedisDao.expire(this.REDIS_USERS_PRIFX + ":" + userid, 60);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return user;
	}
        // 更新用户同步缓存
	@Override
	public void updateUser(User user) {
		this.userMapper.updateUser(user);
		try{
			this.jedisDao.del(this.REDIS_USERS_PRIFX+":"+user.getUserid());
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值