注:本篇代码部分均以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")); //验证码是: 
 20345610秒内有效 
 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(列表,相当于linkedlist)

列表的元素类型为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(无序集合,相当于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

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