缓存——redis——官网jedis客户端java集成与操作redis

目录

1、方案选择:

(1)官网推荐客户端:

(2)Spring集成客户端:

2、官网单机客户端:

(1)引入jar包:

(2)创建单机客户端:

3、官网redis-cluster客户端:

(1)引入jar包:

(2)创建redis-cluster客户端:

4、官网客户端操作redis:

(1)操作key:

A、单机客户端操作:

B、redis-cluster客户端操作:

(2)操作string:

A、单机客户端操作:

B、redis-cluster客户端操作:

(3)操作list:

A、单机客户端操作:

B、redis-cluster客户端操作:

(4)操作set:

A、单机客户端操作:

B、redis-cluster客户端操作:

(5)操作hash:

A、单机客户端操作:

B、redis-cluster客户端操作:

(6)操作zset:

A、单机客户端操作:

B、redis-cluster客户端操作:


 

1、方案选择:

(1)官网推荐客户端:

在redis官网中对于java客户端也提供了不少的client,但是本文使用的是官方推荐的jedis,这个jedis简单轻便,并且支持redis-cluster集群,支持2.x、3.x以及更高版本的redis。

(2)Spring集成客户端:

在项目开发中,一般情况下都会用到spring来管理应用,本文也是如此,spring 本身也提供了对redis的集成支持spring-data-redis,不过目前好像spring的主干版本不能很好的支持redis-cluster集群。

2、官网单机客户端:

(1)引入jar包:

        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.2.0</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>

(2)创建单机客户端:

//单机客户端
    public static Jedis getRedisClient(){
        Jedis jedis = new Jedis("192.168.1.141",6378);//指定redis单机IP、port
        return jedis;
    }

3、官网redis-cluster客户端:

(1)引入jar包:

        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.2.0</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>

(2)创建redis-cluster客户端:

//集群客户端
    public static JedisCluster getRedisClusterClient(){
        Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>();
        //指定redis-cluster集群中所有节点IP和端口号,就会高可用连接redis-cluster
        jedisClusterNodes.add(new HostAndPort("192.168.1.141", 6379));
        jedisClusterNodes.add(new HostAndPort("192.168.1.141", 6380));
        jedisClusterNodes.add(new HostAndPort("192.168.1.141", 6381));
        jedisClusterNodes.add(new HostAndPort("192.168.1.142", 6379));
        jedisClusterNodes.add(new HostAndPort("192.168.1.142", 6380));
        jedisClusterNodes.add(new HostAndPort("192.168.1.142", 6381));
        jedisClusterNodes.add(new HostAndPort("192.168.1.143", 6379));
        jedisClusterNodes.add(new HostAndPort("192.168.1.143", 6380));
        jedisClusterNodes.add(new HostAndPort("192.168.1.143", 6381));
        JedisCluster jedisCluster = new JedisCluster(jedisClusterNodes);
        return jedisCluster;
    }

4、官网客户端操作redis:

(1)操作key:

A、单机客户端操作:

//单机操作
    public static void standAloneOperate(){
        Jedis jedis = RedisClient.getRedisClient();//获取redis单机客户端
        //清空数据
        jedis.flushDB();
        //判断key是否存在
        jedis.set("lsy_one","001");
        Boolean resultBoolean = jedis.exists("lsy_one");
        System.out.println("key是否存在:"+resultBoolean);
        jedis.set("lsy_two","002");
        //循环所有key
        Set<String> keys = jedis.keys("*");
        Iterator<String> it=keys.iterator() ;
        while(it.hasNext()){
            String key = it.next();
            System.out.println(key+":"+jedis.get(key));
        }
        //修改某个key
        jedis.rename("lsy_two","lsy_Two");
        System.out.println("key修改后获取值:"+jedis.get("lsy_Two"));
        //删除某个key
        jedis.del("lsy_Two");
        System.out.println("key删除后获取值:"+jedis.get("lsy_Two"));
        //设置key过期时间:
        jedis.set("lsy_three","003");
        jedis.expire("lsy_three",10);
        //查看某个key生成时间:
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        Long seconds = jedis.ttl("lsy_three");
        System.out.println("key剩余生存时间:"+seconds);
        //移出某个key生存时间:
        jedis.persist("lsy_three");
        System.out.println("key移出生存时间后获取值:"+jedis.ttl("lsy_three"));
        //查看某个key所存储值类型:
        String type = jedis.type("lsy_one");
        System.out.println("key获取value值类型:"+type);
    }

