String
字符串是Redis中最简单、最常用的数据类型,它可以存储任何形式的字符串,包括二进制数据。
一个字符串类型的值最大可以达到512MB,常用set
(设置数值)、get
(获取数值)、incr/decr
(增加/减少数值)等操作
// set
redisTemplate.opsForValue().set("string", 1);
// get
redisTemplate.opsForValue().get("string");
System.out.println(redisTemplate.opsForValue().get("string"));
// 输出结果:1
// incr
redisTemplate.opsForValue().increment("string");
System.out.println(redisTemplate.opsForValue().get("string"));
// 输出结果:2
// decr
redisTemplate.opsForValue().decrement("string");
System.out.println(redisTemplate.opsForValue().get("string"));
// 输出结果:1
List
Redis列表是链表实现的,按照插入顺序排序的字符串元素集合,可以从列表的两端进行添加或移除元素。
LPUSH/RPUSH(从左/右端插入元素)、LPOP/RPOP(从左/右端弹出元素)、LRANGE(获取列表中的一段元素)等操作
添加元素
// list
// set
redisTemplate.opsForList().leftPushAll("list", "q");
redisTemplate.opsForList().leftPushAll("list", "w");
redisTemplate.opsForList().leftPushAll("list", "e");
redisTemplate.opsForList().leftPushAll("list", "r");
// get
System.out.println(redisTemplate.opsForList().range("list",0,3));
// 输出结果:[r, e, w, q]
弹出元素
// 弹出最右边的元素
String r = redisTemplate.opsForList().rightPop("list").toString();
System.out.println(r);
// 输出:q
Set
集合是一个不包含重复元素的字符串元素集合。支持SADD(添加元素)、SMEMBERS(获取所有元素)等,
在Set集合中,你可以执行一些标准的数学操作,如SINTER(求交集)、SDIFF(求差集)、SUNION(求并集)等
添加元素
redisTemplate.opsForSet().add("setA", 1);
redisTemplate.opsForSet().add("setA", 1);
redisTemplate.opsForSet().add("setA", 2);
redisTemplate.opsForSet().add("setB", 1);
redisTemplate.opsForSet().add("setB", 1);
redisTemplate.opsForSet().add("setB", 3);
交集
System.out.println(redisTemplate.opsForSet().intersect("setA","setB"));
// 输出:[1]
差集
System.out.println(redisTemplate.opsForSet().difference("setA","setB"));
// 输出:[2]
并集
System.out.println(redisTemplate.opsForSet().union("setA","setB"));
// 输出:[1,2,3]
Hash
哈希是一个键值对集合,键值对的key是唯一的。常用HSET(设置字段值)、HGET(获取字段值)、
HGETALL(获取所有字段及其值)、HDEL(删除字段)等
redisTemplate.opsForHash().put("hash", "a", "1");
redisTemplate.opsForHash().put("hash", "a", "2");
redisTemplate.opsForHash().put("hash", "b", "3");
key是唯一存在的,后续添加的value会覆盖之前的数值
Zset
有序集合是一种类似于集合的数据类型,但每个元素都关联了一个分数,可以通过分数来排序。
常用ZADD(添加元素及分数)、ZRANGE(按索引范围返回元素)、ZREM(移除元素)、ZSCORE(获取元素的分数)等
redisTemplate.opsForZSet().add("zSet",1,1);
redisTemplate.opsForZSet().add("zSet",2,1.1);
redisTemplate.opsForZSet().add("zSet",3,1.2);
Bitmaps-位图
Bitmaps并不是一种实际的数据类型,而是基于 String 类型的一种特殊操作方式。
Bitmaps允许你在 Redis中以位为单位存储数据,并且可以对这些位进行操作,常用在如用户签到、统计活跃度等场景
// 假定用户第一天签到、第二天未签到
redisTemplate.opsForValue().setBit("userId:1:signIn",1,true);
redisTemplate.opsForValue().setBit("userId:1:signIn",2,false);
System.out.println(redisTemplate.opsForValue().getBit("userId:1:signIn",1));
// 输出:true
System.out.println(redisTemplate.opsForValue().getBit("userId:1:signIn",2));
// 输出:false
统计个数
// 计算用户签到了几天,统计true值的个数
System.out.println(redisTemplate.execute((RedisCallback<Object>) (connection )-> connection.bitCount("userId:1:signIn".getBytes())));
// 输出:1
通过简单的操作、输出以及可视化工具,可以初步对Redis的各数据结构有一定的了解,
而具体的使用和设计还是需要根据业务场景进行设计