
【笔记】Redis介绍和Java的整合
redis模板的调用实例代码package com.sky.test;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.connection.DataType;
import org.springframework.data.redis.core.*;
import javax.annotation.Resource;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
/**
* Redis测试类
* @author 上玄
* @since 2025-03-21
*/
@SpringBootTest
public class SpringDataRedisTest {
@Resource
private RedisTemplate redisTemplate;
@Test
public void testRedisTemplate(){
System.out.println(redisTemplate);
// 获取RedisTemplate的子类对象
ValueOperations ops = redisTemplate.opsForValue();
HashOperations hashOps = redisTemplate.opsForHash();
ListOperations listOps = redisTemplate.opsForList();
SetOperations setOps = redisTemplate.opsForSet();
ZSetOperations zSetOps = redisTemplate.opsForZSet();
}
/**
* 操作字符串
*/
@Test
public void testString(){
// set get
redisTemplate.opsForValue().set("name","张三");
String name = (String) redisTemplate.opsForValue().get("name");
System.out.println(name);
// setex: 设置键值对并指定过期时间
redisTemplate.opsForValue().set("city","北京",3, TimeUnit.MINUTES);
// setnx: 设置键值对,如果键不存在则成功,否则失败
// 相当于:if not exists name then set name value
Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent("name", "李四");
System.out.println(aBoolean);
}
/**
* 操作哈希类型
*/
@Test
public void testHash(){
// hset hget : 设置和获取哈希表中的字段值
HashOperations hashOperations = redisTemplate.opsForHash();
hashOperations.put("user1", "name", "张三");
hashOperations.put("user1", "age", "25");
String name = (String) hashOperations.get("user1", "name");
System.out.println(name);
// hasKey: 检查哈希表中是否存在指定的字段
Boolean b = hashOperations.hasKey("user1", "age");
System.out.println(b);
// hkeys命令:获取哈希表中所有的字段名
Set user1 = hashOperations.keys("user1");
System.out.println(user1);
// hvals命令:获取哈希表中所有的字段值
List user11 = hashOperations.values("user1");
System.out.println(user11);
// hdel : 删除哈希表中的一个或多个字段
Long delete = hashOperations.delete("user1", "age");
System.out.println(delete);
Boolean b1 = hashOperations.hasKey("user1", "age");
System.out.println(b1);
}
/**
* 操作列表类型
*/
@Test
public void testList(){
// lpush rpush : 在列表的左侧或右侧插入一个或多个值
ListOperations listOperations = redisTemplate.opsForList();
// lpushAll : 在列表的左侧插入多个值
listOperations.leftPushAll("mylist", "a", "b", "c");
// lpush : 在列表的左侧插入一个值
listOperations.leftPush("mylist", "d");
// lrange : 获取列表中指定范围内的元素
List mylist = listOperations.range("mylist", 0, -1);
System.out.println("mylist: " + mylist);
// llen : 获取列表的长度
Long length = listOperations.size("mylist");
System.out.println("长度:" + length);
// rpop : 移除并返回列表的最后一个元素
String rightPop = (String) listOperations.rightPop("mylist");
System.out.println("rightPop: " + rightPop);
// lrem : 从列表中删除指定数量和值相同的元素
Long remove = listOperations.remove("mylist", 1, "b");
System.out.println("remove: " + remove);
// ltrim : 截取列表
listOperations.trim("mylist", 0, 1);
mylist = listOperations.range("mylist", 0, -1);
System.out.println("截取后:" + mylist);
}
/**
* 操作集合类型
*/
@Test
public void testSet() {
SetOperations setOperations = redisTemplate.opsForSet();
// sadd : 添加元素到集合中
setOperations.add("myset1", "a", "b", "c", "d");
setOperations.add("myset2", "a", "b", "x", "y", "z");
// smembers : 获取集合中的所有元素
Set myset1 = setOperations.members("myset1");
System.out.println("myset1: " + myset1);
Set myset2 = setOperations.members("myset2");
System.out.println("myset2: " + myset2);
// sismember : 判断元素是否在集合中
Boolean isMember = setOperations.isMember("myset1", "a");
System.out.println("isMember: " + isMember);
// sdiff : 获取两个集合的差集
Set diff = setOperations.difference("myset1", "myset2");
System.out.println("差集:" + diff);
// sinter : 获取两个集合的交集
Set intersect = setOperations.intersect("myset1", "myset2");
System.out.println("交集:" + intersect);
// sunion : 获取两个集合的并集
Set union = setOperations.union("myset1", "myset2");
System.out.println("并集:" + union);
// smove : 将元素从一个集合移动到另一个集合
Boolean move = setOperations.move("myset1", "myset2", "a");
System.out.println("move: " + move);
// scard : 获取集合的元素数量
Long size = setOperations.size("myset1");
System.out.println("size: " + size);
// srem : 从集合中删除元素
Long remove = setOperations.remove("myset1", "a", "b");
System.out.println("remove: " + remove);
}
/**
* 操作有序集合类型
*/
@Test
public void testZSet() {
ZSetOperations zSetOperations = redisTemplate.opsForZSet();
// zadd : 添加元素到有序集合中
zSetOperations.add("myzset", "a", 1);
zSetOperations.add("myzset", "b", 2);
zSetOperations.add("myzset", "c", 3);
// zrange : 获取有序集合中指定范围内的元素
Set range = zSetOperations.range("myzset", 0, -1);
System.out.println("range: " + range);
// zrangeWithScores : 获取有序集合中指定范围内的元素及其分数
Set rangeWithScores = zSetOperations.rangeWithScores("myzset", 0, -1);
System.out.println("rangeWithScores: " + rangeWithScores);
// zrank : 获取元素在有序集合中的排名
Long rank = zSetOperations.rank("myzset", "b");
System.out.println("rank: " + rank);
// zrevrank : 获取元素在有序集合中的倒序排名
Long reverseRank = zSetOperations.reverseRank("myzset", "b");
System.out.println("reverseRank: " + reverseRank);
// zscore : 获取元素的分数
Double score = zSetOperations.score("myzset", "b");
System.out.println("score: " + score);
// zcount : 获取有序集合中指定分数范围内的元素数量
Long count = zSetOperations.count("myzset", 1, 2);
System.out.println("count: " + count);
// zrem : 从有序集合中删除元素
Long remove = zSetOperations.remove("myzset", "a", "b");
System.out.println("remove: " + remove);
// zcard : 获取有序集合的元素数量
Long size = zSetOperations.size("myzset");
System.out.println("size: " + size);
// zincrby : 增加元素的分数
Double increment = zSetOperations.incrementScore("myzset", "b", 1);
System.out.println("increment: " + increment);
}
/**
* 操作通用类型命令
*/
@Test
public void testCommon() {
// keys : 获取所有键
Set keys = redisTemplate.keys("*");
System.out.println("keys: " + keys);
// exists : 检查键是否存在
Boolean exists = redisTemplate.hasKey("name");
System.out.println("exists: " + exists);
// type : 获取键的类型
DataType type = redisTemplate.type("name");
System.out.println("type: " + type);
for (Object key : keys) {
DataType type1 = redisTemplate.type(key);
System.out.println("key: " + key + " type: " + type1);
}
// expire : 设置键的过期时间
redisTemplate.expire("name", 3, TimeUnit.MINUTES);
// persist : 移除键的过期时间
redisTemplate.persist("name");
// move : 移动键到另一个数据库
redisTemplate.move("name", 1);
// randomKey : 随机获取一个键
String randomKey = (String) redisTemplate.randomKey();
System.out.println("randomKey: " + randomKey);
// rename : 重命名键
redisTemplate.rename("name", "newName");
// renamenx : 重命名键,如果新键不存在则成功
Boolean rename = redisTemplate.renameIfAbsent("newName", "name");
System.out.println("rename: " + rename);
// delete : 删除一个或多个键
redisTemplate.delete("newName");
redisTemplate.delete("age");
}
}[secret]看看[/secret]