B、redis-cluster客户端操作:

//集群操作
    public static void clusterOperate(){
        JedisCluster jedisCluster = RedisClient.getRedisClusterClient();//获取redis集群客户端
        //判断key是否存在
        jedisCluster.set("lsy_one","001");
        Boolean resultBoolean = jedisCluster.exists("lsy_one");
        System.out.println("key是否存在:"+resultBoolean);
        jedisCluster.set("lsy_two","002");
        //循环所有key
        TreeSet<String> keys = new TreeSet<String>();
        Map<String, JedisPool> clusterNodes = jedisCluster.getClusterNodes();//获取集群所有节点
        for (String key : clusterNodes.keySet()) {
            JedisPool jedisPool = clusterNodes.get(key);
            Jedis jedisConn = jedisPool.getResource();
            try {
                keys.addAll(jedisConn.keys("*"));//获取集群每个节点执行keys,然后结果添加到TreeSet中
            } catch (Exception e) {
            } finally {
                jedisConn.close();
            }
        }
        Iterator<String> iterator = keys.iterator();
        while(iterator.hasNext()){
            String key = iterator.next();
            System.out.println(key+":"+jedisCluster.get(key));
        }
        //删除某个key
        jedisCluster.del("lsy_Two");
        System.out.println("key删除后获取值:"+jedisCluster.get("lsy_Two"));
        //设置key过期时间:
        jedisCluster.set("lsy_three","003");
        jedisCluster.expire("lsy_three",10);
        //查看某个key生成时间:
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("key剩余生存时间:"+jedisCluster.ttl("lsy_three"));
        //移出某个key生存时间:
        jedisCluster.persist("lsy_three");
        System.out.println("key移出生存时间后获取值:"+jedisCluster.ttl("lsy_three"));
        //查看某个key所存储值类型:
        System.out.println("key获取value值类型:"+jedisCluster.type("lsy_one"));
    }

(2)操作string:

A、单机客户端操作:

//单机操作
    public static void standAloneOperate(){
        Jedis jedis = RedisClient.getRedisClient();//获取单机客户端
        //清空数据
        jedis.flushDB();
        //增加一个string
        jedis.set("lsy_one","100");
        System.out.println("增加string结果:"+jedis.get("lsy_one"));
        //修改某个string
        jedis.set("lsy_one","111");
        System.out.println("修改string结果:"+jedis.get("lsy_one"));
        //追加某个string的值
        jedis.append("lsy_one","222");
        System.out.println("追加string结果:"+jedis.get("lsy_one"));
        //查看某个string
        String resultStr = jedis.get("lsy_one");
        System.out.println("查看string结果:"+resultStr);
        //删除某个string
        jedis.del("lsy_one");
        System.out.println("删除string结果:"+jedis.get("lsy_one"));
        //增加多个string
        jedis.mset("lsy_one","010","lsy_two","011","lsy_three","012");
        System.out.println("增加多个string结果:"+jedis.mget("lsy_one","lsy_two","lsy_three"));
        //查看多个string
        List<String> resultStrList = jedis.mget("lsy_one","lsy_two","lsy_three");
        for(int i = 0; i < resultStrList.size(); i++){
            System.out.println("查看多个string结果:"+resultStrList.get(i));
        }
        //删除多个string
        jedis.del(new String[]{"lsy_one","lsy_two","lsy_three"});
        System.out.println("删除多个string结果:"+jedis.mget("lsy_one","lsy_two","lsy_three"));
    }

B、redis-cluster客户端操作:

