您的位置:首页 > 大数据

Redis中常用的五大数据类型的介绍以及代码的实现

2018-07-15 22:26 771 查看

一.五大数据类型的介绍

String:字符串
二进制安全的,可以包含任何数据,包括jpg图片或者序列化对象
字符串value长度不能超过512MB
Hash:哈希
类似java中Map,就是一个键值对集合
特别适合存储对象
List:列表
简单的字符串列表,按照插入顺序排序
底层是一个链表,便插入和删除
SET:集合
String类型的无序结合
集合中绝对不可能出现重复元素
可完成Sets之间的聚合操作
ZSET:有序集合
和Set一样也是String类型元素的集合,并且不能出现重复成员
每个成员会关联一个Double类型分数,通过分数来为集合中的成员进行从小到大的排序

成员是唯一的,但是分数可以重复

二.代码实现

String代码实现:

public class stringDemo {
public static Jedis jedis = JedisPoolUtil.getJedis();
/*
添加和获取
*/
@Test
public void fun(){
jedis.set("num","1");
System.out.println(jedis.get("num"));
}
//删除值
@Test
public void fun1(){
jedis.del("num");
System.out.println(jedis.get("num"));
}
//自减和自增
@Test
public void fun2(){
jedis.set("num","1");
System.out.println(jedis.get("num"));
jedis.decr("num");
System.out.println(jedis.get("num"));
jedis.incr("num");
jedis.incr("num");
System.out.println(jedis.get("num"));
}
/*
加上/减去  一个数
incrby
返回的是修改之后的值如果原值是字符串不是数字,则会抛出异常
*/
@Test
public void fun3(){
Long num = jedis.incrBy("numm",3);
System.out.println(num);
jedis.decrBy("num",10);
System.out.println(jedis.get("num"));
jedis.set("name","zhangjie");
//jedis.decrBy("name",1);
}
//字符串拼接
@Test
public void fun4(){
Long len = jedis.append("name","123");
System.out.println(len);
System.out.println(jedis.get("name"));
}
}
Hash代码实现:
public class hashDemos {
public static Jedis jedis = JedisPoolUtil.getJedis();
/*
hash 操作的是map对象,适合存储键值对对象的信息
存值 是那个参数第一个变量的名称,map键名(key),map键值(value)
并调用hset
*/
@Test
public void fun(){
Long num = jedis.hset("hash1","username","Roy wang");
System.out.println(num);
String hgets = jedis.hget("hash1","username");
System.out.println(hgets);
}

/*
也可以调用多个key,调用hmset
*/
@Test
public void fun1(){
Map<String,String> map = new HashMap<String, String>();
map.put("username","karry wang");
map.put("age","18");
map.put("sex","male");
String result = jedis.hmset("hash2",map);
System.out.println(result);
}
/*
获取hash中所有值
*/
@Test
public void fun2(){
Map<String,String> map2 = new HashMap<String, String>();
map2 = jedis.hgetAll("hash2");
System.out.println(map2);
}
/*
删除hash中的键。可以删除一个也可以删除多个,返回的是删除的个数
*/
@Test
public void fun3(){
Long num = jedis.hdel("hash2","username","age");
System.out.println(num);
Map<String,String> map2 = new HashMap<String, String>();
map2 = jedis.hgetAll("hash2");
System.out.println(map2);
}
/*
Hincrby 命令用于为哈希表中的字段值加上指定增量值。
增量也可为负数,对指定字段进行减法操作。
如果哈希表的 key 不存在,一个新的哈希表被创建并执行 HINCRBY 命令。
如果指定的字段不存在,那么在执行命令前,字段的值被初始化为 0 。
对一个储存字符串值的字段执行 HINCRBY 命令将造成一个错误。
本操作的值被限制在 64 位(bit)有符号数字表示之内。
也就是添加一个age的字段,值为10;
*/
@Test
public void fun4(){
Map<String,String> map2 = new HashMap<String, String>();
map2 = jedis.hgetAll("hash2");
System.out.println(map2);
jedis.hincrBy("hash2","age",10);
map2 = jedis.hgetAll("hash2");
System.out.println(map2);

}
/*
判断hash是否存在某个值
*/
@Test
public void fun5(){
System.out.println(jedis.hexists("hash2","username"));
System.out.println(jedis.hexists("hash2","age"));
}
/*
获取hash中键值对的个数
*/
@Test
public void fun6(){
System.out.println(jedis.hlen("hash2"));
}
/*
获取一个hash中所有的key的值
*/
@Test
public void fun7(){
System.out.println(jedis.hkeys("hash2"));
}
/*
获取一个hash中所有的value的值
*/
@Test
public void fun8(){
System.out.println(jedis.hvals("hash2"));
}
}
List代码实现:
public class listDemo {
public static Jedis jedis = JedisPoolUtil.getJedis();
/*
lpush 头部添加
rpush尾部添加
*/
@Test
public void fun1(){
Long num = jedis.lpush("mylist","jason zhang","Karry wang"," Roy " +
"wang");
System.out.println(num);
Long rpush1 = jedis.rpush("mylist","tail");
System.out.println(rpush1);
Long lpush1 = jedis.lpush("mylist","head");
System.out.println(lpush1);

}
/*
查看列表  参数  名字 start end -1代表最后一个元素 -2 代表倒数第二个
*/
@Test
public void fun2(){
List<String> list =jedis.lrange("mylist",0,-1);
System.out.println(list);
}
/*
移出并获取列表的第一个元素
*/
@Test
public void fun3(){
String ltop = jedis.lpop("mylist");
System.out.println(ltop);
}

/*
移出并获取列表的最后一个元素
*/
@Test
public void fun4(){
String last = jedis.rpop("mylist");
System.out.println(last);
}
/*
判断有没有存在的键,有就插入,没有就不插入,不会创建
*/
@Test
public void fun5(){
List<String> list = jedis.lrange("mylist",0,-1);
System.out.println(list);
Long num = jedis.lpushx("mylist","jason yi");
list = jedis.lrange("mylist",0,-1);
System.out.println(num);
System.out.println(list);
}
/*
移除元数,返回移除的个数>0 从前往后删除,<0从后往前删除
*/
@Test
public void fun6(){
Long num = jedis.lrem("mylist",2,"jason yi");
System.out.println(num);
}

/*
设置值
*/
@Test
public void fun7(){
jedis.lset("mylist",2,"hejiong");
List<String> list = jedis.lrange("mylist",0,-1);
System.out.println(list);
}
/*
在中间插入值,如果该值不存在则返回-1,如果存在返回list的长度
*/
@Test
public void fun8(){
Long num = jedis.linsert("mylist", BinaryClient.LIST_POSITION
.BEFORE,"Roy wang","Roy wang");
System.out.println(num);
jedis.lset("mylist",2,"jason zhang");
List<String> list = jedis.lrange("mylsit",0,-1);
System.out.println(list);
}
/*
在第一个列表尾巴中弹出,在第二个列表中压入头
* 使用场景,这样做可以保证原有数据的安全性,如果
* 从第一个列表中拆出来,直接释放掉那么一旦发生了异常
* 数据就不能回复了,我们还可以加上一个守护进程,更加确保
* 数据的安全性
*/
@Test
public void fun9(){
String rpoplpush = jedis.rpoplpush("mylist","mylist1");
List<String> list = jedis.lrange("mylist",0,-1);
System.out.println(list);
List<String> list1 = jedis.lrange("mylist1",0,-1);
System.out.println(list1);
System.out.println(rpoplpush);
}

}
SET集合代码实现:
public class setDemo {
/*
* Set集合,和List类的区别就是
* set中不会出现重复的数据
* 他可以进行聚合操作效率比较高
* 其余的操作基本上和list相同
*
* */
public static Jedis jedis = JedisPoolUtil.getJedis();
/*
添加元素删除元素(smove);
*/
@Test
public void fun(){
Long num = jedis.sadd("myset","zhang jie","zhangjie","karry wang","Roy " +
"wang");
System.out.println(num);
}
/*
获得元素 */
@Test
public void fun1(){
Set<String> myset = jedis.smembers("myset");
System.out.println(myset);
}
/*
移除元数
*/
@Test
public void fun2(){
jedis.srem("myset","zhangjie");
Set<String> myset = jedis.smembers("myset");
System.out.println(myset);
}
/*
判断是否这个set中存在某个值
*/
@Test
public void fun3(){
Boolean sismember = jedis.sismember("myset","zhang jie");
System.out.println(sismember);
}
/*
获得A-B 获得差集合
*/
@Test
public void fun4(){
jedis.sadd("myset1","123","32","abc","def","123456","asdcfde");
jedis.sadd("myset2","abc","345","123","fda");
Set<String> sdiff = jedis.sdiff("myset1","myset2");
System.out.println(sdiff);
}
/*
获得交集*/
@Test
public void fun5(){
Set<String> sinter = jedis.sinter("myset1","myset2");
System.out.println(sinter);
}

/*获得并集合 */
@Test
public void fun6(){
Set<String> sunion = jedis.sunion("myset1","myset2");
System.out.println(sunion);
}

/*
成员数量 */
@Test
public void fun7(){
System.out.println(jedis.scard("myset1"));
}
/*获得随机的一个成员 */
@Test
public void fun8(){
System.out.println(jedis.srandmember("myset1"));
}
/* 将相差的成员放到一个新的set中同理交集和并集都可以后面均---加上一个store即可------并返回新的长度*/

@Test
public void fun9(){
System.out.println(jedis.sdiffstore("myset3","myset1","myset2"));
System.out.println(jedis.smembers("myset3"));
}

}
ZSET有序集合
public class zsetDemo {
/*和set极为的类似,他们是字符串的集合,没有重复的数据
差别是sortedset每个成员中都会有一个分数(score)与之关联
,redis正是通过分数来为集合中的成员进行从小到大的排序
sortedset中数据必须单一但是他的score可以是重复的 */
public static Jedis jedis = JedisPoolUtil.getJedis();
@Test
public void fun(){
jedis.zadd("mysort",100.0,"zhangsan");
jedis.zadd("mysort",200.0,"lisi");
jedis.zadd("mysort",50.0,"wangwu");
Map<String,Double> map = new HashMap<String, Double>();
map.put("mutouliu",70.0);
jedis.zadd("mysort",map);
Set<String> mysort = jedis.zrange("mysort",0,-1);
System.out.println(mysort);
Set<String> mysort1 = jedis.zrange("mysort",-1,0);
System.out.println(mysort1);
}

}
以上就是Redis常见的五大数据类型。


阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: