Nosql与Redis两次实验回顾

1. 实验一

一、实验目的

  1. 掌握redis常用命令
  2. 掌握5种数据类型

二、实验内容

  1. 添加键值存储登录用户的编号,该数据 10 分钟后失效

2.使用 list 类型在 redis 中实现以下操作:
1)添加 10 个员工的薪资
2)查看 list 数据长度
3)查看 index 为 3 的薪资
4)查看所有员工的薪资
5)将最左边的元素移除

  1. 使用 set 类型在 redis 中实现以下操作:
    1)添加 3 个班级的成绩,每个班级使用一个 set 描述,键为班级编号
    2)查看 3 个班级中所有不重复的成绩
    3)对比第一以及第二个班级的成绩,查看第二个班级相比于第一个班级有哪些差异化
    的成绩

  2. 使用 zset 类型实现以下操作:
    1)存储用户姓名以及积分
    2)根据积分由高到低排列所有用户的姓名
    3)查看姓名为 tom 的用户排名
    4)查看积分在 1000-5000 内的所有用户

信息截图:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2. 实验二

一、实验目的

  1. 熟练掌握redis及其常用方法
  2. 掌握5种数据类型
  3. 掌握单例模式
  4. 掌握redis连接池

二、实验内容

  1. 使用单例模式创建redis连接池对象
package com.igeek.entity;
/*单例
1.构造方法私有化,不允许外部创建对象
2.提供对象
3.通过方法的方式访问
*/
public class User {

// 饿汉式:直接创建对象
//    private static User user=new User();
// 懒汉式:使用时创建对象
    private static User user;

    private User(){

    }
    public static User getUser(){

        if (user==null){
            return new User();
        }
        return user;
    }

package com.igeek.demo;

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

public class Demo6RedisPool {
    public static void main(String[] args) {

        JedisPoolConfig jedisPoolConfig=new JedisPoolConfig();
        jedisPoolConfig.setMaxTotal(100);
        jedisPoolConfig.setMaxIdle(60);
        JedisPool jedisPool=new JedisPool(jedisPoolConfig,"localhost",6379);
        Jedis jedis=jedisPool.getResource();

        jedis.close();
    }
}

  1. 通过方法的方式获取资源(jedis对象)及关闭资源
package com.igeek.demo.util;

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

public class JedisPoolDemoUtil {
    private static JedisPool jedisPool ;
    static {
        JedisPoolConfig jedisPoolConfig=new JedisPoolConfig();
        jedisPoolConfig.setMaxTotal(100);
        jedisPoolConfig.setMaxIdle(60);
        jedisPool =new JedisPool(jedisPoolConfig,"localhost",6379);
    }
    public static Jedis getSource(){
       return jedisPool.getResource();
    }

}

  1. 添加键值存储当前登录用户
    1)该数据 10 分钟后失效并打印当前剩余时间
    2)用户为自己姓名+学号后三位
package com.igeek.demo;

import com.igeek.demo.util.JedisPoolDemoUtil;
import redis.clients.jedis.Jedis;

public class Demo7 {
    public static void main(String[] args) {
        Jedis jedis= JedisPoolDemoUtil.getSource();
        jedis.select(4);

        jedis.set("moyufeng","221");
        String str=jedis.get("moyufeng");
        System.out.println("学号后三位:"+str);
        jedis.expire("moyufeng",600);
        Long moyufeng = jedis.ttl("moyufeng");
        System.out.println("当前剩余时间:"+moyufeng);

        jedis.close();
    }
}

在这里插入图片描述
在这里插入图片描述

  1. 在数据库1中保存班级信息,
    1) value中包含专业名、班级名称、班级人数
package com.igeek.demo;

import com.igeek.demo.util.JedisPoolDemoUtil;
import redis.clients.jedis.Jedis;

import java.util.List;

public class Demo10 {
    public static void main(String[] args) {
        Jedis jedis= JedisPoolDemoUtil.getSource();
        jedis.select(1);

        jedis.mset("major","SoftwareEngineering","class_name","ClassTwo","class_size","33");
        List<String> ls = jedis.mget("major","class_name","class_size");
        System.out.println(ls);

        jedis.close();
    }
}