//集群操作
    public static void clusterOperate(){
        JedisCluster jedisCluster = RedisClient.getRedisClusterClient();//获取集群客户端
        //增加一个string
        jedisCluster.set("lsy_one","1001");
        System.out.println("增加string结果:"+jedisCluster.get("lsy_one"));
        //修改某个string
        jedisCluster.set("lsy_one","1111");
        System.out.println("修改string结果:"+jedisCluster.get("lsy_one"));
        //追加某个string的值
        jedisCluster.append("lsy_one","0000");
        System.out.println("追加string结果:"+jedisCluster.get("lsy_one"));
        //查看某个string
        String resultStr = jedisCluster.get("lsy_one");
        System.out.println("查看string结果:"+resultStr);
        //删除某个string
        jedisCluster.del("lsy_one");
        System.out.println("删除string结果:"+jedisCluster.get("lsy_one"));
    }

(3)操作list:

A、单机客户端操作:

public static void standAloneOperate(){
        Jedis jedis = RedisClient.getRedisClient();//获取单机客户端
        //清空数据
        jedis.flushDB();
        //增加一个list,注意下标是从最后插入的数据开始计算的,从0开始加。
        jedis.lpush("lsy_list","001");
        jedis.lpush("lsy_list","002");
        jedis.lpush("lsy_list","003");
        jedis.lpush("lsy_list","004");
        jedis.lpush("lsy_list","005");
        jedis.lpush("lsy_list","004");
        System.out.println("增加list结果:"+jedis.lrange("lsy_list",0,-1));
        //修改list制定下标的值
        jedis.lset("lsy_list",1,"222");
        System.out.println("修改指定下标list结果:"+jedis.lrange("lsy_list",0,-1));
        //删除list指定的值
        jedis.lrem("lsy_list",1,"004");//如果重复就删除指定的个数
        System.out.println("删除指定值list结果:"+jedis.lrange("lsy_list",0,-1));
        //删除list下标以外区间的值
        jedis.ltrim("lsy_list",1,3);
        System.out.println("删除区间外list结果:"+jedis.lrange("lsy_list",0,-1));
        //某个list元素出栈
        jedis.lpop("lsy_list");
        System.out.println("元素出栈list结果:"+jedis.lrange("lsy_list",0,-1));
        //查看list长度
        Long length = jedis.llen("lsy_list");
        System.out.println("列表长度list结果:"+length);
        //查看list某个下标值
        List<String> resultStrList = jedis.lrange("lsy_list",0,0);
        for(int i = 0; i < resultStrList.size(); i++){
            System.out.println("某个元素list结果:"+resultStrList.get(i));
        }
        //查看list某几个元素值
        List<String> resultList = jedis.lrange("lsy_list",0,1);
        for(int i = 0; i < resultList.size(); i++){
            System.out.println("某几个元素list结果:"+resultList.get(i));
        }
        //查看list所有元素值
        List<String> list = jedis.lrange("lsy_list",0,-1);
        for(int i = 0; i < list.size(); i++){
            System.out.println("所有元素list结果:"+list.get(i));
        }
        //排序list,list中存字符串时必须指定参数为alpha,如果不使用SortingParams,而是直接使用sort("list")
        SortingParams sortingParameters = new SortingParams();
        sortingParameters.alpha();
        sortingParameters.desc();//降序
        List<String> sortList = jedis.sort("lsy_list",sortingParameters);
        for(int i = 0; i < sortList.size(); i++){
            System.out.println("排序list结果:"+sortList.get(i));
        }
    }

B、redis-cluster客户端操作:

