redis的五种基本数据类型
前言
学习redis的五种基本数据类型,需先安装redis客户端,后启动redis,方便程序连接redis,并进行存取操作。
如图,为启动后的redis客户端:
连接redis(这里使用jedis连接)
//redis客户端
Jedis jedis = new Jedis(“127.0.0.1”,6379);
1.String类型
存入数据:
//String类型
jedis.set(“wang”,“zhengwei”);
String name = jedis.get(“wang”);
System.out.println(name);
程序运行结果:
zhengwei
将key对应的value减1:
// 将key对应的value减一
jedis.set(“num”,“10”);
jedis.decr(“num”);
String number = jedis.get(“num”);
System.out.println(number);
程序运行结果:
9
将key对应的value减去指定数字:
jedis.decrBy(“num”,5);
number = jedis.get(“num”);
System.out.println(number);
程序运行结果:
4
mset批量存入String类型:
// mset批量存入String类型
jedis.mset(“num0”,10+"",“num1”,11+"");
System.out.println(jedis.get(“num0”)+"----------"+jedis.get(“num1”));
程序运行结果:
10----------11
设置带有失效时间的value:
// 设置带有失效时间的value
jedis.setex(“age”, 20,“30”);
System.out.println(jedis.get(“age”));
第二个参数是失效时间
程序运行结果:
30
20秒后,再次运行
System.out.println(jedis.get(“age”));
程序运行结果:
null
String写入速度:
//String存入速度
long startTime = System.currentTimeMillis();
for(int n=0;n<100000;n++){
jedis.set(“SPEED:”+n,n+"");
}
System.out.println(“String写入10万条数据耗时:”+(System.currentTimeMillis()-startTime));
程序运行结果:
String写入10万条数据耗时:7220
String 读取速度:
// String 读取速度
Long redTime = System.currentTimeMillis();
for(int m =0;m<100000;m++){
jedis.get(“SPEED:”+m);
}
System.out.println(“String读取10万条数据耗时:”+(System.currentTimeMillis()-redTime));
程序运行结果:
String读取10万条数据耗时:5416
mset批量存入String类型:
// mset批量存入String类型
jedis.mset(“num0”,10+"",“num1”,11+"");
System.out.println(jedis.get(“num0”)+"----------"+jedis.get(“num1”));
程序运行结果:
10----------11
输入输出流的形式存取实体:
//输入输出流的形式存取实体
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(byteArrayOutputStream);
oos.writeObject(myCar);
byte[] obyte = byteArrayOutputStream.toByteArray();
jedis.set(“mycar”.getBytes(),obyte);
//从redis拿出实例
byte[] myCarResp = jedis.get(“mycar”.getBytes());
ByteArrayInputStream bais = new ByteArrayInputStream(myCarResp);
ObjectInputStream ois = new ObjectInputStream(bais);
Car car = (Car)ois.readObject();
System.out.println(“car----------”+car);
程序运行结果:
car----------Car(name=法拉利, color=red, age=2)
json方式存取实例:
//json方式存取实例
Car yourCar = new Car(“BMW”,“white”,1);
String jsonString = JSONObject.toJSONString(yourCar);
jedis.set(“yourCar”,jsonString);
System.out.println(“yourCar---------”+jedis.get(“yourCar”));
String jsonString2 = jedis.get(“yourCar”);
Car yourCar2 = JSON.parseObject(jsonString2,Car.class);
System.out.println(“yourCar2---------------”+yourCar2);
程序运行结果:
yourCar---------{“age”:1,“color”:“white”,“name”:“BMW”}
yourCar2---------------Car(name=BMW, color=white, age=1)
2.list类型
存入数据:
//list类型
List stringList = new ArrayList();
stringList.add(“红色的2年的法拉利”);
stringList.add(“a white 1-year-old BMW”);
String listJson = JSONObject.toJSONString(stringList);
jedis.set(“StringList”,listJson);
System.out.println(jedis.get(“StringList”));
程序运行结果:
[“红色的2年的法拉利”,“a white 1-year-old BMW”]
list的存入速度:
//list的存入速度
Long listReadTime = System.currentTimeMillis();
for(int j = 0;j<100000;j++){
List carList = new ArrayList();
String listName = “carList:”+j;
Car car1 = new Car();
car1.setAge(j);
car1.setName(“BMW”);
car1.setColor(“黑色”);
carList.add(car1);
// 把key和value分别序列化后存储
jedis.set(listName.getBytes(),SerializeUtil.serialize(carList));
}
System.out.println(“List写入10万条数据耗时:”+(System.currentTimeMillis()-listReadTime));
程序运行结果:
List写入10万条数据耗时:6965
list的读取速度:
// list的读取速度
Long listTime = System.currentTimeMillis();
for(int j = 0;j<100000;j++){
String listName = “carList:”+j;
// 取出存储的数据
jedis.get(listName.getBytes());
}
System.out.println(“List取出10万条数据耗时:”+(System.currentTimeMillis()-listTime));
程序运行结果:
List取出10万条数据耗时:5508
3.hash类型
存入数据:
//hash数据
jedis.hset(“wangzhengwei”,“BMW”,“740”);
jedis.hset(“wangzhengwei”,“Benz”,“S400”);
jedis.hset(“wangzhengwei”,“prosche”,“911”);
System.out.println(jedis.hgetAll(“wangzhengwei”));
System.out.println(jedis.hget(“wangzhengwei”,“BMW”));
System.out.println(jedis.hkeys(“wangzhengwei”));
System.out.println(jedis.hvals(“wangzhengwei”));
程序运行结果:
{Benz=S400, BMW=740, prosche=911}
740
[Benz, BMW, prosche]
[740, S400, 911]
增加value的值、删除一个key-value:
jedis.hincrBy(“wangzhengwei”,“BMW”,10);
System.out.println(jedis.hget(“wangzhengwei”,“BMW”));
jedis.hdel(“wangzhengwei”,“prosche”,“sfasdf”);
System.out.println(jedis.hgetAll(“wangzhengwei”));
程序运行结果:
750
{Benz=S400, BMW=750}
4.set类型
存入数据:
//set数据
jedis.sadd(“chenshiliang”,“lanbojini”,“laosilaisi”,“宾利”);
System.out.println(jedis.smembers(“chenshiliang”));
// 判断set中是否存在某个值
System.out.println(jedis.sismember(“chenshiliang”,“laosilaisi”));
jedis.sadd(“wangmao”,“lanbojini”);
System.out.println(jedis.sdiff(“chenshiliang”,“wangmao”));
程序运行结果:
[宾利, lanbojini, laosilaisi]
true
[宾利, laosilaisi]
求补集、交集、并集:
jedis.sdiffstore(“dis”,“chenshiliang”,“wangmao”);
System.out.println(jedis.smembers(“dis”));
jedis.sinterstore(“own”,“chenshiliang”,“wangmao”);
System.out.println(jedis.smembers(“own”));
jedis.sadd(“wangmao”,“大众”,“红旗”);
System.out.println(jedis.sunion(“chenshiliang”,“wangmao”));
程序运行结果:
[宾利, laosilaisi]
[lanbojini]
[宾利, lanbojini, 红旗, 大众, laosilaisi]
set存入速度:
// set存入速度
Long setTime = System.currentTimeMillis();
for(int b=0;b<10000;b++){
jedis.sadd(“SET”,“TESTSET:”+b);
}
System.out.println(“SET存1万条数据耗时:”+(System.currentTimeMillis()-setTime));
程序运行结果:
SET存1万条数据耗时:574
5.zset有序集合
存取数据:
//zset有序集合
Map<String ,Double> zmap = new HashMap<String ,Double>();
zmap.put(“lifeiyang”,90.0);
zmap.put(“wangmao”,70.0);
zmap.put(“chenshiliang”,98.0);
System.out.println(jedis.zadd(“test”,zmap));
System.out.println(jedis.zrange(“test”,0,2));
System.out.println(jedis.zrange(“test”,0,1));
System.out.println(jedis.zrange(“test”,0,3));
System.out.println(jedis.zrange(“test”,2,3));
System.out.println(jedis.zrevrange(“test”,1,2));
System.out.println(jedis.zrank(“test”,“wangmao”));
System.out.println(jedis.zrank(“test”,“lifeiyang”));
程序运行结果:
0
[wangmao, lifeiyang, chenshiliang]
[wangmao, lifeiyang]
[wangmao, lifeiyang, chenshiliang, guodongchao]
[chenshiliang, guodongchao]
[guodongchao, chenshiliang]
0
1
存入数据排序:
此处的排序是根据第二个参数分数来排序的
jedis.zincrby(“test”,40.0,“wangmao”);
System.out.println(jedis.zrange(“test”,0,3));
jedis.zadd(“test”,98,“guodongchao”);
System.out.println(jedis.zrevrange(“test”,0,4));
程序运行结果:
[lifeiyang, chenshiliang, guodongchao, huangmao, wangmao]
[wangmao, huangmao, guodongchao, chenshiliang, lifeiyang]
zset的存取效率:
//zset的存取效率
Long zsetTime = System.currentTimeMillis();
for(double i = 0;i<10000;i++){
jedis.zadd(“ZSET”,i,“TEST:”+i);
}
System.out.println(“ZSET存1万条数据耗时:”+(System.currentTimeMillis()-zsetTime));
程序运行结果:
ZSET存1万条数据耗时:571