1. 实验一
一、实验目的
- 掌握redis常用命令
- 掌握5种数据类型
二、实验内容
- 添加键值存储登录用户的编号,该数据 10 分钟后失效
2.使用 list 类型在 redis 中实现以下操作:
1)添加 10 个员工的薪资
2)查看 list 数据长度
3)查看 index 为 3 的薪资
4)查看所有员工的薪资
5)将最左边的元素移除
-
使用 set 类型在 redis 中实现以下操作:
1)添加 3 个班级的成绩,每个班级使用一个 set 描述,键为班级编号
2)查看 3 个班级中所有不重复的成绩
3)对比第一以及第二个班级的成绩,查看第二个班级相比于第一个班级有哪些差异化
的成绩 -
使用 zset 类型实现以下操作:
1)存储用户姓名以及积分
2)根据积分由高到低排列所有用户的姓名
3)查看姓名为 tom 的用户排名
4)查看积分在 1000-5000 内的所有用户
信息截图:
2. 实验二
一、实验目的
- 熟练掌握redis及其常用方法
- 掌握5种数据类型
- 掌握单例模式
- 掌握redis连接池
二、实验内容
- 使用单例模式创建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();
}
}
- 通过方法的方式获取资源(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)该数据 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) 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();
}
}
- 在数据库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);
}
}
}
- 控制台打印当前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());
}
}