public static void clusterOperate(){
        JedisCluster jedisCluster = RedisClient.getRedisClusterClient();//获取集群客户端
        //增加一个list,注意下标是从最后插入的数据开始计算的,从0开始加。
        jedisCluster.lpush("lsy_list","001");
        jedisCluster.lpush("lsy_list","002");
        jedisCluster.lpush("lsy_list","003");
        jedisCluster.lpush("lsy_list","004");
        jedisCluster.lpush("lsy_list","005");
        jedisCluster.lpush("lsy_list","004");
        System.out.println("增加list结果:"+jedisCluster.lrange("lsy_list",0,-1));
        //修改list制定下标的值
        jedisCluster.lset("lsy_list",1,"222");
        System.out.println("修改指定下标list结果:"+jedisCluster.lrange("lsy_list",0,-1));
        //删除list指定的值
        jedisCluster.lrem("lsy_list",1,"004");
        System.out.println("删除指定值list结果:"+jedisCluster.lrange("lsy_list",0,-1));
        //删除list下标以外区间的值
        jedisCluster.ltrim("lsy_list",1,3);
        System.out.println("删除区间外list结果:"+jedisCluster.lrange("lsy_list",0,-1));
        //某个list元素出栈
        jedisCluster.lpop("lsy_list");
        System.out.println("元素出栈list结果:"+jedisCluster.lrange("lsy_list",0,-1));
        //查看list长度
        Long length = jedisCluster.llen("lsy_list");
        System.out.println("列表长度list结果:"+length);
        //查看list某个下标值
        List<String> resultStrList = jedisCluster.lrange("lsy_list",0,0);
        for(int i = 0; i < resultStrList.size(); i++){
            System.out.println("某个元素list结果:"+resultStrList.get(i));
        }
        //查看list某几个元素值
        List<String> resultList = jedisCluster.lrange("lsy_list",0,1);
        for(int i = 0; i < resultList.size(); i++){
            System.out.println("某几个元素list结果:"+resultList.get(i));
        }
        //查看list所有元素值
        List<String> list = jedisCluster.lrange("lsy_list",0,-1);
        for(int i = 0; i < list.size(); i++){
            System.out.println("所有元素list结果:"+list.get(i));
        }
        //排序list,list中存字符串时必须指定参数为alpha,如果不使用SortingParams,而是直接使用sort("list")
        SortingParams sortingParameters = new SortingParams();
        sortingParameters.alpha();
        sortingParameters.asc();//升序
        List<String> sortList = jedisCluster.sort("lsy_list",sortingParameters);
        for(int i = 0; i < sortList.size(); i++){
            System.out.println("排序list结果:"+sortList.get(i));
        }

    }

(4)操作set:

A、单机客户端操作:

public static void standAloneOperate(){
        Jedis jedis = RedisClient.getRedisClient();//获取单机客户端
        //清空数据
        jedis.flushDB();
        //增加一个set
        jedis.sadd("lsy_set","111");
        jedis.sadd("lsy_set","222");
        jedis.sadd("lsy_set","333");
        jedis.sadd("lsy_set","444");
        jedis.sadd("lsy_set","555");
        jedis.sadd("lsy_set","666");
        System.out.println("增加set结果:"+jedis.smembers("lsy_set"));
        //删除set中指定元素
        jedis.srem("lsy_set","666");
        System.out.println("删除set结果:"+jedis.smembers("lsy_set"));
        //判断set中指定元素是否存在
        Boolean isHas = jedis.sismember("lsy_set","555");
        System.out.println("元素是否在set结果:"+isHas);
        //查看set中所有元素
        Set<String> set = jedis.smembers("lsy_set");
        System.out.println("查看所有set结果:"+set);
        //循环set中每一个元素
        Set<String> stringSet = jedis.smembers("lsy_set");
        Iterator<String> iterator = stringSet.iterator();
        while (iterator.hasNext()){
            System.out.println("循环每一个set结果:"+iterator.next());
        }
        jedis.sadd("lsy_two","111");
        jedis.sadd("lsy_two","000");
        jedis.sadd("lsy_two","555");
        jedis.sadd("lsy_two","888");
        //两个set的交集
        Set<String> interSet = jedis.sinter("lsy_set","lsy_two");
        System.out.println("交集set结果:"+interSet);
        //两个set的并集
        Set<String> unionSet = jedis.sunion("lsy_set","lsy_two");
        System.out.println("并集set结果:"+unionSet);
        //两个set的差集
        Set<String> diffSet = jedis.sdiff("lsy_set","lsy_two");
        System.out.println("差集set结果:"+diffSet);
    }

B、redis-cluster客户端操作:

