redis五种基本数据类型:String,list,set,zset,hash
String数据类型,key 有一个最小的固定大小(512字节) 浪费内存
hash数据类型应用场景:1.放对象,2.放有相同大key类的数据
/**
* hash的数据类型
*/
@Test
void testHash() {
HashOperations<String, Object, Object> hash = redisTemplate.opsForHash();
hash.put("user", "age", 11);
hash.put("user", "name", "啊哈");
hash.put("user", "gender", "未知");
//获取大key中一个数据
Object o = hash.get("user", "name");
System.out.println(o);
//获取大key中所有数据
Map<Object, Object> user = hash.entries("user");
//遍历Map方法只有迭代器,
Iterator<Object> iterator = user.keySet().iterator();
while ((iterator.hasNext())) {
//next() 迭代器中的元素
System.out.println(user.get(iterator.next()));
}
//或者使用lambda表达式
user.forEach((k, v) -> {
System.out.println(v);
});
}
list数据类型应用场景:1.按顺序做一些功能 2.有限资源消费
/**
* list数据类型 队列 规则先进先出
*/
@Test
void testList() {
ListOperations<String, Object> list = redisTemplate.opsForList();
//左边放
list.leftPush("reel","100-2");
list.leftPush("reel","200-5");
list.leftPush("reel","300-9");
list.leftPush("reel","400-20");
//左边拿,消费(拿去后redis中就没有了)
Object left = list.leftPop("reel");
//右边拿,消费(拿去后redis中就没有了)
Object right = list.rightPop("reel");
System.out.println(left);
System.out.println(right);
}
set数据类型 :无序且不可重复(即具有去重性) 应用场景:使用场景与Java中的set相同
/**
* set数据类型 与Java中set一样
* 无序且不可重复,使用场景与Java中的set相同
*/
@Test
void testSet() {
SetOperations<String, Object> set = redisTemplate.opsForSet();
set.add("set", "张三");
set.add("set", "张三");
set.add("set", "李四");
set.add("set", "王五");
Set<Object> set1 = set.members("set");
for (Object o : set1) {
System.out.println(o);
}
}
ZSet数据类型 可以对ZSet中的元素进行自动排序(通过元素的权重属性排序)
应用场景:排序
/**
* ZSet数据类型
* 可以对ZSet中的元素进行自动排序(通过元素的权重属性排序)
*/
@Test
void testZset() {
ZSetOperations<String, Object> zSet = redisTemplate.opsForZSet();
// zSet.add("news","ssssssss",90);
// zSet.add("news","我绝的不行",8);
// zSet.add("news","咕噜咕噜",9);
// zSet.add("news","请问",9);
//根据下标的范围获取数据,range 权重是从小到大
Set<Object> news1 = zSet.range("news", 0, 3);
for (Object o : news1) {
System.out.println(o);
}
System.out.println("===========");
//根据下标的范围获取数据,reverseRange 权重是从大到小
Set<Object> news2 = zSet.reverseRange("news", 0, 3);
for (Object o : news2) {
System.out.println(o);
}
}