在这里插入图片描述
在这里插入图片描述

  1. 在数据库2中保存学生姓名学号信息
    1)新增5条数据
    2)打印数据,并将自己姓名及学号展示在第一行
package com.igeek.demo;

import com.igeek.demo.util.JedisPoolDemoUtil;
import redis.clients.jedis.Jedis;

import java.util.*;

public class Demo11 {
    public static void main(String[] args) {
        Jedis jedis= JedisPoolDemoUtil.getSource();
        jedis.select(2);

        Map<String,String> map=new HashMap<>();
        map.put("moyufeng","192210712224");
        map.put("zhangsan","182210712227");
        map.put("lisi","182210712221");
        map.put("wangwu","182210712228");
        jedis.hmset("student",map);

        Map<String, String> map1= jedis.hgetAll("student");
        Set<String> set=map1.keySet();
        Iterator<String> iterator=set.iterator();
        while (iterator.hasNext()){
            String  str= iterator.next();
            System.out.println(str+":"+map1.get(str));
    }

        jedis.close();
    }

在这里插入图片描述
在这里插入图片描述
6. 在数据库3中保存学生成绩:
1)添加 5 个同学的成绩
2)按成绩高低打印学生成绩及姓名
3)分别打印 5 个同学中所有不重复的成绩以及重复成绩
4)分别打印及格同学姓名和不及格同学姓名
5)查看自己在所有同学中排名

package com.igeek.demo;

import com.igeek.demo.util.JedisPoolDemoUtil;
import redis.clients.jedis.Jedis;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class Demo12 {
    public static void main(String[] args) {
        Jedis jedis = JedisPoolDemoUtil.getSource();
        jedis.select(3);
        Map<String,Double> scores=new HashMap<>();
        scores.put("moyufeng",98.0);
        scores.put("lisi",77.0);
        scores.put("tom",77.0);
        scores.put("mack",97.0);
        scores.put("liuliu",58.0);
        jedis.zadd("score",scores);

        Set<String> score = jedis.zrevrange("score", 0, -1);
        for (String s : score) {
            System.out.println(s+"的成绩:"+scores.get(s));
        }

        String[] temp = new String[score.size()];
        score.toArray(temp);
        System.out.println("\n重复的同学成绩:");
        for(int i=0;i<temp.length-1;i++){
            Double score1 = scores.get(temp[i]);
            Double score2 = scores.get(temp[i+1]);
            if (Math.abs(score1-score2)<1e-6){
                System.out.println(temp[i]+"的成绩:"+score1);
                System.out.println(temp[i+1]+"的成绩:"+score2);
            }
        }

        System.out.println("\n及格学生:");
        for (String s : score) {
            if (scores.get(s)>=60){
                System.out.println(s);
            }
        }

        System.out.println("\n不及格学生:");
        for (String s : score) {
            if (scores.get(s)<60){
                System.out.println(s);
            }
        }

        Long rank = jedis.zrevrank("score", "moyufeng");
        System.out.println("\n自己在同学中的排名是:"+"第"+(rank+1)+"名");

    }
}

在这里插入图片描述

在这里插入图片描述
7. 控制台遍历输出数据库2中所有key

package com.igeek.demo;

import com.igeek.demo.util.JedisPoolDemoUtil;
import redis.clients.jedis.Jedis;

import java.util.Set;

public class demo13 {
    public static void main(String[] args) {
        Jedis jedis = JedisPoolDemoUtil.getSource();
        System.out.println("\n数据库2中所有的key:");
        jedis.select(2);
        Set<String> students1 = jedis.hkeys("student");
        for (String s : students1) {
            System.out.println(s);
        }

    }
}

在这里插入图片描述
在这里插入图片描述

  1. 控制台打印当前redis中cpu信息
package com.igeek.demo;

import com.igeek.demo.util.JedisPoolDemoUtil;
import redis.clients.jedis.Jedis;

public class demo14 {
    public static void main(String[] args) {
        Jedis jedis = JedisPoolDemoUtil.getSource();
        System.out.println("\n当前CPU信息:"+jedis.info());
    }
}

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值