public static void clusterOperate(){
        JedisCluster jedisCluster = RedisClient.getRedisClusterClient();//获取集群客户端
        //增加一个set
        jedisCluster.sadd("lsy_set","111");
        jedisCluster.sadd("lsy_set","222");
        jedisCluster.sadd("lsy_set","333");
        jedisCluster.sadd("lsy_set","444");
        jedisCluster.sadd("lsy_set","555");
        jedisCluster.sadd("lsy_set","666");
        System.out.println("增加set结果:"+jedisCluster.smembers("lsy_set"));
        //删除set中指定元素
        jedisCluster.srem("lsy_set","666");
        System.out.println("删除set结果:"+jedisCluster.smembers("lsy_set"));
        //判断set中指定元素是否存在
        Boolean isHas = jedisCluster.sismember("lsy_set","555");
        System.out.println("元素是否在set结果:"+isHas);
        //查看set中所有元素
        Set<String> set = jedisCluster.smembers("lsy_set");
        System.out.println("查看所有set结果:"+set);
        //循环set中每一个元素
        Set<String> stringSet = jedisCluster.smembers("lsy_set");
        Iterator<String> iterator = stringSet.iterator();
        while (iterator.hasNext()){
            System.out.println("循环每一个set结果:"+iterator.next());
        }
    }

(5)操作hash:

A、单机客户端操作:

public static void standAloneOperate(){
        Jedis jedis = RedisClient.getRedisClient();//获取单机客户端
        //清空数据
        jedis.flushDB();
        //增加一个hash
        jedis.hset("lsy_hash","001","hash_001");
        jedis.hset("lsy_hash","002","hash_002");
        jedis.hset("lsy_hash","003","hash_003");
        jedis.hset("lsy_hash","005","hash_005");
        System.out.println("增加一个hash的结果:"+jedis.hvals("lsy_hash"));
        //删除指定hash指定key的值
        jedis.hdel("lsy_hash","005");
        System.out.println("删除指定key的hash的结果:"+jedis.hvals("lsy_hash"));
        //增加指定hash指定整型键的值
        jedis.hincrBy("lsy_hash","004",1);
        jedis.hincrBy("lsy_hash","004",5);
        jedis.hincrBy("lsy_hash","004",2);
        System.out.println("整型键值增加hash的结果:"+jedis.hvals("lsy_hash"));
        //判断指定hash中指定key的值是否存在
        Boolean isHas = jedis.hexists("lsy_hash","004");
        System.out.println("指定key是否存在hash的结果:"+isHas);
        //获取指定hash指定key的值
        String resultOne = jedis.hget("lsy_hash","003");
        System.out.println("获取单个key的hash的结果:"+resultOne);
        //获取指定hash多个key的值
        List<String> resultList = jedis.hmget("lsy_hash","002","003");
        System.out.println("获取多个key的hash的结果:"+resultList.toString());
        //获取指定hash所有key
        Set<String> resultKeySet = jedis.hkeys("lsy_hash");
        System.out.println("获取所有key的hash的结果:"+resultKeySet);
        //获取指定hash所有value
        List<String> resultValueList = jedis.hvals("lsy_hash");
        System.out.println("获取所有value的hash的结果:"+resultValueList.toString());
    }

B、redis-cluster客户端操作:

public static void clusterOperate(){
        JedisCluster jedisCluster = RedisClient.getRedisClusterClient();//获取集群客户端
        //增加一个hash
        jedisCluster.hset("lsy_hash","001","hash_001");
        jedisCluster.hset("lsy_hash","002","hash_002");
        jedisCluster.hset("lsy_hash","003","hash_003");
        jedisCluster.hset("lsy_hash","005","hash_005");
        System.out.println("增加一个hash的结果:"+jedisCluster.hvals("lsy_hash"));
        //删除指定hash指定key的值
        jedisCluster.hdel("lsy_hash","005");
        System.out.println("删除指定key的hash的结果:"+jedisCluster.hvals("lsy_hash"));
        //增加指定hash指定整型键的值
        jedisCluster.hincrBy("lsy_hash","004",1);
        jedisCluster.hincrBy("lsy_hash","004",5);
        jedisCluster.hincrBy("lsy_hash","004",2);
        System.out.println("整型键值增加hash的结果:"+jedisCluster.hvals("lsy_hash"));
        //判断指定hash中指定key的值是否存在
        Boolean isHas = jedisCluster.hexists("lsy_hash","004");
        System.out.println("指定key是否存在hash的结果:"+isHas);
        //获取指定hash指定key的值
        String resultOne = jedisCluster.hget("lsy_hash","003");
        System.out.println("获取单个key的hash的结果:"+resultOne);
        //获取指定hash多个key的值
        List<String> resultList = jedisCluster.hmget("lsy_hash","002","003");
        System.out.println("获取多个key的hash的结果:"+resultList.toString());
        //获取指定hash所有key
        Set<String> resultKeySet = jedisCluster.hkeys("lsy_hash");
        System.out.println("获取所有key的hash的结果:"+resultKeySet);
        //获取指定hash所有value
        List<String> resultValueList = jedisCluster.hvals("lsy_hash");
        System.out.println("获取所有value的hash的结果:"+resultValueList.toString());
    }

