• 大数据之路Week10_day05 (JavaAPI 操作Redis 第一阶段)


    刚开始学习JavaAPI的时候,主要是对redis中的字符串,字节位图,列表,集合,有序集合进行操作,并能够完成简单的需求。

    package com.wyh.redis;
    
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    import redis.clients.jedis.Jedis;
    import redis.clients.jedis.JedisPool;
    import redis.clients.jedis.JedisPoolConfig;
    
    import java.io.BufferedReader;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    
    public class RedisApi {
        public static void main(String[] args) {
            Jedis master = new Jedis("master", 6379);
            master.set("001","123");
            String s = master.get("001");
            System.out.println(s);
            master.close();
    
        }
    
        Jedis master;
        JedisPool masterPool;
    
        @Before
        public void init(){
            master = new Jedis("master", 6379);
    
            JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
            jedisPoolConfig.setMaxTotal(100);
            jedisPoolConfig.setMaxIdle(10);
    
            masterPool = new JedisPool(jedisPoolConfig, "master", 6379);
    
        }
    
        /**
         * 字符串练习
         */
        @Test
        public void String(){
            Jedis resource = masterPool.getResource();
            resource.set("002","xiaohu");
            String s = resource.get("002");
            System.out.println(s);
            resource.close();
        }
    
        /**
         * bitmap练习
         */
        @Test
        public void bitmap(){
            Jedis resource = masterPool.getResource();
            resource.setbit("b1",1,true);
            resource.setbit("b1",3,true);
            resource.setbit("b1",5,true);
    
            //获取当前位是1还是0 1返回true,0则返回false
            Boolean b1 = resource.getbit("b1", 3);
            System.out.println(b1);
    
            //获取该键值中有多少个1
            Long b11 = resource.bitcount("b1");
            System.out.println(b11);
            resource.close();
        }
    
        /**
         *list练习
         *
         */
        @Test
        public void list(){
            Jedis resource = masterPool.getResource();
            resource.lpush("shujia06","王友虎","赵以浩","江蒗","尹可洋");
            String shujia006 = resource.lpop("shujia06");
            System.out.println(shujia006);
    
            //一次获取该键的所有值
            List<String> shujia0061 = resource.lrange("shujia06", 0, -1);
            System.out.println(shujia0061);
            resource.close();
        }
    
        /**
         *
         * HashMap的练习 将学生表添加到redis
         */
        @Test
        public void hashMap(){
    
            try {
                BufferedReader br = new BufferedReader(new FileReader("D:\shujia\shujia006\hadoop\src\data\students.txt"));
                String line;
                while ((line=br.readLine())!=null){
                    String[] split = line.split(",");
                    String id = split[0];
    
                    String key = "student"+":"+id;
    
                    String name = split[1];
                    String age = split[2];
                    String gender = split[3];
                    String clazz = split[4];
    
                    HashMap<String, String> map = new HashMap<>();
                    map.put("name",name);
                    map.put("age",age);
                    map.put("gender",gender);
                    map.put("clazz",clazz);
    
    
                    master.hmset(key,map);
                }
    
                Set<String> keys = master.keys("student*");
                System.out.println(keys);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    
    
        /**
         * 获取所有学生信息
         */
        @Test
        public void hGetAll(){
    
            Set<String> keys = master.keys("student*");
    
            for (String key : keys) {
                Map<String, String> stringStringMap = master.hgetAll(key);
                for (Map.Entry<String, String> stringStringEntry : stringStringMap.entrySet()) {
                    String value = stringStringEntry.getValue();
                    System.out.print(value);
                    System.out.print("	");
                }
                System.out.println();
            }
        }
    
        /**
         * 共同好友(交集)
         *
         */
        @Test
        public void sinter(){
            master.sadd("weibo:王友虎","赵以浩");
            master.sadd("weibo:王友虎","李宏灿");
            master.sadd("weibo:王友虎","齐博源");
            master.sadd("weibo:王友虎","李先锋");
    
            master.sadd("weibo:赵以浩","李先锋");
            master.sadd("weibo:赵以浩","王友虎");
            master.sadd("weibo:赵以浩","齐博源");
            master.sadd("weibo:赵以浩","黄天祥");
    
    
            Set<String> sinter = master.sinter("weibo:王友虎", "weibo:赵以浩");
            System.out.println("他们的共同好友为:");
            System.out.println(sinter);
    
    
        }
    
        /**
         * 有序集合
         */
        @Test
        public void numSet(){
            master.zadd("shujia",1.0,"赵以浩");
            master.zadd("shujia",1.0,"李宏灿");
            master.zadd("shujia",1.0,"齐博源");
            master.zadd("shujia",1.0,"李先锋");
    
            master.zadd("shujia",2.0,"李先锋");
            master.zadd("shujia",2.0,"王友虎");
            master.zadd("shujia",2.0,"齐博源");
            master.zadd("shujia",2.0,"黄天祥");
    
    //        HashMap<String, Integer> map = new HashMap<>();
    //
            Set<String> s1 = master.zrangeByScore("shujia", 1.0, 1.0);
    //        for (String s : s1) {
    //            map.put(s,1);
    //        }
    //
            Set<String> s2 = master.zrangeByScore("shujia", 2.0, 2.0);
    //        for (String s : s2) {
    //            map.put(s,1);
    //        }
    //
    //        System.out.println("他们所有的好友为:");
    //        for (Map.Entry<String, Integer> stringIntegerEntry : map.entrySet()) {
    //            String key = stringIntegerEntry.getKey();
    //            System.out.println(key);
    //        }
    
            System.out.println(s1);
            System.out.println(s2);
    
    
        }
    
    
        @After
        public void close(){
            masterPool.close();
            master.close();
    
        }
    }

    在其中,有一个新的知识点,就是 JedisPool ,可以先创建好jedis连接对象,在需要的时候,从里面拿,也可以设置个数。

    但是注意:

        1、我在代码中设置的是100个最大,我在将学生信息往redis中添加的时候,卡住不动了,我以为是代码出错,结果检查redis客户端软件发现,只插入了100条数据,剩下的900条数据都没有添加,这是为什么,因为我的“池子”中最大是100个,将其换成普通的获取连接就可以了,但是后面在写代码的过程中发现,我在循环添加的时候,并未添加一条就将这个连接关闭,逻辑上而是等全部添加完毕才将其关闭,啊。。原来原因在这,问题解决。

        2、一开始我想使用有序集合去将两个人的共同好友获取出来,后面发现,我在添加的时候,就算score是可以重复的,value值都是不可以重复的,尽管score不一样,在一个表中,它就是不可以重复的,后来经过查资料,我改用set集合,无序的,两个不同的表,进行sinter的方法取交集,获取到了共同好友。

        3、这里我遗留了一个问题,发现了一个我觉得很重要,通过百度也发现它很重要的东西,就是scan,hscan等,在上面的一个问题中我通过观察方法发现的,目前没有仔细了解,后面会补充。

  • 相关阅读:
    Apache Cassandra 4.0新特性介绍
    NoSQLBench压测工具入门教程
    赵洋:深入了解Materialized View
    PHP与ECMAScript_1_变量与常量
    HTTP_5_通信数据转发程序:代理、网关、隧道
    HTTP_4_返回结果的HTTP状态码
    HTTP_3_HTTP报文
    HTTP_2_HTTP协议概要
    HTTP_1_Web及网络基础
    一个完整的产品设计流程——家庭安全管家
  • 原文地址:https://www.cnblogs.com/wyh-study/p/12178168.html
Copyright © 2020-2023  润新知