注:本篇代码部分均以redisTemplate为例,配置这块忽略

Redis数据类型

string(字符串)
hash(哈希)
list(列表,相当于linkedlist)
set(无序集合,相当于Set)
sorted set(有序集合)

String

字符串类型是 Redis 中最为基础的数据存储类型,它在 Redis 中是二进制安全的,这意味着该类型可以接受任何格式的数据

设置/获取一个key value

redisRepository.set("validatorCode","验证码是:203456,10秒内有效",10);
System.out.println(redisRepository.get("validatorCode")); //验证码是:203456,10秒内有效 
Thread.sleep(10000);
System.out.println(redisRepository.get("validatorCode")); // null
long value = redisRepository.incr("atomicInteger",1);
System.out.println(value); //1
value = redisRepository.incr("atomicInteger",11);
System.out.println(value);//12

适用场景:发短信,存一些静态资源(图片),配置信息等等

Hash

可以理解为首先有一个主key,在这个主key下数据以key-value形式存储,值的类型也可以是String

redisRepository.hset("user","choviwu", new User("choviwu",18));
redisRepository.hset("user","junshang",new User("junshang",20));
System.out.println(redisRepository.hget("user","choviwu")); 
//{userName=choviwu, age=18}
System.out.println(redisRepository.hget("user","junshang"));
//{userName=junshang, age=20}
System.out.println(redisRepository.hentries("user"));
//{choviwu={userName=choviwu, age=18}, junshang={userName=junshang, age=20}}

另外,redisTemplate还提供了hasHash,set多个hash key/value的api

适用场景:可以根据用户/课程进行hash作为key,用户名作为key,用户基本信息作为value

####List 列表的元素类型为string,按照插入顺序排序,元素有索引

redisRepository.lSet("list", "a");
redisRepository.lSet("list", "b");
redisRepository.lSet("list", "c");
redisRepository.lSet("list", "a");
System.out.println(redisRepository.lGetIndex("list",1));  //根据索引获取值 b
System.out.println(redisRepository.lGet("list",1,2));  //获取指定的列表值 [b,c]

适用场景: 存储用户的文章列表

Set

元素具有唯一性,不重复,跟java的Set类似

redisRepository.sSet("blackIp","192.168.0.1","192.168.0.2","192.168.0.3","192.168.0.105");
String ip = NetUtil.getLocalhostStr();
Set set = redisRepository.sGet("blackIp");
	set.forEach(c->{
		if(ip.equals(c)){
			throw new RuntimeException("黑名单");
		}
}); 

适用场景: 封禁指定的ip,存储班级的用户id信息,标签等不重复信息

Sorted Set

有序集合和集合有着必然的联系,他保留了集合不能有重复成员的特性,但不同得是,有序集合中的元素是可以排序的,但是它和列表的使用索引下标作为排序依据不同的是,它给每个元素设置一个分数,作为排序的依据

redisRepository.sortSet("jlcx","junshang",1);
redisRepository.sortSet("jlcx","xiaoqiang",2);
redisRepository.sortSet("jlcx","zhanmeihong",3);
redisRepository.sortSet("jlcx","wuchaowei",4); 
Set set = redisRepository.sortGet("jlcx",1,3);
set.forEach(c->{
		System.out.println(c);
	});
	//junshang xiaoqiang zhanmeihong

适用场景:某些业务上的类比排序