(6)操作zset:

A、单机客户端操作:

public static void standAloneOperate(){
        Jedis jedis = RedisClient.getRedisClient();//获取单机客户端
        //清空数据
        jedis.flushDB();
        //增加一个zset
        jedis.zadd("lsy_zset",1.0,"001");
        jedis.zadd("lsy_zset",5.0,"002");
        jedis.zadd("lsy_zset",3.0,"003");
        jedis.zadd("lsy_zset",2.2,"004");
        jedis.zadd("lsy_zset",3.5,"005");
        System.out.println("增加一个zset的结果:"+jedis.zrange("lsy_zset",0,-1));
        //删除指定zset指定key的值
        jedis.zrem("lsy_zset","005");
        System.out.println("删除指定key的值zset的结果:"+jedis.zrange("lsy_zset",0,-1));
        //查看指定zset的元素个数
        Long count = jedis.zcard("lsy_zset");
        System.out.println("元素的个数zset的结果:"+count);
        //查看指定zset中key在某个范围内个数
        Long rangCount = jedis.zcount("lsy_zset",2,4);
        System.out.println("key值在某个范围的个数zset的结果:"+rangCount);
        //查看指定zset指定value的key值
        Double key = jedis.zscore("lsy_zset","004");
        System.out.println("查看某个元素的key值zset的结果:"+key);
        //查看指定zset下标在某个范围内的值
        Set<String> rangSet = jedis.zrange("lsy_zset",1,2);
        System.out.println("下标范围内的元素zset的结果:"+rangSet);
        //查看指定zset所有元素
        Set<String> set = jedis.zrange("lsy_zset",0,-1);
        System.out.println("所有元素zset的结果:"+set);
    }

B、redis-cluster客户端操作:

public static void clusterOperate(){
        JedisCluster jedisCluster = RedisClient.getRedisClusterClient();//获取集群客户端
        //增加一个zset
        jedisCluster.zadd("lsy_zset",1.0,"001");
        jedisCluster.zadd("lsy_zset",5.0,"002");
        jedisCluster.zadd("lsy_zset",3.0,"003");
        jedisCluster.zadd("lsy_zset",2.2,"004");
        jedisCluster.zadd("lsy_zset",3.5,"005");
        System.out.println("增加一个zset的结果:"+jedisCluster.zrange("lsy_zset",0,-1));
        //删除指定zset指定key的值
        jedisCluster.zrem("lsy_zset","005");
        System.out.println("删除指定key的值zset的结果:"+jedisCluster.zrange("lsy_zset",0,-1));
        //查看指定zset的元素个数
        Long count = jedisCluster.zcard("lsy_zset");
        System.out.println("元素的个数zset的结果:"+count);
        //查看指定zset中key在某个范围内个数
        Long rangCount = jedisCluster.zcount("lsy_zset",2,4);
        System.out.println("key值在某个范围的个数zset的结果:"+rangCount);
        //查看指定zset指定value的key值
        Double key = jedisCluster.zscore("lsy_zset","004");
        System.out.println("查看某个元素的key值zset的结果:"+key);
        //查看指定zset下标在某个范围内的值
        Set<String> rangSet = jedisCluster.zrange("lsy_zset",1,2);
        System.out.println("下标范围内的元素zset的结果:"+rangSet);
        //查看指定zset所有元素
        Set<String> set = jedisCluster.zrange("lsy_zset",0,-1);
        System.out.println("所有元素zset的结果:"+set);
    }

 

发布了133 篇原创文章 · 获赞 23 · 访问量 1万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 精致技术 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览