Redis 常用数据类型的操作步骤
1. 注入 RedisTemplate 对象
@Autowired
private RedisTemplate redisTemplate;
用于在测试类中注入 RedisTemplate 对象,以便进行 Redis 操作。
2. 操作字符串类型的数据
@Test
public void testString() {
// set get setex setnx
ValueOperations valueOperations = redisTemplate.opsForValue();
// set
// 使用 set 方法将键名为 "city" 的字符串类型键设置为值为 "北京"
valueOperations.set("city", "北京");
// get
// 使用 get 方法获取键名为 "city" 的字符串类型键的值,并将其转换为字符串类型
String city = (String) valueOperations.get("city");
System.out.println(city);
// setex
// 使用 set 方法设置键名为 "code" 的字符串类型键的值为 "1234",并设置其在 3 分钟后过期
valueOperations.set("code", "1234", 3, TimeUnit.MINUTES);
// setnx
// 使用 setIfAbsent 方法若键名为 "lock" 不存在,则将其值设置为 1
valueOperations.setIfAbsent("lock", 1);
// 若键名为 "lock" 已存在,则不进行任何操作
valueOperations.setIfAbsent("lock", 2);
}
3. 操作哈希类型的数据
@Test
public void testHash() {
// hset hget hdel hkeys hvals
HashOperations hashOperations = redisTemplate.opsForHash();
// hset 向哈希表中存入数据
hashOperations.put("user", "name", "张三");
hashOperations.put("user", "sex", "男");
// hget 获取哈希表中指定字段的值
String name = (String) hashOperations.get("user", "name");
System.out.println(name);
// hdel 删除哈希表中的一个或多个指定字段
hashOperations.delete("user", "name");
// hkeys 获取哈希表中所有的字段
Set keys = hashOperations.keys("user");
keys.forEach(System.out::println);
// hvals 获取哈希表中所有字段的值
List values = hashOperations.values("user");
values.forEach(System.out::println);
}
4. 操作列表类型的数据
@Test
public void testList() {
// lpush lrange rpop llen
ListOperations listOperations = redisTemplate.opsForList();
// lpush 从列表左侧插入一个或多个元素
listOperations.leftPushAll("mylist", "a" , "b", "c");
listOperations.leftPush("mylist", "d");
// lrange 获取列表中的所有元素
List list = listOperations.range("mylist", 0, -1);
list.forEach(System.out::println);
// rpop 移除并返回列表的最后一个元素
listOperations.rightPop("mylist");
// llen 获取列表的长度
Long mylist = listOperations.size("mylist");
System.out.println(mylist);
}
5. 操作集合类型的数据
@Test
public void testSet() {
// sadd smembers scard sinter sunion srem
SetOperations setOperations = redisTemplate.opsForSet();
// sadd 向集合中添加元素
setOperations.add("myset1", "a", "b", "c", "d");
setOperations.add("myset2", "a", "b", "x", "y");
// smembers 获取集合中的所有元素
Set myset1 = setOperations.members("myset1");
myset1.forEach(System.out::println);
// scard 获取集合中的元素个数
Long myset2 = setOperations.size("myset2");
System.out.println(myset2);
// sinter 求两个集合的交集
Set intersect = setOperations.intersect("myset1", "myset2");
System.out.println(intersect);
// sunion 求两个集合的并集
Set union = setOperations.union("myset1", "myset2");
System.out.println(union);
// srem 从集合中移除元素
setOperations.remove("myset1", "a", "b");
}
6. 操作有序集合类型的数据
@Test
public void testZset() {
// zadd zrange zincrby zrem
ZSetOperations zSetOperations = redisTemplate.opsForZSet();
// zadd 向有序集合中添加元素,并指定分值
zSetOperations.add("zset1", "a", 10);
zSetOperations.add("zset1", "b", 12);
zSetOperations.add("zset1", "c", 9);
// zrange 获取有序集合的指定范围内的元素
Set zset1 = zSetOperations.range("zset1", 0, -1);
System.out.println(zset1);
// zincrby 为有序集合中的元素增加分值
zSetOperations.incrementScore("zset1", "c", 10);
// zrem 从有序集合中移除元素
zSetOperations.remove("zset1", "a", "b");
}
7. 通用命令操作
@Test
public void testCommon() {
// keys exists type del
// keys 获取所有键
Set keys = redisTemplate.keys("*");
System.out.println(keys);
// exists 检查键是否存在
Boolean name = redisTemplate.hasKey("name");
Boolean myset1 = redisTemplate.hasKey("myset1");
System.out.println(name);
System.out.println(myset1);
// type 获取键所对应的值的数据类型
keys.forEach(key -> {
DataType type = redisTemplate.type(key);
System.out.println(type);
});
// del 删除键
redisTemplate.delete("myset2");
}